TestNG簡介.?
1.TestNG是一個設計用來簡化廣泛的測試需求的測試框架,從單元測試到集成測試 ??? 這個是TestNG設計的出發(fā)點,不僅僅是單元測試,而且可以用于集成測試。設計目標的不同,對比junit的只適合用于單元測試,TestNG無疑走的更遠。 ??? 可以用于集成測試,這個特性是我選擇TestNG的最重要的原因。
2. 測試的過程的三個典型步驟,注意和junit(4.0)相比,多了一個將測試信息添加到testng.xml文件或者build.xml ??? 測試信息尤其是測試數(shù)據(jù)不再寫死在測試代碼中,好處就是修改測試數(shù)據(jù)時不需要修改代碼/編譯了,從而有助于將測試人員引入單元測試/集成測試。
3. 基本概念,相比junit的TestCase/TestSuite,TestNG有suite/test/test method三個級別,即將test/test method明確區(qū)分開了。 ??? junit中的TestCase將test/test method混合,比較容易讓人概念不清晰,尤其是新手。
Annotation
這里是TestNG中用到的annotation的快速預覽,還有它們的屬性。
@BeforeSuite:??????? 被注釋的方法將在所有測試運行前運行
@AfterSuite:??????? 被注釋的方法將在所有測試運行后運行
@BeforeTest:??????? 被注釋的方法將在測試運行前運行
@AfterTest:??????? 被注釋的方法將在測試運行后運行
@BeforeGroups:??????? 被配置的方法將在列表中的gourp前運行。這個方法保證在第一個屬于這些組的測試方法調(diào)用前立即執(zhí)行。
@AfterGroups:??????? 被配置的方法將在列表中的gourp后運行。這個方法保證在最后一個屬于這些組的測試方法調(diào)用后立即執(zhí)行。
@BeforeClass:??????? 被注釋的方法將在當前類的第一個測試方法調(diào)用前運行。
@AfterClass:??????? 被注釋的方法將在當前類的所有測試方法調(diào)用后運行。
@BeforeMethod:??????? 被注釋的方法將在每一個測試方法調(diào)用前運行。
@AfterMethod:??????? 被注釋的方法將在每一個測試方法調(diào)用后運行。
@DataProvider??? 標記一個方法用于為測試方法提供數(shù)據(jù)。
被注釋的方法必須返回Object[][], 其中每個Object[]可以指派為這個測試方法的參數(shù)列表。
從這個DataProvider接收數(shù)據(jù)@Test方法需要使用一個和當前注釋相同名稱的dataProvider名稱
name???????? 這個DataProvider的名稱
@Factory??? 標記方法作為一個返回對象的工廠,這些對象將被TestNG用于作為測試類。這個方法必須返回Object[]
@Parameters??? 描述如何傳遞參數(shù)給@Test方法
value??? 用于填充這個方法的參數(shù)的變量列表
@Test??????? 標記一個類或方法作為測試的一部分
alwaysRun???? 如果設置為true,這個測試方法將總是運行,甚至當它依賴的方法失敗時。
dataProvider???? 這個測試方法的data provider的名稱
dataProviderClass???? 用于查找data provider的類。
如果不指定,將在當前測試方法所在的類或者它的基類上查找data provider。
如果這個屬性被指定, 則data provider方法需要是指定類的static方法。
dependsOnGroups???? 當前方法依賴的組列表
dependsOnMethods???? 當前方法依賴的方法列表
description???? 當前方法的描述
enabled???? 當前類的方法/方法是否被激活
expectedExceptions???? 測試方法期望拋出的異常列表。如果沒有異?;蛘邟伋龅牟皇橇斜碇械娜魏我粋€,當前方法都將標記為失敗.
groups???? 當前類/方法所屬的組列表
invocationCount???? 當前方法被調(diào)用的次數(shù)
successPercentage???? 當前方法期望的成功率
sequential???? 如果設置為true,當前測試類上的所有方法保證按照順序運行。甚至測試們在parallel="true"的情況下.
這個屬性只能用于類級別,如果用于方法級別將被忽略。
timeOut???? 當前方法容許花費的最大時間,單位毫秒。
threadPoolSize???? 當前方法的線程池大小。方法將被多線程調(diào)用,次數(shù)由invocationCount參數(shù)指定
注意:如果invocationCount沒有指定則這個屬性將被忽略
上面是TestNG中用到的annotation列表,從中我們可以看到TestNG提供的一些特性
1. before方法和after方法??? 帶來了足夠豐富的測試生命周期控制
2. dependsOnGroups/dependsOnMethods 提供了依賴檢查機制,并可以嚴格控制執(zhí)行順序
3. DataProvider 使得對同一個方法的測試覆蓋變的非常輕松,非常適合進行邊界測試,只要給出多種測試數(shù)據(jù)就可以針對一個測試方法進行覆蓋
4. expectedExceptions 使得異常測試變的非常輕松
5. invocationCount/threadPoolSize 終于可以簡單的直接進行多線程測試了,這個絕對是junit的超級弱項,回想junit中那個萬惡的System.exist(0)...
6. timeOut 終于不用死等然后手工強行關(guān)閉測試,TestNG想的太周到了
?調(diào)用TestNG由幾種不同方法:
* 使用ant
* 從命令行