• 章节十六、5-TestNG高级功能--Part2


    一、测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"})

    1、在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间存在一定依赖关系。

    2、案例演示场景:

    testMethod1需要依赖testMethod2执行后才能顺利执行,而testMethod2需要依赖testMethod3执行完成后才能继续执行;
    testMethod4是独立的testcase。

     1 package testclasses;
     2 
     3 import org.testng.annotations.AfterClass;
     4 import org.testng.annotations.BeforeClass;
     5 import org.testng.annotations.Test;
     6 
     7 public class TestNG_DependentTests {
     8     
     9     /*
    10      * 场景:testMethod1需要依赖testMethod2执行后才能顺利执行,而testMethod2需要依赖testMethod3执行完成后才能继续执行;
    11      * testMethod4是独立的testcase。
    12      */
    13         
    14         @Test(dependsOnMethods = {"testMethod2"})
    15         public void testMethod1() {
    16             System.out.println("testMethod1");
    17         }
    18 
    19         @Test
    20         public void testMethod2() {
    21             System.out.println("testMethod2");
    22         }
    23 
    24         @Test(dependsOnMethods = {"testMethod1"})
    25         public void testMethod3() {
    26             System.out.println("testMethod3");
    27         }
    28 
    29         @Test
    30         public void testMethod4() {
    31             System.out.println("testMethod4");
    32         }
    33 
    34         @BeforeClass
    35         public void beforeClass() {
    36             System.out.println("BeforeClass");
    37         }
    38 
    39         @AfterClass
    40         public void afterClass() {
    41             System.out.println("AfterClass");
    42         }
    43 }

    运行结果:

    从运行结果可以看出testMethod1需要依赖testMethod2,所以在testMethod1执行前,testMethod2就先执行了,但testMethod1执行完成后,testMethod3才开始执行。而testMethod4因为是独立的,不需要依赖任何的testMethod,所以在testMethod2执行完成后就立即执行了。

     3、如果在运行代码的过程中,被依赖的方法出现了错误,那么其它需要依赖该方法的方法就会t跳过不执行,如果需要被执行就在注解后面加上alwaysRun=true。

    二、禁用测试方法

    1、如果需要禁止某个test执行,在注解后面加上(enabled=false)即可。

     1 package testclasses;
     2 
     3 import org.testng.annotations.AfterClass;
     4 import org.testng.annotations.BeforeClass;
     5 import org.testng.annotations.Test;
     6 
     7 public class TestNG_EnableTimeout {
     8     
     9 //    Enable=false:带有次属性的方法不会执行
    10     @Test(enabled=false)
    11     public void testMethod1() {
    12         System.out.println("testMethod3");
    13     }
    14 
    15     @Test
    16     public void testMethod2() {
    17         System.out.println("testMethod4");
    18     }
    19 
    20     @BeforeClass
    21     public void beforeClass() {
    22         System.out.println("Before   Class");
    23     }
    24 
    25     @AfterClass
    26     public void afterClass() {
    27         System.out.println("After   Class");
    28     }
    29 }

    运行结果:从运行结果可知testMethod1因为加上了(enabled=false),因为未执行,所以在结果中没有显示。

    四、让测试方法超时

    1、如果我们对test运行时间有要求,那么可以通过在注解后面加上(timeOut=100)进行设置,如果被设置的test在timeOut设置的时间内未运行完成就会立即失败并停止运行。

    timeOut=100表示对test设置的限制时间为100毫秒,超过则失败。

     1 package testclasses;
     2 
     3 import org.testng.annotations.AfterClass;
     4 import org.testng.annotations.BeforeClass;
     5 import org.testng.annotations.Test;
     6 
     7 public class TestNG_EnableTimeout {
     8     
     9 //    Enable=false:带有此属性的方法不会执行
    10 //    Enable=true:带有此属性的方法会执行
    11     @Test(enabled=true)
    12     public void testMethod1() {
    13         System.out.println("testMethod3");
    14     }
    15 
    16     @Test(timeOut=10)
    17     public void testMethod2() throws InterruptedException {
    18         System.out.println("testMethod4");
    19         Thread.sleep(20);
    20     }
    21 
    22     @BeforeClass
    23     public void beforeClass() {
    24         System.out.println("Before   Class");
    25     }
    26 
    27     @AfterClass
    28     public void afterClass() {
    29         System.out.println("After   Class");
    30     }
    31 }

    运行结果:testMethod2设置了强制等待20毫秒,而注解中设置的超时时间为10秒,因此testMethod2执行失败。

    五、维持测试用例的执行顺序

    1、案例场景:我们有2个测试类都需要执行,分别取名为TestNG_Preserve1和TestNG_Preserve2,但是TestNG_Preserve2要在TestNG_Preserve1执行前先执行。

    2、TestNG_Preserve1的代码为:

     1 package testclasses;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 public class TestNG_Preserve1 {
     6   
     7     @Test
     8     public void testMethod1() {
     9         System.out.println("TestNG_Preserve1----->testMethod1");
    10     }
    11 
    12     @Test
    13     public void testMethod2() throws InterruptedException {
    14         System.out.println("TestNG_Preserve1----->testMethod2");
    15     }
    16 }

    3、TestNG_Preserve2的代码为:

     1 package testclasses;
     2 
     3 import org.testng.annotations.Test;
     4 
     5 public class TestNG_Preserve2 {
     6  
     7     @Test
     8     public void testMethod1() {
     9         System.out.println("TestNG_Preserve2----->testMethod1");
    10     }
    11 
    12     @Test
    13     public void testMethod2() throws InterruptedException {
    14         System.out.println("TestNG_Preserve2----->testMethod2");
    15     }
    16 }

    4、控制test类的执行顺序我们需要用到XML文件,配置如下:

     1 <!-- 没有此行配置运行时会报错 -->
     2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
     3 <suite name="Preserve Enable TestSuite">
     4     <!-- preserve-order用于设置test中的class是否按照顺序执行,如果为false测按照类名字母的原有顺序执行,为true就按照书写的顺序执行 -->
     5     <test
     6         name="Test 1"
     7         preserve-order="true">
     8         <classes>
     9             <class name="testclasses.TestNG_Preserve2"></class>
    10             <class name="testclasses.TestNG_Preserve1"></class>
    11         </classes>
    12     </test>
    13     <!-- enabled用于控制该test是否执行,默认为true执行,为false不执行 -->
    14     <test
    15         name="Test 2"
    16         enabled="false">
    17         <classes>
    18             <class name="testclasses.TestNG_Preserve2"></class>
    19             <class name="testclasses.TestNG_Preserve1"></class>
    20         </classes>
    21     </test>
    22 </suite>
    23 <!-- 预期执行结果:Test1中TestNG_Preserve2先执行,然后执行TestNG_Preserve2,Test2中的代码因为被设置为enable为false,因此不会执行 -->

    执行结果:预期结果和实际结果一致

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

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

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

  • 相关阅读:
    云路五年 未来正来
    免费公测:RDS只读实例
    【Open Search产品评测】-- 淘点点:基于OpenSearch,轻松实现一整套O2O类搜索解决方案
    阿里云启动“云合计划” 培育中国“微软”级企业
    【Open Search产品评测】- 来往,7天轻松定制属于自己的搜索引擎
    水塘抽样算法
    如何调度考生的座位
    如何去除有序数组的重复元素
    二分查找高效判定子序列
    如何k个一组反转链表
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/11419710.html
Copyright © 2020-2023  润新知