Параллельное выполнение 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 ответов


вам нужно использовать 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);
}

в настоящее время используется только один поток, как вы определили invocationCount как 1, Если вы измените его на 3, то три рабочих потока будут использоваться.

invocationCount :- сколько раз этот метод должен быть вызван.

threadPoolSize :- размер пула потоков для данного метода. Метод будет вызываться из нескольких потоков, как указано invocationCount. Примечание: этот атрибут игнорируется, если invocationCount не указанный.

и

вы также можете указать, что a @Test метод должен вызываться из разных потоков. Вы можете использовать атрибут threadPoolSize для достижения этого результата:

@Test(threadPoolSize = 3, invocationCount = 10,  timeOut = 10000)
public void testServer() {

в этом примере функция testServer будет вызываться десять раз из трех разных потоков. Кроме того, тайм-аут в десять секунд гарантирует, что ни один из потоков не будет блокировать этот поток навсегда.

больше информации можно найти здесь