章节十六、2-TestNG注解和断言
一、TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的。
二、断言:判断返回的结果与我们的预期结果是否一致。
1、Assert.assertTrue();
2、Assert.assertFalse();
注意:
Assert true语句如果实际输出时false,测试不通过,并停止执行测试。
Assert.assertFalse()与Assert.assertTure()正好相反,也就是说,如果您希望某个元素在页面上不存在是测试继续执行,就可以用assertFalse,这样的话,如果元素在页面上存在的话,测试就会失败。
3、Assert.assertEquals()
它也是以同样的方式工作,就像assert true和assert false一样。如果值不等,就会停止执行,如果值相等就会继续执行。
三、断言案例演示
1、新建一个类
package applicationcode;
public class ClassToBeTested {
// 相加后返回一个int型结果
public int addNum(int a,int b) {
return a+b;
}
// 返回一个连接的字符串
public String addStrings(String a,String b) {
return a+" "+b;
}
// 返回一个int型的数组
public int[] getArry() {
int[] arrayExample = {1,2,3};
return arrayExample;
}
}
2、建一个testNG类,用来对ClassToBeTested 类进行断言
package testclasses; import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import applicationcode.ClassToBeTested; public class TestNG_Asserts { @Test
public void testAddNum() {
System.out.println("\n测试ClassToBeTested类中addNum方法两个数相加结果正确与否");
// 测试来中需要实例化被测试类的对象
ClassToBeTested obj = new ClassToBeTested();
int result = obj.addNum(1, 2);
// 断言实际结果与期望结果是否相等
Assert.assertEquals(result, 3);
} @Test
public void testAddStrings() {
System.out.println("\n测试ClassToBeTested类中addStrings方法连接后的字符串结果正确与否");
// 定义一个字符串变量作为期望结果用
String expectedString = "Hello Word";
// 测试来中需要实例化被测试类的对象
ClassToBeTested obj = new ClassToBeTested();
String result = obj.addStrings("Hello", "Word");
// 断言实际结果与期望结果是否相等
Assert.assertEquals(result, expectedString);
} @Test
public void testGetArry() {
System.out.println("\n测试ClassToBeTested类中getArry方法返回的数组正确与否\n");
// 定义一个int型数组作为期望结果用
int[] expectedArray = {1,2,3};
// 测试来中需要实例化被测试类的对象
ClassToBeTested obj = new ClassToBeTested();
int[] result = obj.getArry();
// 断言实际结果与期望结果是否相等
Assert.assertEquals(result, expectedArray);
}
}
断言成功运行结果:

断言失败运行结果:

注:
如果断言失败,那么该测试方法断言语句后的代码会立即停止运行,其它测试方法的运行不受影响。
四、软断言
1、当我们在使用Arrert方法进行断言时,假设第一个Arrert方法的断言失败,那么后面如果还有其它的断言将不会再被执行,如果需要继续执行就需要用到软断言。
package testclasses; import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert; import applicationcode.ClassToBeTested; public class TestNG_SoftAsserts {
@Test
public void testAddNum() {
System.out.println("\n测试ClassToBeTested类中addNum方法--->两个数相加结果正确与否");
// 测试来中需要实例化被测试类的对象
ClassToBeTested obj = new ClassToBeTested();
int result = obj.addNum(1, 2);
// 断言实际结果与期望结果是否相等
Assert.assertEquals(result, 2);
System.out.println("断言1");
Assert.assertEquals(result, 3);
System.out.println("断言2");
}
}
运行结果:

2、从下面的代码中我们可以看出,标红的软断言实际结果与预期结果是不一致的,而Assert方法的断言中两者是一致的,但在下面的运行结果中我们可以看到test运行成功了,且没有报错。
package testclasses; import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert; import applicationcode.ClassToBeTested; public class TestNG_SoftAsserts {
@Test
public void testAddNum() {
// 软断言
SoftAssert sa = new SoftAssert();
System.out.println("\n测试ClassToBeTested类中addNum方法--->两个数相加结果正确与否");
// 测试来中需要实例化被测试类的对象
ClassToBeTested obj = new ClassToBeTested();
int result = obj.addNum(1, 2);
// 断言实际结果与期望结果是否相等
sa.assertEquals(result, 2);
Assert.assertEquals(result, 3);
}
}
运行结果:

3、如何打印软断言报错信息?
通过以上两者案例可知,Assert断言只要遇到失败的就会立即终止执行后面的断言,且控制台会出现报错的具体信息。
软断言的断言方法即使遇到失败的断言,后面的断言依然会被执行,控制台不会打印出报错信息。
但如果在使软断言的情况下,想知道报错的软断言信息就需要使用到assertAll方法。
package testclasses; import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert; import applicationcode.ClassToBeTested; public class TestNG_SoftAsserts {
@Test
public void testAddNum() {
// 软断言
SoftAssert sa = new SoftAssert();
System.out.println("\n测试ClassToBeTested类中addNum方法--->两个数相加结果正确与否");
// 测试来中需要实例化被测试类的对象
ClassToBeTested obj = new ClassToBeTested();
int result = obj.addNum(1, 2);
// 断言实际结果与期望结果是否相等
// sa.assertEquals(result, 2);
sa.assertEquals(result, 2);
System.out.println("断言1");
Assert.assertEquals(result, 3);
System.out.println("断言2");
sa.assertAll();
}
}
运行结果:
从下面的运行结果中我们可以看到,该测试方法中的断言没有因为软断言错误而停止运行,但在该方法通过sa.assertAll();在所有的代码运行完成后打印出了具体的断言错误信息。

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。
章节十六、2-TestNG注解和断言的更多相关文章
- 章节十六、3-TestNG方法和类注解
一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有1 ...
- 章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行
一. 把测试方法分优先级执行----->(priority=索引) 1.新建一个testng方法 package testclasses; import org.testng.annotatio ...
- 章节十六、5-TestNG高级功能--Part2
一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...
- 章节十六、7-DataProviders
一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...
- 章节十六、9-Listeners监听器
一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...
- 章节十六、1-TestNG简介
一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...
- 章节十六、6-xml参数化and并行case
一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 package testclasses; import org.testng.annotations.Test; impo ...
- 章节十六、8-ITestResult接口
一.ITestResult:该接口就像一个监听器,能够监听每个方法执行后的状态(是否成功)并将结果返回给我们. package testclasses1; import org.testng.anno ...
- 章节十六、10-TestNG报告和日志
一.在进行自动化的过程中,日志一般采用log4j 2进行日志记录,但TestNG自己本身也带有日志记录功能(reporter),它的好处在于日志中记录的内容都是testng自动生成的. package ...
随机推荐
- 【题解】【合并序列(水题)P1628】
原题链接 这道题目如果连字符串的基本操作都没学建议不要做. 学了的很简单就可以切,所以感觉没什么难度- 主要讲一下在AC基础上的优化(可能算不上剪枝) 很明显,这道题我们要找的是前缀,那么在字符串数组 ...
- Hive的基本操作和数据类型
Hive的基本操作 1.启动Hive bin/hive 2.查看数据库 hive>show databases; 3. 打开默认数据库 hive>use default; 4.显示defa ...
- c语言的strcpy函数
strcpy是用于复制字符串的函数 上面这个程序输出的结果为 为什么输出字符串%s时s是abABC,而输出字符%c时s是abABCg呢 因为strcpy函数本身的性质:复制字符串直到’\0’结束符为止 ...
- “朕赐给你,才是你的;朕不给,你不能抢”--custome role在Azure权限管理中的简单实践
在开始详细讨论技术问题之前,有一些个人观点想发表一下: ---作为一个甲方云平台的掌控着,如果任何事情你都是让partner全部帮你搞定,自己既不审核也不研究,那无论是对于公司还是个人发展来说都是没任 ...
- Visual Studio 调试(系列文章)
调试是软件开发过程中非常重要的一个部分,它具挑战性,但是也有一定的方法和技巧. Visual Studio 调试程序有助于你观察程序的运行时行为并发现问题. 该调试器可用于所有 Visual Stud ...
- 【杂谈】如何对Redis进行原子操作
什么时候需要进行需要原子操作? 很常见的例子,就是利用Redis实现分布式锁. 实现锁需要哪些条件? 我们知道要实现锁,就需要一个改变锁状态的方法.这个方法能原子地对锁的状态进行检查并修改.如果修改成 ...
- Python装饰器实现类Java注解功能
最近想用Python写一个简单生成器,类似指定类型和范围,返回指定列表: 比如想要 0 ~ 3 的整数,则 我只需要指定: 最小:0, 最大:3, 步长:1 则返回一个 [0,1,2,3] 的列表 ...
- Python实现性能自动化测试竟然如此简单
一.思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力 超负荷运行下的稳定性 系统瓶颈 自动化测试 使用程序代替手工 提升测试效率 性能自动化 使用代码模拟大批量用户 让用户并发请求 多页面多用 ...
- Jboss反序列化漏洞复现(CVE-2017-12149)
Jboss反序列化漏洞复现(CVE-2017-12149) 一.漏洞描述 该漏洞为Java反序列化错误类型,存在于jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤 ...
- 网站性能优化的方法--Yahoo
如何能让用户更快的打开我们的网页? 1.尽可能减少HTTP请求数 2.使用CDN(内容分发网络) 3.添加Expire/Cache-Control头 4.启用Gzip压缩 5.将CSS放在页面最上面 ...