zoukankan      html  css  js  c++  java
  • 章节十六、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("
    测试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("
    测试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("
    测试ClassToBeTested类中getArry方法返回的数组正确与否
    ");
    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("
    测试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("
    测试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("
    测试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基础开始。

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

  • 相关阅读:
    JobRunShell.cs not FOUND
    Manjaro Linux 更新后无法启动问题
    VMware Workstation 16 启动虚拟机失败(vmmon 版本问题)
    sql生成表模型字段
    【短道速滑六】古老的视频去噪算法(FLT_GradualNoise)解析并优化,可实现1920*1080 YUV数据400fps的处理能力。
    Mvc Redis 相关资料
    Android Handler内存泄露
    ANDROID中HANDLER使用浅析
    Android并发编程之白话文详解Future,FutureTask和Callable
    企业微信考勤接口返回的秒数与统计天数关系
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/11378727.html
Copyright © 2011-2022 走看看