test { useTestNG(){ //指定testng配置文件 suites(file('src/test/resources/testng.xml')) } }
<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>
\target\reports\buildDashboard\index.html
测试结果公告页面,包括(junitXml)
和testng(html)
的结果链接。
<suite name="waptestng"> <!--enabled="true"让测试生效,可根据情况开启或关闭某些测试--> <test name="service" enabled="true"> <!--指定参数--> <parameter name="accesskey" value="f0af8e412cef7e5058beeb6df2012e1e"/> <!--指定测试包,注意加 .* --> <packages> <package name="b2gonline.wap._systembase.service.*"/> </packages> <!--指定测试类--> <classes> <class name="test.sample.ParameterSample"/> <!--过滤测试类的方法--> <class name="test.IndividualMethodsTest"> <methods> <include name="testMethod" /> </methods> </class> </classes> <!--指定测试分组--> <groups> <run> <!--包含--> <include name="checkintest"/> <!--排除--> <exclude name="broken"/> </run> </groups> </test> </suite>
@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" }) public void t1(User u, @Optional("xxx") String accesskey){ ... }
在做单元测试的时候会有一些不固定因素,TestNg支持从配置文件或数据类中提供参数配置,通过注解很方便的引入或批量生成使用。
注解@Parameters
从XML配置文件中读取, 如上面示例:@Parameters({ "accesskey" })
注解@Test(dataProvider)
如上示例:@Test(dataProvider = "testUser", dataProviderClass = MockUser.class)
MockUser.class
public class MockUser { @DataProvider(name = "testUser") public static Object[][] testUser() { User u = new User(); u.setId("SJDK3849CKMS3849DJCK2039ZMSK0001"); u.setName("admin-test"); //测试找不到用户 User u2 = new User(); u2.setId(""); u2.setName(""); return new Object[][]{ {u}, {u2} }; } }
使用Factories
功能:通过Factory和参数配置动态批量生成测试方法
示例:
public class WebTestFactory { @Factory public Object[] createInstances() { Object[] result = new Object[10]; for (int i = 0; i < 10; i++) { result[i] = new WebTest(i * 10); } return result; } }
public class WebTest { private int m_numberOfTimes; public WebTest(int numberOfTimes) { m_numberOfTimes = numberOfTimes; } @Test public void testServer() { for (int i = 0; i < m_numberOfTimes; i++) { // ... } } }
然后在XML配置中指定测试类 <class name="WebTestFactory" />