问题
Using TestNG, is it possible to dynamically change the test name with a method such as this one below?
@Test(testName = "defaultName", dataProvider="tests")
public void testLogin( int num, String reportName )
{
System.out.println("Starting " + num + ": " + reportName);
changeTestName("Test" + num);
}
回答1:
No, but your test class can implement org.testng.ITest
and override getTestName() to return the name of your test.
回答2:
For anybody still facing this.
This can be done by implementing the org.testng.ITest
class and overriding the getTestName() method just like as @Cedric mentions.
To make the test name dynamic you can use a locally created testName
variable In addition.
Below is all you need to do
import java.lang.reflect.Method;
import org.testng.ITest;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
public class MyTestClass implements ITest {
@Test(dataProvider = "/* yourDataProvider */")
public void myTestMethod() {
//Test method body
}
@BeforeMethod(alwaysRun = true)
public void setTestName(Method method, Object[] row) {
//You have the test data received through dataProvider delivered here in row
String name = resolveTestName(row);
testName.set(name);
}
@Override
public String getTestName() {
return testName.get();
}
private ThreadLocal<String> testName = new ThreadLocal<>();
}
This way you should be able to generate the testName dynamically
来源:https://stackoverflow.com/questions/12147435/using-testng-is-it-possible-to-dynamically-change-the-test-name