一、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注解和断言的更多相关文章

  1. 章节十六、3-TestNG方法和类注解

    一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有1 ...

  2. 章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行

    一. 把测试方法分优先级执行----->(priority=索引) 1.新建一个testng方法 package testclasses; import org.testng.annotatio ...

  3. 章节十六、5-TestNG高级功能--Part2

    一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...

  4. 章节十六、7-DataProviders

    一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...

  5. 章节十六、9-Listeners监听器

    一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...

  6. 章节十六、1-TestNG简介

    一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...

  7. 章节十六、6-xml参数化and并行case

    一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 package testclasses; import org.testng.annotations.Test; impo ...

  8. 章节十六、8-ITestResult接口

    一.ITestResult:该接口就像一个监听器,能够监听每个方法执行后的状态(是否成功)并将结果返回给我们. package testclasses1; import org.testng.anno ...

  9. 章节十六、10-TestNG报告和日志

    一.在进行自动化的过程中,日志一般采用log4j 2进行日志记录,但TestNG自己本身也带有日志记录功能(reporter),它的好处在于日志中记录的内容都是testng自动生成的. package ...

随机推荐

  1. Leetcode多线程题库练习(新功能尝鲜)& 个人感悟

    大家好, 我是方子龙.很久没有自己写文章了. 一面是因为工作上的需求开发任务比较重,下班回家基本上就躺床玩几把王者,度过闲暇时光. 二面是一有点时间就自己主动地去看书和学习,知道自己还缺少很多知识,由 ...

  2. c++中利用宏定义简化for循环使用

    话不多说,上方法 #define _for(i,a,b) for( int i=(a); i<(b); ++i) #define _rep(i,a,b) for( int i=(a); i< ...

  3. JAVA 使用 POI进行读取Excel表格示例

    导包 编码 public class PoiTest { /** * 最终效果 * 表头一内容0 表头二内容1 表头三内容2 表头一内容1 表头二内容2 表头三内容3 表头一内容2 表头二内容3 表头 ...

  4. Spring 自动生成getter和setter方法 tostring方法

    添加maven依赖 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency& ...

  5. [leetcode] 147. Insertion Sort List (Medium)

    原题 别人的思路 非常简洁 function ListNode(val) { this.val = val; this.next = null; } /** * @param {ListNode} h ...

  6. .Net微信网页开发之使用微信JS-SDK自定义微信分享内容

    第一步.微信JS-SDK的使用步骤,配置信息的生成获取讲解: 关于JS-SDK的使用步骤和timestamp(时间戳),nonceStr(随机串),signature(签名),access_token ...

  7. thinkphp项目阿里云ECS服务器部署

    [日记]thinkphp项目阿里云ECS服务器部署   项目本地开发告一段落.准备上传到服务器上测试 技术组成 thinkphp+mysql+阿里ECS  代码管理方式git 一.阿里ECS服务器配置 ...

  8. C语言编程入门之--第二章编译环境搭建

    第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...

  9. 爬虫之解析库pyquery

    初始化 安装: pip install pyquery 字符串的形式初始化 html = """ <html lang="en"> < ...

  10. 一文带你了解Java反射机制

    想要获取更多文章可以访问我的博客 - 代码无止境. 上周上班的时候解决一个需求,需要将一批数据导出到Excel.本来公司的中间件组已经封装好了使用POI生成Excel的工具方法,但是无奈产品的需求里面 ...