I have a single test which receives data from data provider. I would like this test to run in parallel with different values from data provider .
I tried an approach like :
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 }
};
}
}
The output i received is :
HELLO : 10
HELLO : 12
HELLO : 17
HELLO : 11
HELLO : 16
HELLO : 14
HELLO : 13
HELLO : 15
Spawned 10 threads while i specified 5 in the thread pool size . Could you please tell what has to be added to the above snippet to control the data provider thread pool size .
Try to set the thread pool in following way:
You need to use
dataproviderthreadcount
. Thethreadpoolsize
andinvocationcount
values are not required. See details here.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 attributethreadPoolSize
to achieve this result: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
In testng.xml you can set thread count for the dataprovider via
data-provider-thread-count="3"