TestNG parallel Execution with DataProvider

霸气de小男生 提交于 2019-11-29 03:54:07
niharika_neo

You need to use dataproviderthreadcount. The threadpoolsize and invocationcount values are not required. See details here.

In testng.xml you can set thread count for the dataprovider via 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>

Try to set the thread pool in following way:

@BeforeClass
public void setupClassName(ITestContext context) {
    context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(5);
    context.getCurrentXmlTest().getSuite().setPreserveOrder(false);
}

You can achieve this by adding extra configuration 'parallel=true', along with the name of the DataProvider, in its definition. An example is as follows:

@DataProvider(name="InvalidLoginDataProvider", parallel = true)
public Object[][] myDataProviderMethod(){
...
...
}

As per TestNG documentation, the @Test thread pool (created using invocationCount and threadPoolSize parameters in @Test) and Data provider thread pool are different and managed differently.
So, to specify how many threads in Data provider thread pool, one has to add the following configuration in testng.xml file.

<suite name="Suite1" data-provider-thread-count="20" >
...
...
</suite> 

HTH!

I think there is a way to set it on annotation level, it should be add on the DataProvider's :

@DataProvider(name="quick-screen-list", parallel = true)
        public Object[][] quickScreenDataProvider() {
           .....

Currently only one thread is getting used as you have define invocationCount as 1, if you change it to 3 then three workers thread will get used.

invocationCount :- The number of times this method should be invoked.

threadPoolSize :- The size of the thread pool for this method. The method will be invoked from multiple threads as specified by invocationCount. Note: this attribute is ignored if invocationCount is not specified.

Also,

You can also specify that a @Test method should be invoked from different threads. You can use the attribute threadPoolSize to achieve this result:

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

In this example, the function testServer will be invoked ten times from three different threads. Additionally, a time-out of ten seconds guarantees that none of the threads will block on this thread forever.

More info can be found here

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!