章节十六、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 ...
随机推荐
- VS2012 BIDS之Reporting Service/SSRS 项目
最近资讯部门需要:网页/sharepoint提供事实表RawData下载功能,以下是项目大概: 工具:VS(BIDS)Report Designer+Reporting Service配置管理器
- ASP.NET Core MVC 之模型(Model)
1.模型绑定 ASP.NET Core MVC 中的模型绑定将数据从HTTP请求映射到操作方法参数.参数既可以是简单类型,也可以是复杂类型.MVC 通过抽象绑定解决了这个问题. 2.使用模型绑定 当 ...
- 比赛:小奔的方案 solution
题目 题目背景 有一个著名的题目: 五个海盗抢到了100个金币,每一颗都一样的大小和价值连城. 他们决定这么分: 1.抽签决定自己的号码 ------ [1.2.3.4.5] 2.首先,由1号提出分配 ...
- Android studio 混淆打包安装后报错NullPointerException int java.util.List.size()
菜鸟的我,尝试混淆打包app...打包之前没有什么问题,混淆打包之后遇到各种问题.首先,感谢原博主的分享.解决了我的问题.谢谢. 原文地址:http://blog.csdn.net/tou_star/ ...
- python注释-输入输出-基本数据类型-运算符
python注释 用处:注释用来书写一些解释性信息,对代码的逻辑作用等作出描述 单行注释.多行注释 # 这是行注释,注释内容与# 之间要空一格 print("hello world!&quo ...
- spring applicationContext.xml文件移到resources目录下
SpringMVC的框架默认目录结构 修改后的目录结构及web.xml 同时在pom里的配置:将resources目录打包到web-inf/classes目录下<resources> ...
- VMWare虚拟机:三台虚拟机互通且连网
虚拟机:三台虚拟机互通且连网 目录 一.虚拟机 相关软件 虚拟机安装 Linux系统安装 1) 使用三个Linux虚拟机 多台虚拟机互通且上网 1) 多台配置注意事项 2) 虚拟机软件的配置 3) W ...
- thinkphp 多对多表查询
1.表 班级表classes 学生表student 中间表classes_students 2.使用模型关联查询 新建模型 Classes在里面添加代码 ClassesStudent中间表模型,可以不 ...
- 19个心得,明明白白说Linux下的负载均衡
一.目前网站架构一般分成负载均衡层.web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为现在随着网站的PV越来越多,文件服务器的压力也越来越大;不过随着moosefs.DRDB+Heart ...
- 前端js性能优化的要点
1 尽量少使用全局查找,比如全局变量,如果要多次使用,可以将全局变量存为局部变量再使用 eg:function(){ var body=document.body; alert(body): body ...