如何在我的测试用例中获取运行时当前运行的套件名称?我正在使用下面显示的代码来获取当前的套件名称。
听众课程:
public class SuiteListener implements ISuiteListener{
private static ThreadLocal<ISuite> ACCESS = new ThreadLocal<ISuite>();
public static ISuite getAccess() {
return ACCESS.get();
}
@Override
public void onFinish(ISuite suite) {
ACCESS.set(null);
}
@Override
public void onStart(ISuite arg0) {
ACCESS.set(arg0);
}
}
测试类:
@Listeners({ SuiteListener.class })
public class Practise {
@DataProvider(name = "getXlsPath")
public Object[][] createData() throws Exception {
String [][] testCasesPaths=null;
ISuite suiteListner = SuiteListener.getAccess();
String runningSuite=suiteListner.getName();
System.out.println(runningSuite);
testCasesPaths[0][0]="1.xls";
testCasesPaths[1][0]="2.xls";
return testCasesPaths;
}
@Test(dataProvider="getXlsPath")
public void test2(String xlsPath){
System.out.println(xlsPath);
}
}
Testng xml:
<suite name="tables" >
<test name="vendor" >
<classes>
<class name="Practise" ></class>
</classes>
</test>
代码完美无缺,直到我在套件中指定parallel="tests"
属性:
<suite name="tables" parallel="tests" >
在这种情况下,我无法获得套件名称 - 它没有执行。 有人可以帮助我,获得套件名称吗?
答案 0 :(得分:12)
您可以从ITestContext
访问Xml文件和当前的Xml测试,可以在测试方法中注入:
@Test
public void f(ITestContext ctx) {
String suiteName = ctx.getCurrentXmlTest().getXmlSuite().getName();
答案 1 :(得分:0)
在onStart()中,您可以获取当前运行套件的套件名称,您可以使用记录器或sysout进行打印。
public void onStart(ISuite suite) {
suite.getName();
}
答案 2 :(得分:0)
您可以从ITestContext
中读取它public static String getSuiteName(ITestContext context){
return context.getCurrentXmlTest().getSuite().getName();
}
答案 3 :(得分:0)
这也可以用来获取带有测试方法名称的测试类名称。
public static String generateFileName (ITestResult result, ITestContext ctx)
{
String[] suiteName = result.getMethod().toString().split("\\[");
String filename = "Script_" + suiteName[0] + "_" + dateFormat.format(new Date());
return filename;
}
答案 4 :(得分:-1)
public static String generateFileName (ITestResult result, ITestContext ctx)
{
String suiteName = result.getTestClass().getName();
//String suiteName = ctx.getCurrentXmlTest().getClasses().get(0).getName(); this is removed since the index after class was not getting updated to hold current test name
String filename = "Script_" + suiteName + "_" + dateFormat.format(new Date());
return filename;
}
当多次执行测试时,这将为您提供当前的类名。 ctx.getCurrentXmlTest().getClasses().get(0).getName()
不会为您提供当前的班级名称,因为必须更新索引。