8

使用 Maven surefire,我无法分叉并行测试执行。也就是说,我的每个测试用例都需要在单独的 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>            

任何帮助都会非常有用。

格雷戈里。

4

8 回答 8

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>
于 2010-08-30T22:25:16.963 回答
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。

于 2012-07-05T14:21:45.480 回答
2

确保您收到类似这样的日志消息

[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true}

就在这个标题之前:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

此消息表明并行的surefire junit 提供程序处于活动状态。

如果这不存在,surefire 可能会选择与您想象的不同版本的 junit。低于 4.7 的任何东西都不起作用。运行 mvn dependency:tree 以检查存在哪些版本。

您还应该升级到 surefire 2.6,因为一些与并行运行相关的小错误已得到修复。出于同样的原因,您应该使用最新的 junit。

于 2010-08-31T10:10:45.570 回答
1

尝试将您的 forkMode 从始终更改为“从不”。它没有在他们的文档中说明这一点,但此时您不能使用 fork plus parallel(我们在挖掘了 surefire 代码后发现了这一点。)

正如您所知,由于许多测试/支持库(easymock、powermock 等)使并行测试的能力无效,您可能会遇到非线程安全的测试。

于 2011-09-15T06:49:07.733 回答
1

Surefire 的并行模式非常有问题。例如,请参阅http://jira.codehaus.org/browse/SUREFIRE-747http://jira.codehaus.org/browse/SUREFIRE-730

迄今为止,我还没有设法让单个测试并行运行(更不用说分叉了)。

于 2011-06-16T04:27:16.717 回答
0

你确定它不工作?如果您的测试不包含许多测试方法,您可能不会获得太多的加速。使用 forkMode=always,您能做的最好的事情就是并行运行一个类中的所有测试方法。

于 2011-02-24T22:59:27.227 回答
0

并行设置不是仅 TestNG 属性吗?根据这个: http ://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#parallel

于 2012-10-09T08:00:56.203 回答
0

surefire 2.16 修复了有关 JUnit 测试的并行执行。

于 2013-09-08T11:55:58.233 回答