С TestNG на Java 6 вот что я хотел бы сделать в моем проекте Maven:
- Начните с метода тестирования (
testAbc
), который может работать в многопоточном режиме с использованием очередиDataProvider
- Начните тест, который полагается на
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"
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);
}
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
testAbc
- я попробовал на классе в целом с тем же результатом.invocationCount
, которая также необходима. В противном случаеthreadPoolSize
игнорируется.DataProvider
в том виде, в котором он был у меня изначально. Если я используюinvocationCount
, не будет лиDataProvider
вызываться только указанное количество раз вinvocationCount
? Тогда я пропущу варианты использования, если они будут добавлены, поскольку число произвольное.invocationCount
должна работать нормально. Я не уверен, как обеспечить переменное количество выполнений дляinvocationCount
с помощью аннотации@Test
.