使用Maven surefire,我无法分叉并行测试执行。也就是说,我的每个测试用例都要在serapate JVM中运行,因此就是分叉。另外,我希望我的测试用例并行运行。第一部分工作没有问题:我能够在自己的JVM中运行每个测试用例。第二部分,对我来说仍然是一个挑战。我还没有设法让测试用例的并行执行工作。这是我的插件声明的样子:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<parallel>methods</parallel>
<forkMode>always</forkMode>
<argLine>-Xms512m -Xmx512m</argLine>
</configuration>
</plugin>
我已经尝试了两种方法和类,但没有看到任何并行化。 我的JUnit版本是4.7,如依赖性声明所示:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>compile</scope>
</dependency>
任何帮助都会非常适合。
格雷瓜尔。
答案 0 :(得分:7)
我认为您在使用threadCount
模式时应该使用parallel
参数:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<configuration>
<forkMode>always</forkMode>
<argLine>-Xms512m -Xmx512m</argLine>
<parallel>methods</parallel>
<threadCount>4</threadCount>
</configuration>
</plugin>
答案 1 :(得分:4)
我遇到了同样的问题,因为我使用的是surefire 2.7版,升级到2.12后,它使用了以下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<parallel>classes</parallel>
<forkMode>perthread</forkMode>
<threadCount>4</threadCount>
</configuration>
</plugin>
它产生了4个线程,每个线程运行它自己的jvm。
答案 2 :(得分:2)
确保您收到类似这样的日志消息
[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true}
在此标题之前:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
此消息表明并行的surefire junit提供程序处于活动状态。
如果这不存在,那么万无一失可能会找到一个比您想象的不同版本的junit。低于4.7的任何东西都不起作用。运行mvn dependency:tree来检查哪个版本存在。
您还应该升级到surefire 2.6,因为修复了与并行运行相关的一些小错误。出于同样的原因,你应该使用最新的junit。
答案 3 :(得分:1)
Surefire的并行模式非常错误。例如,请参阅http://jira.codehaus.org/browse/SUREFIRE-747和http://jira.codehaus.org/browse/SUREFIRE-730
到目前为止,我还没有设法同时运行一个测试(更不用说分叉)了。
答案 4 :(得分:1)
尝试将forkMode从always更改为“never”。它没有在他们的文档中说明这一点,但是你现在不能使用fork加并行(我们在挖掘了万无一失的代码后发现了这一点。)
您也知道,由于许多测试/支持库(easymock,powermock等)无法兼顾您的测试,您可能会遇到非线程安全的测试。
答案 5 :(得分:0)
你确定它不起作用吗?如果您的测试不包含许多测试方法,则可能无法获得更高的加速。使用forkMode =总是你能做的最好的是并行运行类中的所有测试方法。
答案 6 :(得分:0)
不是并行设置TestNG属性吗?根据这个: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#parallel
答案 7 :(得分:0)
surefire 2.16修复了关于JUnit测试的并行执行。