1. 程式人生 > >章節十六、5-TestNG高階功能--Part2

章節十六、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基礎開始。

歡迎關注,轉載請註明來