章节十六、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 ...
随机推荐
- Thread-Per-Message设计模式
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; public class Te ...
- MyBatis简单使用方式总结
MyBatis简单使用方式总结 三个部分来理解: 1.对MyBatis的配置部分 2.实体类与映射文件部分 3.使用部分 对MyBatis的配置部分: 1.配置用log4J显式日志 2.导入包的别名 ...
- .net持续集成cake篇之cake任务依赖、自定义配置荐及环境变量读取
系列目录 新建一个构建任务及任务依赖关系设置 上节我们通过新建一个HelloWorld示例讲解了如何编写build.cake以及如何下载build.ps1启动文件以及如何运行.实际项目中,我们使用最多 ...
- 数据库触发器_trigger
部门表_删除: USE [test] GO /****** Object: Trigger [dbo].[部门_Delete] Script Date: 2015/8/31 16:41:46 **** ...
- windows RDP远程代码执行_CVE-2019-0708漏洞复现
windows RDP远程代码执行_CVE-2019-0708漏洞复现 一.漏洞概述 2019年5月14日微软官方发布安全补丁,修复了windows远程桌面服务的远程代码执行漏洞,该漏洞影响了某些旧版 ...
- delegate委托的例子,实现对Form中控件的更新
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 模拟用户登录,内含验证码验证和request等操作
模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...
- MYSQL数据库数据类型
07.14自我总结 MYSQL数据库数据类型 一.整数类型和浮点数典型 1.有符号/没符号 对于整数和负整数来说,默认情况下是有符号范围的 默认是有符号 有符号和没符号其实就是有没有包括负数,有符号是 ...
- 使用 Spring Framework 时常犯的十大错误
Spring 可以说是最流行的 Java 框架之一,也是一只需要驯服的强大野兽.虽然它的基本概念相当容易掌握,但成为一名强大的 Spring 开发者仍需要很多时间和努力. 在本文中,我们将介绍 Spr ...
- 前端响应式のmedia文件分离
响应式cssのmedia文件分离 media简介 1.媒体查询,添加自CSS3 2.一个媒体查询由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式表范围的表达式组成,允许内容的呈现针对一个特定范 ...