Maven Surefire:无法分叉并行测试执行

时间:2010-08-30 11:59:35

标签: maven-2 fork surefire parallel-testing

使用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>            

任何帮助都会非常适合。

格雷瓜尔。

8 个答案:

答案 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-747http://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测试的并行执行。