一、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. Java编程思想:内部类基础部分

    public class Test { public static void main(String[] args) { // Parcel1.test(); // Parcel2.test(); / ...

  2. spring mvc 拦截器的使用

    Spring MVC 拦截器的使用 拦截器简介 Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter).用于对处理器进行预处理和后处理.常用于日志 ...

  3. python函数知识四 迭代器、生成器

    15.迭代器:工具 1.可迭代对象: ​ 官方声明,只要具有__iter__方法的就是可迭代对象 list,dict,str,set,tuple -- 可迭代对象,使用灵活 #方法一: list.__ ...

  4. delegate委托的例子,实现对Form中控件的更新

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. c语言进阶4-有返回值函数

    一.         从函数返回 从函数返回就是返回语句的第一个主要用途.在程序中,有两种方法可以终止函数的执行,并返回到调用函数的位置.第一种方法是在函数体中,从第一句一直执行到最后一句,当所有语句 ...

  6. DAX 第六篇:统计函数

    统计函数用于创建聚合,对数据进行统计分析.在使用统计函数时,必须考虑到数据模型,表之间关系,数据重复等因素,一般都会搭配过滤函数实现数据的提取和分析. 统计量一般是:均值.求和.计数.最大值.最小值. ...

  7. python面向对象的继承-组合-02

    *面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...

  8. Spring:IOC本质分析探究

    IOC本质分析 分析实现 我们先用我们原来的方式写一段代码 . 先写一个UserDao接口 public interface UserDao { public void getUser(); } 再去 ...

  9. zstack源码编译安装(1.7.x版本)

    图片没粘贴过来,请看本人gitbook吧https://www.gitbook.com/book/jingtyu/how-to-learn-zstack-code 运行环境 zstack的安装方式有很 ...

  10. 完美解决eclipse编辑器中文字符过小问题

    window – preferences – general – appearance – colors and fonts – basic – text font – edit 把弹出页面中“西欧语 ...