I've parallel test cases execution setup with testng but I need to execute setup method only once.
BeforeClass, BeforeMethod also gets executed for individual threads. But I need to execute method once before all the threads.
How to achieve this with TestNG setup?
package com.howtodoinjava.parallelism;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParallelSuiteTest
{
String testName = "";
@BeforeTest
@Parameters({ "test-name" })
public void beforeTest(String testName) {
this.testName = testName;
long id = Thread.currentThread().getId();
System.out.println("Before test " + testName + ". Thread id is: " + id);
}
@BeforeClass
public void beforeClass() {
long id = Thread.currentThread().getId();
System.out.println("Before test-class " + testName + ". Thread id is: "
+ id);
}
@Test
public void testMethodOne() {
long id = Thread.currentThread().getId();
System.out.println("Sample test-method " + testName
+ ". Thread id is: " + id);
}
@AfterClass
public void afterClass() {
long id = Thread.currentThread().getId();
System.out.println("After test-method " + testName
+ ". Thread id is: " + id);
}
@AfterTest
public void afterTest() {
long id = Thread.currentThread().getId();
System.out.println("After test " + testName + ". Thread id is: " + id);
}
}
testng.xml
<suite name="Test-class Suite" parallel="tests" thread-count="2">
<test name="Test-class test 1">
<parameter name="test-name" value="test-method One" />
<classes>
<class name="com.howtodoinjava.parallelism.ParallelSuiteTest" />
</classes>
</test>
<test name="Test-class test 2">
<parameter name="test-name" value="test-method One" />
<classes>
<class name="com.howtodoinjava.parallelism.ParallelSuiteTest" />
</classes>
</test>
</suite>
@BeforeClass
annotated method which looks at a shared boolean to check ifinit()
has been called already before calling it ? TestNG AFAIK doesnt offer anything out of the box that would satisfy this need. – Krishnan Mahadevan@Test
methods IMO and is not for@BeforeClass
. What happens when you try it ? Do you have a sample test which can show the problem ? – Krishnan Mahadevan@BeforeClass
gets called once for every test class. You have two test classes each of which is embedded in a<test>
tag. But you should still be able to have both of your@BeforeClass
methods call into one globalinit()
guarded by asynchronized
block and which internally checks its invocation state by inspecting a boolean. – Krishnan Mahadevan