章節十六、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基礎開始。
歡迎關注,轉載請註明來