- 全棧自動化測試實戰:基于TestNG、HttpClient、Selenium和Appium
- 盧家濤
- 1576字
- 2020-06-08 17:55:45
2.3 TestNG注解
TestNG和其他很多Java框架(比如JUnit、Spring等)一樣,使用了大量的注解。被不同注解修飾的類、方法具有不同的含義,本節對TestNG注解進行詳細介紹,并按照使用場景把注解分成4類。
(1)前置條件和后置條件
把注解作為前置條件(或初始化操作)和后置條件(或清理操作)使用。
(2)數據驅動
TestNG的特點之一是數據驅動,即測試用例和測試數據分離,以便維護和管理。
(3)測試用例
該分類只有一個@Test注解。@Test注解的作用是對測試用例進行控制,該注解中的方法有很多,后面會對常用方法進行介紹。
(4)監聽器
該分類只有一個@Listeners注解。監聽器的作用是監控測試過程,如果采用默認監聽器,則不需要任何配置;如果使用自定義監聽器,則需要使用@Listeners注解或testng.xml文件進行配置。由于篇幅所限,本章不對自定義監聽器進行介紹,有興趣的讀者可以自行查閱相關資料。
2.3.1 前置條件和后置條件
先來看看各注解的含義。
@BeforeSuite:在該Suite的所有Test都未運行之前運行。
@AfterSuite:在該Suite的所有Test都運行之后運行。
一個Suite對應一個頂級模塊,比如一個軟件項目分為4個模塊,那么每個模塊就是一個Suite。一般結合testng.xml文件中的<suite>或<suite-files>標簽進行使用。
@BeforeTest:在該Test的所有Class都未運行之前運行。
@AfterTest:在該Test的所有Class都運行之后運行。
一個Test對應一個子模塊,一般結合testng.xml文件中的<test>標簽進行使用。
@BeforeClass:在該Class的所有@Test方法都未運行之前運行。
@AfterClass:在該Class的所有@Test方法都運行之后運行。
一個Class對應一個Java類,在該Java類中,用@BeforeClass(或@AfterClass)修飾的方法會在該Class的所有@Test方法都運行之前(或之后)運行。
@BeforeMethod:在該Class的每個@Test方法運行之前運行。
@AfterMethod:在該Class的每個@Test方法運行之后運行。
一個Method對應一個Java方法,在Java類中用@BeforeMethod(或@AfterMethod)修飾的方法會在該Class的每個@Test方法運行之前(或之后)運行。
@BeforeGroups:在該Class第一個分組的@Test方法運行之前運行。
@AfterGroups:在該Class最后一個分組的@Test方法運行之后運行。
Group的控制粒度介于Class和Method之間,一個Class可以包含多個Group,一個Group可以包含多個Method。
只看文字是很生硬的,下面通過例子來說明以上注解。刪除FirstClassTest中的內容,輸入以下代碼:


保存代碼,在“FirstClassTest.java”上用鼠標右擊,從彈出的快捷菜單中選擇“Run As → TestNG Test”選項,此時Eclipse的控制臺輸出如下:

下面對運行結果進行說明。
①可以看出@BeforeSuite、@AfterSuite、@BeforeTest、@AfterTest、@BeforeClass和@AfterClass控制測試執行的粒度是不同的,即Suite>Test>Class。
②一個測試用例(@Test修飾的Java方法)可以屬于多個分組,比如上面示例的testCase4。當多個分組都設置了對應的@BeforeGroups和@AfterGroups注解時,執行順序是Before Group1→Before Group2→After Group2→After Group1。
③@BeforeMethod和@AfterMethod共執行了4次,因為有4個測試用例。
2.3.2 數據驅動
TestNG做數據驅動時使用了@DataProvider和@Parameters注解,后者需要和testng.xml文件配合。舉一個登錄的場景,每種不同的輸入都對應了不同的提示。
刪除FirstClassTest中的內容,輸入以下代碼:

保存代碼,在FirstClassTest.java上用鼠標右擊,從彈出的快捷菜單中選擇“Run As → TestNG Test”選項,此時Eclipse的控制臺輸出如下:

被@DataProvider修飾的Java方法稱為數據提供者,該方法返回一個對象二維數組。如果一個測試用例需要該數據,那么就通過@Test注解的dataProvider方法傳入數據提供者的名稱。
2.3.3 測試用例
@Test注解的方法很多,前面已經介紹過groups和dataProvider了,下面再介紹幾種常用的。
刪除FirstClassTest中的內容,輸入以下代碼:

保存代碼,在“FirstClassTest.java”上用鼠標右擊,從彈出的快捷菜單中選擇“Run As → TestNG Test”選項,此時Eclipse的控制臺輸出如下:


下面對運行結果進行說明。
①description代表測試用例描述,控制臺會打印輸出該描述。
②priority代表優先級,數字越小,優先級越高,默認值為0。testCase2的priority值為2,會最后一個執行;testCase3的priority值為1,會倒數第二個執行。如果級別一樣,則執行順序默認按方法名排序。
③enabled的默認值為true,代表不啟用。當enabled的值為false時,表示禁用,因此testCase6并未執行。
④testCase4和testCase5都拋出了運行時異常,因此執行失敗。
⑤dependsOnMethods代表依賴一個或多個方法,dependsOnGroups代表依賴一個或多個分組。一旦被依賴的測試用例執行失敗,則TestNG將跳過該測試用例。但沒有跳過testCase7,原因是testCase7加了alwaysRun方法,并將值設為true,代表始終執行,在默認情況下,該值為false。建議盡量不要使用dependsOnMethods和dependsOnGroups,因為違背了測試用例需要解耦的原則。
- DB2 V9權威指南
- Hyper-V 2016 Best Practices
- MySQL 8從入門到精通(視頻教學版)
- 控糖控脂健康餐
- Java應用開發技術實例教程
- ASP.NET程序設計教程
- Learning OpenStack Networking(Neutron)(Second Edition)
- 從零開始學C#
- ASP.NET程序開發范例寶典
- Emgu CV Essentials
- JSP程序設計實例教程(第2版)
- Java Web應用開發項目教程
- IoT Projects with Bluetooth Low Energy
- Learning Nessus for Penetration Testing
- Python大規模機器學習