2

在 Java 6 上使用 TestNG,这就是我想在我的 Maven 项目中做的事情:

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

我以为我已经正确配置了它,但我没有。

目前我已将其配置为:

@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"
4

1 回答 1

3

怎么加threadPoolSize

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

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

编辑

刚刚注意到你错过了invocationCount。请注意,threadPoolSize如果invocationCount未指定,则将被忽略。

因此,请尝试按原样离开@Test 课程并更新testAbc

  @Test (
    alwaysRun = true,
    dataProviderClass = UseCaseProvider.class,
    dataProvider = "getUseCasesNoDependencies",
    skipFailedInvocations = false,
    threadPoolSize = 25,
    invocationCount = 25
  )
  public void testAbc(UseCase useCase) {
    executeUseCase(useCase);
  }
于 2013-01-10T21:32:52.793 回答