Gradle支持TestNG
test { useTestNG(){//指定testng配置文件 suites(file('src/test/resources/testng.xml'))}}
Maven支持TestNG
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.16</version><configuration><suiteXmlFiles><suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile></suiteXmlFiles></configuration></plugin>
查看Gradle生成測試報告
\target\reports\buildDashboard\index.html 測試結果公告頁面,包括(junitXml)和testng(html)的結果鏈接。
配置TestNg suite
<suitename="waptestng"><!--enabled="true"讓測試生效,可根據情況開啟或關閉某些測試--><testname="service"enabled="true"><!--指定參數--><parametername="accesskey"value="f0af8e412cef7e5058beeb6df2012e1e"/><!--指定測試包,注意加 .* --><packages><packagename="b2gonline.wap._systembase.service.*"/></packages><!--指定測試類--><classes><classname="test.sample.ParameterSample"/><!--過濾測試類的方法--><classname="test.IndividualMethodsTest"><methods><includename="testMethod"/></methods></class></classes><!--指定測試分組--><groups><run><!--包含--><includename="checkintest"/><!--排除--><excludename="broken"/></run></groups></test></suite>
常用TestNg注解
@Test(//在指定的時間內啟用3個線程並發測試本方法10次 threadPoolSize =3, invocationCount =10, timeOut =10000,//等待測試方法t0測試結束后開始本測試 dependsOnMethods ={"t0"},//指定測試數據源CLASS和數據源名稱(參考注解@DataProvider),返回是一個數組,返回幾條數據會跑測試方法幾次 dataProvider ="testUser", dataProviderClass =MockUser.class,//分組名稱 groups ={"checkin-test"})//讀取配置文件中的參數,配置如上,用@Optional設置默認值@Parameters({"accesskey"})publicvoid t1(User u,@Optional("xxx")String accesskey){...}
使用TestNg參數
在做單元測試的時候會有一些不固定因素,TestNg支持從配置文件或數據類中提供參數配置,通過注解很方便的引入或批量生成使用。
注解@Parameters
從XML配置文件中讀取, 如上面示例:@Parameters({ "accesskey" })
注解@Test(dataProvider)
如上示例:@Test(dataProvider = "testUser", dataProviderClass = MockUser.class)
MockUser.class
publicclassMockUser{@DataProvider(name ="testUser")publicstaticObject[][] testUser(){User u =newUser(); u.setId("SJDK3849CKMS3849DJCK2039ZMSK0001"); u.setName("admin-test");//測試找不到用戶User u2 =newUser(); u2.setId(""); u2.setName("");returnnewObject[][]{{u},{u2}};}}
使用Factories
功能:通過Factory和參數配置動態批量生成測試方法
示例:
publicclassWebTestFactory{@FactorypublicObject[] createInstances(){Object[] result =newObject[10];for(int i =0; i <10; i++){ result[i]=newWebTest(i *10);}return result;}}
publicclassWebTest{privateint m_numberOfTimes;publicWebTest(int numberOfTimes){ m_numberOfTimes = numberOfTimes;}@Testpublicvoid testServer(){for(int i =0; i < m_numberOfTimes; i++){// ...}}}
然后在XML配置中指定測試類 <class name="WebTestFactory" />
更多參考
- TestNg官方文檔:http://testng.org/doc/documentation-main.html
- Gradle-Test插件配置說明:http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html
- TestNg和JUnit4對比:http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/
