原文链接:https://www.cnblogs.com/pixy/p/4718176.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
...... 配置内容 ......
</configuration>
</plugin>
<skipTests>true</skipTests>
mvn install -DskipTests
mvn install -Dmaven.test.skip=true
<testFailureIgnore>true</testFailureIgnore>
或者
mvn test -Dmaven.test.failure.ignore=true
**/Test*.java
**/*Test.java
**/*TestCase.java
<includes>
<include>Sample.java</include>
<include>%regex[.*[Cat|Dog].*Test.*]</include>
</includes>
<excludes>
<exclude>**/TestCircle.java</exclude>
<exclude>**/TestSquare.java</exclude>
</excludes>
mvn -Dtest=TestClassName test
mvn -Dtest=TestCi*le test
mvn -Dtest=TestSquare,TestCi*le test
mvn -Dtest=TestCircle#mytest test
mvn -Dtest=TestCircle#test* test
mvn -Dtest=TestCircle#testOne+testTwo test #(Surefire2.12.1+, Junit4.x+)
mvn命令加-T选项,多模块项目的各个模块可以并行构建。
两个方式:
methods,
classes,
both(classesAndMethods),
suites, suitesAndClasses,
suitesAndMethods,
classAndMethods,
all。
Junit Runner必须继承自orig.junit.runners.ParentRunner或为指定@org.junit.runner.RunWith。
线程数配置:
useUnlimitedThreads 为true,不限制线程数。
useUnlimitedThreads 为false时可以使用threadCount和perCoreThreadCount参数。
还可以通过threadCountSuites,threadCountClasses,threadCountMethods在不同粒度限制线程。
parallelTestsTimeoutInSeconds和parallelTestsTimeoutForcedInSeconds参数设置线程的超时时间。
Junit中@NotThreadSafe注解的内容会单线程执行,避免并发。
如果forkCount参数值后加C,表示乘以CPU核数(如forkCount=2.5C)。
reuseForks表示一个测试进程执行完了之后是杀掉还是重用来继续执行后续的测试。
默认配置为forkCount=1/reuseForks=true。进程的测试单元是class,逐个class的传递给测试进程。
可以用systemPropertyVariables 传入系统参数(mvn test -D...或配置元素),也可以使用argLine传入JVM选项。
argLine或者systemPropertyVariables配置里中也能用${surefire.forkNumber}占位符,代表每个进程自己的fork编号(1...n),用来向每个进程传入独立的资源配置(forkCount=0时,该占位符值为1)。
如果使用-T n同时执行多个mvn模块,每个模块都会有forkCount个进程,${surefire.forkNumber}的值为1..n*forkCount。
Old Setting | New Setting |
---|---|
forkMode=once (default) | forkCount=1 (default), reuseForks=true (default) |
forkMode=always | forkCount=1 (default), reuseForks=false |
forkMode=never | forkCount=0 |
forkMode=perthread, threadCount=N | forkCount=N, (reuseForks=false, if you did not had that one set) |
只要forkCount不为0,就可以和-T组合。
forkCount=0, 或forkCount=1/reuseForks=true,可以和parallel自由组合。
forkCount的测试进程是按类为单位执行的,测试类整个整个的传到测试进程中执行。
reuseForks=false或forkCount>1时,就会使用独立的测试进程,所以parallel=classes就失效了。
但是还是可以组合parallel=methods/threadCount=n指定每个测试进程里的并发线程数。
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<build>
<pluginManagement>
<plugins>
<!-- 添加maven-surefire-plugins插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<!-- 设置参数-->
<systemPropertyVariables>
<phone>123456789</phone>
<pwd>abcd1234</pwd>
<propertyName>${phone}</propertyName>
<propertyName>${pwd}</propertyName>
</systemPropertyVariables>
<suiteXmlFiles>
<!--此处testng.xml即为要运行的testng.xml文件 -->
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
@Test
@Parameters({ "phone", "pwd" })
public void test(String phone, String pwd) {
System.out.println("phone:"+phone);
System.out.println("pwd:"+pwd);
}
<groups>functest,perftest</groups>
指定Listeners和Reporters
TestNG支持在测试时附加自定义的listener, reporter, annotation transformer, method interceptor。默认会使用基本的listener生成HTML和XML报告。
Listener实现org.testng.ITestListener接口,会在测试开始、通过、失败等时刻实时发送通知。
Reporter实现org.testng.IReporter接口,在整个测试运行完毕之后才会发送通知,参数为对象列表,包含整个测试的执行结果状况。
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value> <!-- disabling default listeners is optional -->
</property>
<property>
<name>listener</name>
<value>com.mycompany.MyResultListener,com.mycompany.MyAnnotationTransformer,com.mycompany.MyMethodInterceptor</value>
</property>
<property>
<name>reporter</name>
<value>listenReport.Reporter</value>
</property>
</properties>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyResultListener,com.mycompany.MyResultListener2</value>
</property>
</properties>
<groups>com.mycompany.SlowTests</groups>
public interface SlowTests{}
public interface SlowerTests extends SlowTests{}
public class AppTest {
@Test
@Category(com.mycompany.SlowTests.class)
public void testSlow() {
System.out.println("slow");
}
@Test
@Category(com.mycompany.SlowerTests.class)
public void testSlower() {
System.out.println("slower");
}
@Test
@Category(com.cmycompany.FastTests.class)
public void testSlow() {
System.out.println("fast");
}
}
<argLine>-Djava.security.manager -Djava.security.policy=${basedir}/src/test/resources/java.policy</argLine>
<systemPropertyVariables>
<surefire.security.manager>java.lang.SecurityManager</surefire.security.manager>
</systemPropertyVariables>
mvn -Dsurefire.rerunFailingTestsCount=2 test #(JUnit需要4.x版本)
<argLine>-Djava.endorsed.dirs=...</argLine>
mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test