TestNg测试框架使用笔记
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/