章节十六、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、新建一个类

 1 package applicationcode;
 2
 3 public class ClassToBeTested {
 4
 5 //    相加后返回一个int型结果
 6     public int addNum(int a,int b) {
 7         return a+b;
 8     }
 9
10 //    返回一个连接的字符串
11     public String addStrings(String a,String b) {
12         return a+" "+b;
13     }
14
15 //    返回一个int型的数组
16     public int[] getArry() {
17         int[] arrayExample = {1,2,3};
18         return arrayExample;
19 }
20 }

2、建一个testNG类,用来对ClassToBeTested 类进行断言

 1 package testclasses;
 2
 3 import org.testng.Assert;
 4 import org.testng.annotations.DataProvider;
 5 import org.testng.annotations.Test;
 6
 7 import applicationcode.ClassToBeTested;
 8
 9 public class TestNG_Asserts {
10
11   @Test
12   public void testAddNum() {
13       System.out.println("\n测试ClassToBeTested类中addNum方法两个数相加结果正确与否");
14 //      测试来中需要实例化被测试类的对象
15       ClassToBeTested obj = new ClassToBeTested();
16       int result = obj.addNum(1, 2);
17 //      断言实际结果与期望结果是否相等
18       Assert.assertEquals(result, 3);
19   }
20
21   @Test
22   public void testAddStrings() {
23       System.out.println("\n测试ClassToBeTested类中addStrings方法连接后的字符串结果正确与否");
24 //      定义一个字符串变量作为期望结果用
25       String expectedString = "Hello Word";
26 //      测试来中需要实例化被测试类的对象
27       ClassToBeTested obj = new ClassToBeTested();
28       String result = obj.addStrings("Hello", "Word");
29 //      断言实际结果与期望结果是否相等
30       Assert.assertEquals(result, expectedString);
31   }
32
33   @Test
34   public void testGetArry() {
35       System.out.println("\n测试ClassToBeTested类中getArry方法返回的数组正确与否\n");
36 //      定义一个int型数组作为期望结果用
37       int[] expectedArray = {1,2,3};
38 //      测试来中需要实例化被测试类的对象
39       ClassToBeTested obj = new ClassToBeTested();
40       int[] result = obj.getArry();
41 //      断言实际结果与期望结果是否相等
42       Assert.assertEquals(result, expectedArray);
43   }
44 }

断言成功运行结果:

断言失败运行结果:

注:

如果断言失败,那么该测试方法断言语句后的代码会立即停止运行,其它测试方法的运行不受影响。

四、软断言

1、当我们在使用Arrert方法进行断言时,假设第一个Arrert方法的断言失败,那么后面如果还有其它的断言将不会再被执行,如果需要继续执行就需要用到软断言。

 1 package testclasses;
 2
 3 import org.testng.Assert;
 4 import org.testng.annotations.Test;
 5 import org.testng.asserts.SoftAssert;
 6
 7 import applicationcode.ClassToBeTested;
 8
 9
10 public class TestNG_SoftAsserts {
11   @Test
12   public void testAddNum() {
13       System.out.println("\n测试ClassToBeTested类中addNum方法--->两个数相加结果正确与否");
14 //      测试来中需要实例化被测试类的对象
15       ClassToBeTested obj = new ClassToBeTested();
16       int result = obj.addNum(1, 2);
17 //      断言实际结果与期望结果是否相等
18       Assert.assertEquals(result, 2);
19       System.out.println("断言1");
20       Assert.assertEquals(result, 3);
21       System.out.println("断言2");
22   }
23 }

运行结果:

2、从下面的代码中我们可以看出,标红的软断言实际结果与预期结果是不一致的,而Assert方法的断言中两者是一致的,但在下面的运行结果中我们可以看到test运行成功了,且没有报错。

 1 package testclasses;
 2
 3 import org.testng.Assert;
 4 import org.testng.annotations.Test;
 5 import org.testng.asserts.SoftAssert;
 6
 7 import applicationcode.ClassToBeTested;
 8
 9
10 public class TestNG_SoftAsserts {
11   @Test
12   public void testAddNum() {
13 //      软断言
14       SoftAssert sa = new SoftAssert();
15       System.out.println("\n测试ClassToBeTested类中addNum方法--->两个数相加结果正确与否");
16 //      测试来中需要实例化被测试类的对象
17       ClassToBeTested obj = new ClassToBeTested();
18       int result = obj.addNum(1, 2);
19 //      断言实际结果与期望结果是否相等
20       sa.assertEquals(result, 2);
21       Assert.assertEquals(result, 3);
22   }
23 }

运行结果:

3、如何打印软断言报错信息?

通过以上两者案例可知,Assert断言只要遇到失败的就会立即终止执行后面的断言,且控制台会出现报错的具体信息。

软断言的断言方法即使遇到失败的断言,后面的断言依然会被执行,控制台不会打印出报错信息。

但如果在使软断言的情况下,想知道报错的软断言信息就需要使用到assertAll方法。

 1 package testclasses;
 2
 3 import org.testng.Assert;
 4 import org.testng.annotations.Test;
 5 import org.testng.asserts.SoftAssert;
 6
 7 import applicationcode.ClassToBeTested;
 8
 9
10 public class TestNG_SoftAsserts {
11   @Test
12   public void testAddNum() {
13 //      软断言
14       SoftAssert sa = new SoftAssert();
15       System.out.println("\n测试ClassToBeTested类中addNum方法--->两个数相加结果正确与否");
16 //      测试来中需要实例化被测试类的对象
17       ClassToBeTested obj = new ClassToBeTested();
18       int result = obj.addNum(1, 2);
19 //      断言实际结果与期望结果是否相等
20 //      sa.assertEquals(result, 2);
21       sa.assertEquals(result, 2);
22       System.out.println("断言1");
23       Assert.assertEquals(result, 3);
24       System.out.println("断言2");
25       sa.assertAll();
26   }
27 }

运行结果:

从下面的运行结果中我们可以看到,该测试方法中的断言没有因为软断言错误而停止运行,但在该方法通过sa.assertAll();在所有的代码运行完成后打印出了具体的断言错误信息。

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

原文地址:https://www.cnblogs.com/luohuasheng/p/11378727.html

时间: 2024-10-02 10:48:14

章节十六、2-TestNG注解和断言的相关文章

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

一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有10个,我们需要创建不同的类来测试这10个页面的具体功能,测试具体功能的测试用例会放到具体的测试类中,把这些所有的测试类组合起来就成了Test Suite.可以根据我们的测试目的,选择一些类来组成Test Suite.可以选择一些基本功能的测试类,组成冒烟测试的测试类,冒烟测试可以快速的检验软件的基本

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

一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 1 package testclasses; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeClass; 6 import org.testng.annotations.Parameters; 7 import org.testng.annotations.AfterClass; 8 9 public class

Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Do-While  while循环的另一个版本是do-while循环,它在判断条件之前,先执行一遍循环体,然后再次执行循环体,直到条件成为false. do-while循环的通过格式: do {   statements } while condition 我们再用蛇和梯子的例子,使用do-while循环代替while循环.其中 finalSquare, board, square, 和 diceRoll 的初始化与while循环是一样的: let finalSquare = 25 var bo

ActionScript3游戏中的图像编程(连载四十六)

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477 3.1.2 以小见大--从细节损失洞悉滤镜本质 把它再改回内斜角,边缘似乎光滑了些,但这种错觉仅仅是由于阴影与蓝色的对比度不够强烈,才会让边缘的粗糙不够显眼.把文字颜色调成浅紫以后,转角处的锯齿依旧一览无余.(图 3.6),而Photoshop应用同样的设置则不会出现同样的问题(图 3.7). 图 3.6 模糊值为3的内侧斜角滤镜 图 3.7 大小等于3的斜面样式 如果认为

Gradle 1.12 翻译——第十六章. 使用文件

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41113353 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

[原创]ActionScript3游戏中的图像编程(连载三十六)

2.2.9 Photoshop品质初探——等高线 我们点击等高线图标右侧的箭头,将弹出一个曲线列表(图 2.30). 图 2.30 等高线下拉列表 点击第二行第4个图标看看(图 2.31).哇塞,一个逆天的浮雕式投影效果. 图 2.31 给投影样式设置等高线 下面我们不妨开一下小差,做点好玩的东东,比如给投影拉出一点杂色,再将文字调成灰色(#CCCCCC),填充不透明度80%,同时把图层的混合模式改为“溶解”(混合模式将在后续章节给出详细的介绍),投影的挖空去掉,看起来就想雕刻在石碑上的文字.(

ActionScript3游戏中的图像编程(连载三十六)

2.2.9 Photoshop品质初探--等高线 我们点击等高线图标右侧的箭头,将弹出一个曲线列表(图 2.30). 图 2.30 等高线下拉列表 点击第二行第4个图标看看(图 2.31).哇塞,一个逆天的浮雕式投影效果. 图 2.31 给投影样式设置等高线 下面我们不妨开一下小差,做点好玩的东东,比如给投影拉出一点杂色,再将文字调成灰色(#CCCCCC),填充不透明度80%,同时把图层的混合模式改为"溶解"(混合模式将在后续章节给出详细的介绍),投影的挖空去掉,看起来就想雕刻在石碑上

OpenGL教程翻译 第十六课 基本的纹理贴图

OpenGL教程翻译 第十六课 基本的纹理贴图 原文地址:http://ogldev.atspace.co.uk/(源码请从原文主页下载) Background 纹理贴图就是将任意一种类型的图片应用到3D模型的一个或多个面.图片(也可以称之为纹理)内容可以是任何东西,但是他们一般都是一些比如砖,叶子,地面等的图案,纹理贴图增加了场景的真实性.例如,对比下面的两幅图片. 为了进行纹理贴图,你需要进行三个步骤:将图片加载到OpenGl中,定义模型顶点的纹理坐标(以对其进行贴图),用纹理坐标对图片进行