Ответ 1
Вам нужно использовать dataproviderthreadcount
. Значения threadpoolsize
и invocationcount
не требуются. Подробности здесь.
У меня есть один тест, который получает данные от поставщика данных. Я хотел бы, чтобы этот тест выполнялся параллельно с разными значениями от поставщика данных.
Я попробовал такой подход, как:
public class IndependentTest
{
@Test(dataProvider = "dp1" ,threadPoolSize=3,invocationCount=1)
public void testMethod(int number)
{
Long id = Thread.currentThread().getId();
System.out.println("HELLO : " + id);
}
@DataProvider(name = "dp1",parallel=true)
public Object[][] dp1() {
return new Object[][] {
new Object[] { 1 },
new Object[] { 2 },
new Object[] { 3 },
new Object[] { 4 },
new Object[] { 5 },
new Object[] { 6 },
new Object[] { 7 },
new Object[] { 8 }
};
}
}
Полученный вывод i:
HELLO: 10
HELLO: 12
ПРИВЕТ: 17
ПРИВЕТ: 11
HELLO: 16
ПРИВЕТ: 14
ПРИВЕТ: 13
HELLO: 15
Созданы 10 потоков, в то время как я указал 5 в размере пула потоков. Не могли бы вы рассказать, что должно быть добавлено к приведенному выше фрагменту, чтобы управлять размером пула данных поставщика данных.
Вам нужно использовать dataproviderthreadcount
. Значения threadpoolsize
и invocationcount
не требуются. Подробности здесь.
В testng.xml вы можете установить количество потоков для dataprovider через data-provider-thread-count="3"
<suite name="Manage" data-provider-thread-count="3" >
<test name="Manage data tests">
<classes>
<class name="uk.example.ExampleTest"></class>
</classes>
</test>
</suite>
Попробуйте установить пул потоков следующим образом:
@BeforeClass
public void setupClassName(ITestContext context) {
context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(5);
context.getCurrentXmlTest().getSuite().setPreserveOrder(false);
}
Вы можете достичь этого, добавив дополнительную конфигурацию 'parallel = true' вместе с именем DataProvider в своем определении. Пример таков:
@DataProvider(name="InvalidLoginDataProvider", parallel = true)
public Object[][] myDataProviderMethod(){
...
...
}
Согласно документации TestNG, пул потоков @Test (созданный с использованием параметров invocationCount и threadPoolSize в @Test) и пул потоков поставщиков данных различаются и управляются по-разному.
Таким образом, чтобы указать, сколько потоков в пуле потоков провайдера данных, необходимо добавить следующую конфигурацию в файл testng.xml.
<suite name="Suite1" data-provider-thread-count="20" >
...
...
</suite>
НТН!
Я думаю, что есть способ установить его на уровне аннотации, его следует добавить на DataProvider:
@DataProvider(name="quick-screen-list", parallel = true)
public Object[][] quickScreenDataProvider() {
.....
В настоящее время используется только один поток, поскольку вы определяете invocationCount
как 1, если вы измените его на 3, то будут использоваться три рабочих потока.
invocationCount
: - количество раз, когда этот метод должен быть вызван.
threadPoolSize
: - Размер пула потоков для этого метода. Метод будет вызван из нескольких потоков, как указано invocationCount.
Примечание: этот атрибут игнорируется, если invocationCount не указан.
Кроме того,
Вы также можете указать, что метод @Test
должен быть вызван из разных потоков. Вы можете использовать атрибут threadPoolSize
для достижения этого результата:
@Test(threadPoolSize = 3, invocationCount = 10, timeOut = 10000)
public void testServer() {
В этом примере функция testServer будет вызываться десять раз из трех разных потоков. Кроме того, тайм-аут из десяти секунд гарантирует, что ни один из потоков не будет блокировать этот поток навсегда.
Более подробную информацию можно найти здесь