一、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基础开始。
欢迎关注,转载请注明来源。