您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > TestNG
單元測(cè)試框架TestNg使用總結(jié)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/2/3 15:17:09 ] 推薦標(biāo)簽:單元測(cè)試 TestNG

  測(cè)試的依賴(lài)與分組
  我們?cè)趯⒁蕾?lài)與分組放在一起描述,是因?yàn)樗麄冎g有著緊密的聯(lián)系。
  測(cè)試依賴(lài)
  測(cè)試方法之間的依賴(lài)是一種很常見(jiàn)的需求,您也許認(rèn)為,測(cè)試之間的依賴(lài)不是破壞了測(cè)試方法之間的隔離性嗎?確實(shí)是這樣的,但是有時(shí)為了這種隔離性,在彼此隔離的測(cè)試方法當(dāng)中要付出很大的代價(jià)去相互模擬,所以為了方便起見(jiàn),testng提供了這種依賴(lài)的方式。
  Testng當(dāng)中通過(guò)@Test的屬性dependsOnMethods,dependsOnGroups來(lái)實(shí)現(xiàn)針對(duì)方法和分組的依賴(lài)。
  依賴(lài)還包括軟依賴(lài)和硬依賴(lài)。硬依賴(lài)是很強(qiáng)的關(guān)聯(lián),如果被依賴(lài)的測(cè)試失敗,那么依賴(lài)它的測(cè)試會(huì)跳過(guò)。而軟依賴(lài)則不會(huì)跳過(guò)。通過(guò)給@Test設(shè)定alwaysRun=true來(lái)實(shí)現(xiàn)軟依賴(lài)。使用依賴(lài)時(shí)需要注意的是要避免循環(huán)依賴(lài)
  測(cè)試分組
  Testing當(dāng)中提供的組名,與java當(dāng)中包的概念有些類(lèi)似,都是將包含相似點(diǎn)的類(lèi)歸為一組。
  分組的重要的目標(biāo)是:使固定的測(cè)試代碼和執(zhí)行哪些測(cè)試實(shí)現(xiàn)清晰的分離。當(dāng)你需要指定執(zhí)行哪些組的測(cè)試時(shí),在動(dòng)態(tài)執(zhí)行時(shí)指定組即可。
  關(guān)于分組的語(yǔ)法是非常簡(jiǎn)單的,@Test,@BeforeClass,@AfterClass,@BeforeMethod等都可以屬于分組。相關(guān)的語(yǔ)法是@Test(groups=”group1”),一個(gè)@Test的groups還可以指定多個(gè)組名,如@Test(groups=”group1,groups2”)。
  定義好的組名,其實(shí)是給運(yùn)行時(shí)使用的,也是在testng.xml文件當(dāng)中可以配置。前面的testng.xml說(shuō)明當(dāng)中提到了<groups>的用法。
  Group的組織可以根據(jù)各種維度來(lái)進(jìn)行劃分,如單元測(cè)試,集成測(cè)試,性能測(cè)試;蛘呤强蚣芊謱觼(lái)劃分如action,service,dao等。在配置文件當(dāng)中還可以定義組中組,通過(guò)define標(biāo)簽來(lái)實(shí)現(xiàn),前面也有所說(shuō)明。
  在一般項(xiàng)目中,我建議組分類(lèi)可按照架構(gòu)分層來(lái)定義,分為基礎(chǔ)功能,service業(yè)務(wù)以及dao層。
  expectedExceptions
  用expectedExceptions來(lái)測(cè)試異常有兩個(gè)好處:其一,它消除了try/catch語(yǔ)句給代碼帶來(lái)的干擾。其二,使得測(cè)試代碼表達(dá)的意圖更加清楚。只要看到@Test注釋當(dāng)中定義的expectedExceptions屬性,知道該測(cè)試方法的意圖,把Exception的用例和預(yù)期業(yè)務(wù)功能的用例分到不同測(cè)試方法中。
  語(yǔ)法很簡(jiǎn)單,@Test(expectedExceptions=”XXXException.class”) ,異常類(lèi)可以有多個(gè),用逗號(hào)隔開(kāi)。
  異步與并發(fā)測(cè)試
  異步與并發(fā)在單元測(cè)試當(dāng)中通常都比較困難。
  關(guān)于異步測(cè)試,如JMS,發(fā)送和接收是解耦的,如果是測(cè)試發(fā)送消息的方法,當(dāng)收到響應(yīng)時(shí),會(huì)有返回值。根據(jù)這個(gè)場(chǎng)景,測(cè)試代碼通常是這樣:
Private volatile Boolean success=”false”;
@Test(groups=”send”)
Public void sendMessage(){
//send message code
}
@Test(timeOut=10000,invocationCount=1000,successPercentage=98,dependsOnGroups={“send”})
Public void waitForAnser(){
While(!success){
Thread.sleep(1000);
}
}
@Test(timeOut = 10000, invocationCount = 1000,successPercentage = 98),是用于測(cè)試系統(tǒng)的可用性和響應(yīng)速度所設(shè)的值。這里告訴testng調(diào)用該方法1000次,如果98%的調(diào)用是成功的,認(rèn)為是通過(guò)測(cè)試。當(dāng)然,前面也要調(diào)用sendMessage方法1000次。timeOut是防止死鎖而產(chǎn)生的。
  Testing內(nèi)建了對(duì)并發(fā)的支持,可以分為兩種
  1,并發(fā)測(cè)試
  Testng在做并發(fā)測(cè)試時(shí)提供了threadPoolSize,invocationCount和timeOut三個(gè)屬性來(lái)完成。threadPoolSize可以指定多個(gè)線程池來(lái)執(zhí)行測(cè)試方法。
  2,并發(fā)執(zhí)行測(cè)試
  Testing還可以通過(guò)testng.xml來(lái)設(shè)置并發(fā)執(zhí)行。testng.xml默認(rèn)是單線程執(zhí)行的。
  <suite>標(biāo)簽可以設(shè)置parallel屬性。Thread-count指定線程數(shù)
  parallel=”methods”:每個(gè)測(cè)試方法都在它自己的線程中執(zhí)行(以方法為粒度)。
  parallel=”tests”:在某個(gè)<test>標(biāo)簽內(nèi)的所有測(cè)試方法都在它自己的線程中執(zhí)行(以<test>為粒度)。

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd