您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > TestNG
持續(xù)集成:TestNG組織如何測(cè)試用例
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2015/12/25 11:36:32 ] 推薦標(biāo)簽:軟件測(cè)試工具 單元測(cè)試工具

  測(cè)試這兩個(gè)test case的testng.xml文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1">
<parameter name="max" value="2"></parameter>
<test name="testcase1">
<classes>
<class name="com.ibm.testng.test.TestCase1"></class>
</classes>
</test>
<test name="testcase2">
<classes>
<class name="com.ibm.testng.test.TestCase2"></class>
</classes>
</test>
</suite>
  目前組織test case的方法的不足:
  1) 隨著test case數(shù)量的增加,像TestCase1和TestCase2這樣的測(cè)試類會(huì)越來(lái)越多。
  2)TestCase1這樣的測(cè)試類,只是根據(jù)測(cè)試邏輯調(diào)用測(cè)試方法,并Assert測(cè)試方法結(jié)果,并無(wú)其他功能。測(cè)試類間有很多像setUp,Assert這樣的重復(fù)代碼。
  3)修改Common Task類和testng.xml都會(huì)對(duì)測(cè)試類產(chǎn)生影響。例如,修改CommonTasks中method1的名稱,TestCase1和TestCase2中調(diào)用method1()的地方都得修改。修改testng.xml中參數(shù)max的名稱,需要修改TestCase1和TestCase2中所有用到max變量的地方。
  4)dependsOnMethods不被推薦使用。因?yàn),method名稱同時(shí)作為Java方法名稱和字符串,只修改任何一個(gè)地方,都會(huì)導(dǎo)致方法找不到。
  2. 新的組織test case的實(shí)踐
  目前的實(shí)踐方法不僅存在很多重復(fù)冗余的代碼,而且為以后的重構(gòu)帶來(lái)諸多不便。主要原因是測(cè)試類介于Common Task類和testng.xml之間,因此,新實(shí)踐不再為每個(gè)test case創(chuàng)建測(cè)試類。
  新實(shí)踐的實(shí)例代碼如下:
  CommonTasks文件:
import java.util.Random;
public class NewCommonTasks {
@Test(groups="method1")
@Parameters("max")
public void method1(int max) {
System.out.println("Run method1()");
Assert.assertEquals(new Random().nextInt(max), 0, "Failed");
}
@Test(groups="method2")
@Parameters("max")
public void method2(int max) {
System.out.println("Run method2()");
Assert.assertEquals(new Random().nextInt(max), 0, "Failed");
}
}
  測(cè)試這兩個(gè)test case的testng.xml文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1">
<parameter name="max" value="2"></parameter>
<test name="testcase1">
<groups>
<dependencies>
<group depends-on="method1" name="method2"></group>
</dependencies>
<run>
<include name="method1"></include>
<include name="method2"></include>
</run>
</groups>
<packages>
<package name="com.ibm.testng.test.*"></package>
</packages>
</test>
<test name="testcase2">
<groups>
<dependencies>
<group depends-on="method2" name="method1"></group>
</dependencies>
<run>
<include name="method2"></include>
<include name="method1"></include>
</run>
</groups>
<packages>
<package name="com.ibm.testng.test.*"></package>
</packages>
</test>
</suite>
  新實(shí)踐基于TestNG的一個(gè)設(shè)計(jì)目標(biāo):Create a clean separation between thestatic model (the code of your tests) and the runtime model (which tests get run)。這里的static model指Java代碼中的測(cè)試方法,runtime model指運(yùn)行時(shí)的test case。
  新實(shí)踐將之前的測(cè)試類刪掉,將測(cè)試類的annotation移到Common Task類中,將測(cè)試類的測(cè)試邏輯移到testng.xml中通過(guò)<dependencies>實(shí)現(xiàn)。這樣做具有如下優(yōu)勢(shì):
  1)理想情況下,一個(gè)Common Task類和一個(gè)testng.xml可以組織出所有test case。不存在代碼重復(fù)率很高的測(cè)試類,class文件數(shù)量也不會(huì)隨著test case數(shù)量的增加而增加。
  2)修改Common Task類和testng.xml,相互之間的影響會(huì)非常小。修改Common Task類,再也不用去修改大量的測(cè)試類。修改testng.xml中的參數(shù)名稱,也只需要修改Common Task類中很少的地方。
  3)dependsOnGroups代替了dependsOnMethods,任意修改Common Task類中的method名稱,都不會(huì)有印象。
  當(dāng)然,這種實(shí)現(xiàn)也不是完全沒(méi)有缺點(diǎn)。例如:測(cè)試邏輯也放到testng.xml中后,在test case數(shù)量較多的情況下文件會(huì)比較長(zhǎng)。不過(guò)可以根據(jù)某些特性將test case放到幾個(gè)xml配置文件中,然后通過(guò)<suite-files>封裝成一個(gè)suite一起測(cè)試。另外,當(dāng)測(cè)試出現(xiàn)問(wèn)題的時(shí)候,測(cè)試人員需要讀testng.xml文件來(lái)追蹤錯(cuò)誤位置。如果在寫(xiě)testng.xml時(shí)將<run>標(biāo)簽中include的groups按邏輯先后順序排列的話,也不會(huì)額外增加追蹤錯(cuò)誤的難度。
  我們會(huì)發(fā)現(xiàn)這種實(shí)現(xiàn)的testng.xml中,每個(gè)test case都需要一個(gè)相同的<packages>,其實(shí)完全可以把這部分移到<suite>中,使其對(duì)所有的test case都有效。不過(guò),這樣的嘗試沒(méi)有成功,具體問(wèn)題描述見(jiàn)testng github,希望知道該問(wèn)題的人能夠指點(diǎn)一下。同時(shí),如果一個(gè)test case中要多次以不同參數(shù)運(yùn)行同一group,會(huì)遇到傳參和dependency的問(wèn)題。目前只有一種間接解決方案:將這個(gè)test case執(zhí)行同一group的步驟分配到不同test中,TestNG會(huì)按照testng.xml中test的順序去執(zhí)行test case。

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