官术网_书友最值得收藏!

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,因為違背了測試用例需要解耦的原則。

主站蜘蛛池模板: 岱山县| 海口市| 名山县| 台安县| 江阴市| 万年县| 彰武县| 桦甸市| 漳浦县| 新沂市| 九江市| 富锦市| 交城县| 体育| 乃东县| 益阳市| 登封市| 永泰县| 新巴尔虎右旗| 邹平县| 库尔勒市| 滨州市| 泸水县| 大安市| 东乌| 延津县| 富蕴县| 渑池县| 黄平县| 同江市| 安岳县| 东城区| 天祝| 嘉荫县| 贺州市| 桂阳县| 云龙县| 冀州市| 崇义县| 东兰县| 聊城市|