TestNG的官方文檔的中文翻譯版第二章,原文請見 http://testng.org/doc/documentation-main.html
2 - Annotation
這里是TestNG中用到的annotation的快速預覽,還有它們的屬性。
@BeforeSuite: 被注釋的方法將在所有測試運行前運行
@AfterSuite: 被注釋的方法將在所有測試運行后運行
@BeforeTest: 被注釋的方法將在測試運行前運行
@AfterTest: 被注釋的方法將在測試運行后運行
@BeforeGroups: 被配置的方法將在列表中的gourp前運行。這個方法保證在第一個屬于這些組的測試方法調用前立即執行。
@AfterGroups: 被配置的方法將在列表中的gourp后運行。這個方法保證在最后一個屬于這些組的測試方法調用后立即執行。
@BeforeClass: 被注釋的方法將在當前類的第一個測試方法調用前運行。
@AfterClass: 被注釋的方法將在當前類的所有測試方法調用后運行。
@BeforeMethod: 被注釋的方法將在每一個測試方法調用前運行。
@AfterMethod: 被注釋的方法將在每一個測試方法調用后運行。
屬性:
alwaysRun 對于每個bufore方法(beforeSuite, beforeTest, beforeTestClass 和 beforeTestMethod, 但是不包括 beforeGroups):
如果設置為true,被配置的方法將總是運行而不管它屬于哪個組。
對于after方法(afterSuite, afterClass, ...): 如果設置為true,被配置的方法甚至在一個或多個先調用的方法失敗或被忽略時也將運行。
dependsOnGroups 這個方法依賴的組列表
dependsOnMethods 這個方法依賴的方法列表
enabled 這個類的方法是否激活
groups 這個類或方法所屬的分組列表
inheritGroups 如果設置為true,這個方法被屬于在類級別被@Test annotation指定的組
@DataProvider 標記一個方法用于為測試方法提供數據。
被注釋的方法必須返回Object[][], 其中每個Object[]可以指派為這個測試方法的參數列表。
從這個DataProvider接收數據@Test方法需要使用一個和當前注釋相同名稱的dataProvider名稱
name 這個DataProvider的名稱
@Factory 標記方法作為一個返回對象的工廠,這些對象將被TestNG用于作為測試類。這個方法必須返回Object[]
@Parameters 描述如何傳遞參數給@Test方法
value 用于填充這個方法的參數的變量列表
@Test 標記一個類或方法作為測試的一部分
alwaysRun 如果設置為true,這個測試方法將總是運行,甚至當它依賴的方法失敗時。
dataProvider 這個測試方法的data provider的名稱
dataProviderClass 用于查找data provider的類。
如果不指定,將在當前測試方法所在的類或者它的基類上查找data provider。
如果這個屬性被指定, 則data provider方法需要是指定類的static方法。
dependsOnGroups 當前方法依賴的組列表
dependsOnMethods 當前方法依賴的方法列表
description 當前方法的描述
enabled 當前類的方法/方法是否被激活
expectedExceptions 測試方法期望拋出的異常列表。如果沒有異常或者拋出的不是列表中的任何一個,當前方法都將標記為失敗.
groups 當前類/方法所屬的組列表
invocationCount 當前方法被調用的次數
successPercentage 當前方法期望的成功率
sequential 如果設置為true,當前測試類上的所有方法保證按照順序運行。甚至測試們在parallel="true"的情況下.
這個屬性只能用于類級別,如果用于方法級別將被忽略。
timeOut 當前方法容許花費的最大時間,單位毫秒。
threadPoolSize 當前方法的線程池大小。方法將被多線程調用,次數由invocationCount參數指定
注意:如果invocationCount沒有指定則這個屬性將被忽略
注:
上面是TestNG中用到的annotation列表,從中我們可以看到TestNG提供的一些特性
1. before方法和after方法 帶來了足夠豐富的測試生命周期控制
2. dependsOnGroups/dependsOnMethods 提供了依賴檢查機制,并可以嚴格控制執行順序
3. DataProvider 使得對同一個方法的測試覆蓋變的非常輕松,非常適合進行邊界測試,只要給出多種測試數據就可以針對一個測試方法進行覆蓋
4. expectedExceptions 使得異常測試變的非常輕松
5. invocationCount/threadPoolSize 終于可以簡單的直接進行多線程測試了,這個絕對是junit的超級弱項,回想junit中那個萬惡的System.exist(0)...
6. timeOut 終于不用死等然后手工強行關閉測試,TestNG想的太周到了