Hi,
Here are my changes:
// @Test(singleThreaded = true)
public class parallelTestExample {
private String version = null;
@BeforeClass(alwaysRun=true)
public void beforeClass() {
if ( version == null )
version = "v4";
}
@DataProvider(name = "parallelTest", parallel = true)
public Iterator<Object[]> parallelTest() {
List<Object[]> data = new ArrayList<Object[]>();
List<String> versions = Arrays.asList("v1", "v2", "v3", "v4");
for ( String version : versions ) {
data.add(new Object[]{ version });
}
return data.iterator();
}
@Factory(dataProvider = "parallelTest")
public parallelTestExample(String version) {
this.version = version;
}
@Test(description="Parallel test 0001", groups = "Functional")
public void parallelTest_0001() {
logger.debug("Begin: Method: " + Thread.currentThread().getStackTrace()[1].getMethodName() + ", version: " +
version + ", Thread: " + Thread.currentThread().getId());
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Assert.fail("Sleep failed.", e);
}
logger.debug("End: Method: " + Thread.currentThread().getStackTrace()[1].getMethodName() + ", version: " +
version + ", Thread: " + Thread.currentThread().getId());
}
@Test(description="Parallel test 0002", groups = "Functional")
public void parallelTest_0002() {
logger.debug("Begin: Method: " + Thread.currentThread().getStackTrace()[1].getMethodName() + ", version: " +
version + ", Thread: " + Thread.currentThread().getId());
try {
Thread.sleep(200);
} catch (InterruptedException e) {
Assert.fail("Sleep failed.", e);
}
logger.debug("End: Method: " + Thread.currentThread().getStackTrace()[1].getMethodName() + ", version: " +
version + ", Thread: " + Thread.currentThread().getId());
}
@Test(description="Parallel test 0003", groups = "Functional")
public void parallelTest_0003() {
logger.debug("Begin: Method: " + Thread.currentThread().getStackTrace()[1].getMethodName() + ", version: " +
version + ", Thread: " + Thread.currentThread().getId());
try {
Thread.sleep(300);
} catch (InterruptedException e) {
Assert.fail("Sleep failed.", e);
}
logger.debug("End: Method: " + Thread.currentThread().getStackTrace()[1].getMethodName() + ", version: " +
version + ", Thread: " + Thread.currentThread().getId());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<suite name="test-parallelTestExample" verbose="1" parallel="methods">
<test name="parallelTestExample_Functional">
<groups>
<run>
<include name="Functional" />
</run>
</groups>
<classes>
<class name="com.company.product.test.suite.function.parallelTestExample"/>
</classes>
</test>
</suite>
When I run this test, I get following output:
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:73]: Begin: Method: parallelTest_0003, version: v1, Thread: 9
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:60]: Begin: Method: parallelTest_0002, version: v1, Thread: 10
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:47]: Begin: Method: parallelTest_0001, version: v1, Thread: 11
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:73]: Begin: Method: parallelTest_0003, version: v2, Thread: 12
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:60]: Begin: Method: parallelTest_0002, version: v2, Thread: 13
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:54]: End: Method: parallelTest_0001, version: v1, Thread: 11
[2013/01/28:23:51:34][DEBUG][parallelTestExample.java:47]: Begin: Method: parallelTest_0001, version: v2, Thread: 11
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:67]: End: Method: parallelTest_0002, version: v1, Thread: 10
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:73]: Begin: Method: parallelTest_0003, version: v3, Thread: 10
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:67]: End: Method: parallelTest_0002, version: v2, Thread: 13
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:60]: Begin: Method: parallelTest_0002, version: v3, Thread: 13
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:54]: End: Method: parallelTest_0001, version: v2, Thread: 11
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:47]: Begin: Method: parallelTest_0001, version: v3, Thread: 11
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:80]: End: Method: parallelTest_0003, version: v1, Thread: 9
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:73]: Begin: Method: parallelTest_0003, version: v4, Thread: 9
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:80]: End: Method: parallelTest_0003, version: v2, Thread: 12
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:60]: Begin: Method: parallelTest_0002, version: v4, Thread: 12
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:54]: End: Method: parallelTest_0001, version: v3, Thread: 11
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:47]: Begin: Method: parallelTest_0001, version: v4, Thread: 11
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:67]: End: Method: parallelTest_0002, version: v3, Thread: 13
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:54]: End: Method: parallelTest_0001, version: v4, Thread: 11
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:80]: End: Method: parallelTest_0003, version: v3, Thread: 10
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:67]: End: Method: parallelTest_0002, version: v4, Thread: 12
[2013/01/28:23:51:35][DEBUG][parallelTestExample.java:80]: End: Method: parallelTest_0003, version: v4, Thread: 9
However, my expectation is to run test methods parallelTest_0001, parallelTest_0002 and parallelTest_0003 in sequence for a given version and each version in separate thread. I would like see similar as below execution:
Begin: Method: parallelTest_0001, version: v1, Thread: 9
Begin: Method: parallelTest_0001, version: v2, Thread: 10
Begin: Method: parallelTest_0001, version: v3, Thread: 11
End: Method: parallelTest_0001, version: v1, Thread: 9
End: Method: parallelTest_0001, version: v2, Thread: 10
End: Method: parallelTest_0001, version: v3, Thread: 11
Begin: Method: parallelTest_0002, version: v1, Thread: 9
Begin: Method: parallelTest_0002, version: v2, Thread: 10
Begin: Method: parallelTest_0002, version: v3, Thread: 11
End: Method: parallelTest_0002, version: v1, Thread: 9
End: Method: parallelTest_0002, version: v2, Thread: 10
End: Method: parallelTest_0002, version: v3, Thread: 11
Begin: Method: parallelTest_0003, version: v1, Thread: 9
Begin: Method: parallelTest_0003, version: v2, Thread: 10
Begin: Method: parallelTest_0003, version: v3, Thread: 11
End: Method: parallelTest_0003, version: v1, Thread: 9
End: Method: parallelTest_0003, version: v2, Thread: 10
End: Method: parallelTest_0003, version: v3, Thread: 11
How can I achieve this?
When I have @Test(singleThreaded = true), I see all tests for all versions are running in sequence. Let me know if I'm doing any thing wrong.
Thanks
Regards,
Karthi.