一、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();在所有的代码运行完成后打印出了具体的断言错误信息。

 

 

 

如果有不明白的小伙伴可以私信问我,目前也建了qq、微信群,都是软件行业的小伙伴相互一起学习。

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

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

posted on 2019-08-19 18:10  时光以北暮南城  阅读(593)  评论(1编辑  收藏  举报