java - TestNG 并行测试配置

标签 java maven-2 testng java-6

使用 Java 6 上的 TestNG,我想在 Maven 项目中执行以下操作:

  1. 启动一个测试方法 (testAbc),该方法可以使用基于队列的 DataProvider 运行多线程
  2. testAbc 中的所有线程完成后启动依赖于 testAbc (testXyz) 的测试

我以为我已经正确配置了它,但事实并非如此。

目前我已将其配置如下:

@Test ( singleThreaded = false )
public class AutomatedTest {

  @Test (
    alwaysRun = true,
    dataProviderClass = UseCaseProvider.class,
    dataProvider = "getUseCasesNoDependencies",
    skipFailedInvocations = false,
    threadPoolSize = 25
  )
  public void testAbc(UseCase useCase) {
    executeUseCase(useCase);
  }

  @Test (
    dependsOnMethods = {"testAbc"},
    dataProviderClass = UseCaseProvider.class,
    dataProvider = "getUseCasesDependencies",
    singleThreaded = true
  )
  public void testXyz(UseCase useCase) {
    executeUseCase(useCase);
  }
}

testAbc 中由 @DataProvider 提供的所有测试都需要很长时间才能运行,但最多可以同时运行 25 个(有好几百个)其中)。 testXyz 中的所有内容都无法并行运行,因为不仅所有情况都依赖于 testAbc,而且处理对这样的线程池并不友好。

我的 Maven 配置设置如下:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <parallel>methods</parallel>
        <threadCount>25</threadCount>
      </configuration>
    </plugin>
  </plugins>
</build>

当我运行mvn -U test时,我没有看到我的测试实际上是并行运行的。 救命!

$ mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-06 15:16:01-0400)
Java version: 1.6.0_35
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x" version: "10.7.5" arch: "x86_64" Family: "mac"

最佳答案

添加threadPoolSize怎么样?

@Test ( singleThreaded = false, threadPoolSize = 5 )
public class AutomatedTest {
...

threadPoolSize 属性允许您指定应为此执行分配多少个线程。

编辑

刚刚注意到您错过了inplicationCount。请注意,如果未指定 inplicationCount,则忽略 threadPoolSize

因此,请尝试保留 @Test 类原样并更新 testAbc

  @Test (
    alwaysRun = true,
    dataProviderClass = UseCaseProvider.class,
    dataProvider = "getUseCasesNoDependencies",
    skipFailedInvocations = false,
    threadPoolSize = 25,
    invocationCount = 25
  )
  public void testAbc(UseCase useCase) {
    executeUseCase(useCase);
  }

关于java - TestNG 并行测试配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267528/

相关文章:

java - 使用 java RMI 和 CORBA 的分布式计算

maven-2 - maven, Ant 插件,antrun :run

java - 排除所有依赖项的所有传递依赖项?

ruby-on-rails - 在规范中使用 describe/it 优于 feature/scenario 的优势? (除了语法糖)

java - DBUnit 没有在每个方法之后清理和插入数据库,所以测试不是独立的

java - Servlet/JSP 流程控制 : Enums, 异常,还是其他原因?

java - 如何使用 Netty 连接到 docker.sock?

java - 如何在java中保存非常大的二进制代码

java - 创建简单的 Maven 项目时出现错误

java - 带有 jUnit 的测试监听器