章節十六、3-TestNG方法和類註解
一、Test Suite(測試套件)
我們通常認為一個testcase就是一個測試方法,但是會有很多的testcase,所以我們不可能把所有的testcase放到同一個測試類中,假如需要測試的頁面有10個,我們需要建立不同的類來測試這10個頁面的具體功能,測試具體功能的測試用例會放到具體的測試類中,把這些所有的測試類組合起來就成了Test Suite。可以根據我們的測試目的,選擇一些類來組成Test Suite。可以選擇一些基本功能的測試類,組成冒煙測試的測試類,冒煙測試可以快速的檢驗軟體的基本功能,也可以選擇一些測試類組成迴歸測試的test suite。
二、Test Suite案例演示----》如何一次執行多個測試類
1、首先新建兩個testcase
1 package testclasses; 2 3 import org.testng.annotations.Test; 4 import org.testng.annotations.BeforeMethod; 5 import org.testng.annotations.AfterClass; 6 import org.testng.annotations.AfterMethod; 7 import org.testng.annotations.BeforeClass; 8 9 public class TestNG_TestClass1 { 10 11 @BeforeClass 12 public void beforeClass() { 13 System.out.println("\nClass1-->beforeMethod在類裡所有的方法執行前跑"); 14 } 15 16 @AfterClass 17 public void afterClass() { 18 System.out.println("\nClass1-->afterClass在類裡所有的方法執行後跑\n"); 19 } 20 21 @BeforeMethod 22 public void beforeMethod() { 23 System.out.println("\nClass1-->BeforeMethod每個測試方法執行前跑"); 24 } 25 26 @AfterMethod 27 public void afterMethod() { 28 System.out.println("\nClass1-->afterMethod每個測試方法執行後跑"); 29 } 30 31 @Test 32 public void test1() { 33 System.out.println("\nClass1-->test1測試方法"); 34 } 35 36 @Test 37 public void test2() { 38 System.out.println("\nClass1-->test2測試方法"); 39 } 40 }
1 package testclasses; 2 3 import org.testng.annotations.Test; 4 import org.testng.annotations.BeforeMethod; 5 import org.testng.annotations.AfterMethod; 6 import org.testng.annotations.BeforeClass; 7 import org.testng.annotations.AfterClass; 8 9 public class TestNG_TestClass2 { 10 11 @BeforeClass 12 public void beforeClass() { 13 System.out.println("\nClass2-->beforeMethod在類裡所有的方法執行前跑"); 14 } 15 16 @AfterClass 17 public void afterClass() { 18 System.out.println("\nClass2-->afterClass在類裡所有的方法執行後跑\n"); 19 } 20 21 @BeforeMethod 22 public void beforeMethod() { 23 System.out.println("\nClass2-->BeforeMethod每個測試方法執行前跑"); 24 } 25 26 @AfterMethod 27 public void afterMethod() { 28 System.out.println("\nClass2-->afterMethod每個測試方法執行後跑"); 29 } 30 31 @Test 32 public void test1() { 33 System.out.println("\nClass2-->test1測試方法"); 34 } 35 36 @Test 37 public void test2() { 38 System.out.println("\nClass2-->test2測試方法"); 39 } 40 }
2、新建一個xml檔案
xml是標記型語言,是一種簡單的資料儲存語言,用一系列簡單的標記來描述資料,把資料放在標籤中。
<!-- 沒有此行配置執行時會報錯 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!-- name中的值表示命名,可隨意命名 -->
<suite name="Regression TestSuite">
<!-- name中的值表示命名,可隨意命名 -->
<test name="Application Test">
<!-- name中的值為需要測試的具體類名,格式:包名.類名 -->
<classes>
<class name="testclasses.TestNG_TestClass1"></class>
<class name="testclasses.TestNG_TestClass2"></class>
</classes>
</test>
</suite>
3、執行結果成功:
從執行結果中可以看出,當我們在配置完xml檔案後,直接執行xml檔案,2個testcase就能夠一起執行成功了
三、@BeforeSuite和@AfterSuite
@BeforeSuite:表示在test suite中的所有測試類在執行前就先執行帶有該註解方法中的程式碼。
@AfterSuite:表示在test suite中的所有測試類執行完成後再執行帶有該註解方法中的程式碼。
1、新建一個帶有@BeforeSuite和@AfterSuite註解的類
1 package base; 2 3 import org.testng.annotations.AfterClass; 4 import org.testng.annotations.AfterSuite; 5 import org.testng.annotations.BeforeClass; 6 import org.testng.annotations.BeforeSuite; 7 8 public class BaseTestSuite { 9 10 @BeforeClass 11 public void beforeClasss() { 12 System.out.println("\nBaseTestSuite-->beforeClass在每個測試類執行前跑"); 13 } 14 15 @AfterClass 16 public void afterClasss() { 17 System.out.println("\nAfterClass-->afterClass在每個測試類執行完成後跑\n"); 18 } 19 20 @BeforeSuite 21 public void beforeSuite() { 22 System.out.println("\nBeforeSuite-->beforeSuite在每個test suite執行前跑"); 23 } 24 25 @AfterSuite 26 public void afterSuite() { 27 System.out.println("\nBeforeSuite-->beforeSuite在每個test suite執行完成後跑\n"); 28 } 29 }
2、讓test suite中的TestNG_TestClass1類和TestNG_TestClass2類繼承新建的類BaseTestSuite 。
3、執行xml配置檔案
<!-- 沒有此行配置執行時會報錯 --> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <!-- name中的值表示命名,可隨意命名 --> <suite name="Regression TestSuite"> <!-- name中的值表示命名,可隨意命名 --> <test name="Application Test"> <!-- name中的值為需要測試的具體類名,格式:包名.類名 --> <classes> <class name="regressionsuite.TestNG_TestClass1"></class> <class name="regressionsuite.TestNG_TestClass2"></class> </classes> </test> </suite>
4、執行結果
從執行結果中我們可以看出,@BeforeSuite和@AfterSuite分別只在所有的test suite執行前和介紹後執行一次
四、@BeforeTest和@AfterTest註解
@BeforeTest:使用這個註解的方法會在xml檔案中的test標籤中的每個test方法執行之前執行。
@AfterTest:使用這個註解的方法會在xml檔案中的test標籤中的每個test方法執行之後執行。
1 <!-- 沒有此行配置執行時會報錯 --> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 3 <!-- name中的值表示命名,可隨意命名 --> 4 <suite name="Regression TestSuite"> 5 <!-- name中的值表示命名,可隨意命名 --> 6 <test name="Application Test"> 7 <!-- name中的值為需要測試的具體類名,格式:包名.類名 --> 8 <classes> 9 <class name="regressionsuite.TestNG_TestClass1"></class> 10 <class name="regressionsuite.TestNG_TestClass2"></class> 11 </classes> 12 </test> 13 14 <test name="Application Test"> 15 <!-- name中的值為需要測試的具體類名,格式:包名.類名 --> 16 <classes> 17 <class name="regressionsuite.TestNG_TestClass1"></class> 18 <class name="regressionsuite.TestNG_TestClass2"></class> 19 </classes> 20 </test> 21 </suite>
五、@BeforeClass和@AfterClass註解
@BeforeClass:使用這個註解的方法會在當前這個類的第一個test方法執行之前執行。
@AfterClass:使用這個註解的方法會在當前這個類的最後一個test方法執行之後執行。
六、@BeforeMethod和@AfterMethod註解
@BeforeMethod:使用這個註解的方法會在每個test方法執行之前執行。
@AfterMethod:使用這個註解的方法會在每個test方法執行之後執行。
注:帶@BeforeTest和@AfterTest、@BeforeSuite和@AfterSuite註解的方法不能在類中直接執行(直接執行會報如下圖所示的錯誤資訊),必須在xml中才能執行。
如果有不明白的小夥伴可以加群“555191854”問我,群裡都是軟體行業的小夥伴相互一起學習。
內容具有連慣性,未標註的地方可以看前面的部落格,這是一整套關於ava+selenium自動化的內容,從java基礎開始。
歡迎關注,轉載請註明來