Параллельное выполнение TestNG с DataProvider
У меня есть один тест, который получает данные от поставщика данных. Я хотел бы, чтобы этот тест выполнялся параллельно с различными значениями от поставщика данных .
я попробовал подход, как:
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 }
};
}
}
вывод, который я получил:
Здравствуйте : 10
Здравствуйте : 12
Здравствуйте : 17
Здравствуйте : 11
привет : 16
Здравствуйте : 14
привет : 13
Здравствуйте : 15
породил 10 потоков, в то время как я указал 5 в размере пула потоков . Не могли бы вы рассказать, что нужно добавить к приведенному выше фрагменту для управления размером пула потоков поставщика данных .
4 ответов
в 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);
}
в настоящее время используется только один поток, как вы определили invocationCount
как 1, Если вы измените его на 3, то три рабочих потока будут использоваться.
invocationCount
:- сколько раз этот метод должен быть вызван.
threadPoolSize
:- размер пула потоков для данного метода. Метод будет вызываться из нескольких потоков, как указано invocationCount.
Примечание: этот атрибут игнорируется, если invocationCount не указанный.
и
вы также можете указать, что a @Test
метод должен вызываться из разных потоков. Вы можете использовать атрибут threadPoolSize
для достижения этого результата:
@Test(threadPoolSize = 3, invocationCount = 10, timeOut = 10000)
public void testServer() {
в этом примере функция testServer будет вызываться десять раз из трех разных потоков. Кроме того, тайм-аут в десять секунд гарантирует, что ни один из потоков не будет блокировать этот поток навсегда.
больше информации можно найти здесь