20190626-surefire并行化运行问题的一二

官方文档说的已经很明确了,一种是多线程式运行,一种是fork JVM来多进程运行
https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html
我们的实践表明,设置为类、classes级别的多线程运行后,参数化测试,作为一个测试类,其中的各种参数化测试也会变成多线程,也就是说,参数化测试在methods级别并行了,这不是我们想要的,不过接下来的文档中,https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html#Running_tests_in_parallel 文档中说明了,可以使用@net.jcip.annotations.NotThreadSafe来注解一些测试类,此时,我们注解参数化测试类就可以解决这个问题;也可以给参数化测试sychronized类的成员变量
@NotThreadSafe新引入的问题
问题二,SuiteA包含Suite1,Suite1注解了@NotThreadSafe,Suite1包含测试类Test1,Test1也注解了@NotThreadSafe,此时使用mvn test -Dtest=SuiteA时,你会发现程序卡住了,但是CPU使用率不高,jconsole和jstack也没有检测死锁,那到底怎么了?我也不知道;正在查看解决中,需要说明的是,这是surefire插件的作用。

再啰嗦一句,JUnit官网中介绍了大量第三方加速测试的开源工具,包含像SpringTestRunne等的第三方TestRunner,等其他一些快捷注解,是非常适合引入学习的。

你可能感兴趣的:(20190626-surefire并行化运行问题的一二)