С TestNG на Java 6 вот что я хотел бы сделать в моем проекте Maven:

  1. Начните с метода тестирования (testAbc), который может работать в многопоточном режиме с использованием очереди DataProvider
  2. Начните тест, который полагается на testAbc (testXyz) после завершения всех потоков из testAbc

Я думал, что правильно настроил, но это не так.

В настоящее время я настроил его как таковой:

@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"
2
user839487 11 Янв 2013 в 01:24

1 ответ

Лучший ответ

А как насчет добавления threadPoolSize

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

Атрибут threadPoolSize позволяет указать, сколько потоков следует выделить для этого выполнения.

РЕДАКТИРОВАТЬ

Только что заметил, что вы пропустили invocationCount. Обратите внимание, что threadPoolSize игнорируется, если invocationCount не указан.

Поэтому, пожалуйста, оставьте class @Test как есть и обновите testAbc

  @Test (
    alwaysRun = true,
    dataProviderClass = UseCaseProvider.class,
    dataProvider = "getUseCasesNoDependencies",
    skipFailedInvocations = false,
    threadPoolSize = 25,
    invocationCount = 25
  )
  public void testAbc(UseCase useCase) {
    executeUseCase(useCase);
  }
3
Tom 11 Янв 2013 в 01:38
Я применил это к своему методу testAbc - я попробовал на классе в целом с тем же результатом.
 – 
user839487
11 Янв 2013 в 01:37
Я только что добавил информацию о invocationCount, которая также необходима. В противном случае threadPoolSize игнорируется.
 – 
Tom
11 Янв 2013 в 01:39
Полагаю, мне придется отказаться от использования DataProvider в том виде, в котором он был у меня изначально. Если я использую invocationCount, не будет ли DataProvider вызываться только указанное количество раз в invocationCount? Тогда я пропущу варианты использования, если они будут добавлены, поскольку число произвольное.
 – 
user839487
11 Янв 2013 в 01:40
Хорошо, это на полпути. Использование счетчика вызовов (я установил его на 25) работало нормально, и мои тесты выполнялись параллельно. Однако было запущено только 25 из них. Думаю, мне нужно изучить преобразователь аннотаций, чтобы правильно настроить его (testng.org/ doc / documentation-main.html # annotationtransformers)
 – 
user839487
11 Янв 2013 в 01:44
А сколько у вас тестовых случаев? Это постоянное значение переменной? Если это константа, то я считаю, что установка этого значения для invocationCount должна работать нормально. Я не уверен, как обеспечить переменное количество выполнений для invocationCount с помощью аннотации @Test.
 – 
Tom
11 Янв 2013 в 01:49