在TestNG中获取运行时的套件名称

在TestNG中获取运行时的套件名称,testng,Testng,在测试用例中,如何在运行时获取当前运行套件的名称?我使用下面显示的代码获取当前的套件名称 监听器类: public class SuiteListener implements ISuiteListener{ private static ThreadLocal<ISuite> ACCESS = new ThreadLocal<ISuite>(); public static ISuite getAccess() { return ACCESS.ge

在测试用例中,如何在运行时获取当前运行套件的名称?我使用下面显示的代码获取当前的套件名称

监听器类:

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);
}

 }
Testng xml:

<suite name="tables" >
<test name="vendor" >
    <classes>
        <class name="Practise" ></class>
    </classes>
</test>
在本例中,我无法获取套件名称--它没有执行。
有人可以帮我获取套件名称吗?

您可以从
ITestContext
中访问Xml文件和当前Xml测试,可以将其注入测试方法中:

@Test
public void f(ITestContext ctx) {
  String suiteName = ctx.getCurrentXmlTest().getXmlSuite().getName();
在onStart()中,您可以获取当前正在运行的套件的套件名称,您可以使用记录器或sysout进行打印

public void onStart(ISuite suite) {
    suite.getName();
}

您可以从ITestContext中阅读它

public static String getSuiteName(ITestContext context){
    return context.getCurrentXmlTest().getSuite().getName();
}

当执行多个测试ng时,这将为您提供当前类名。
ctx.getCurrentXmlTest().getClasses().get(0).getName()
不会提供当前类名,因为必须更新索引。

这也可以用于获取具有测试方法名称的测试类名

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;
}

谢谢你的回答。这将返回suitename,但当我在另一个类中调用此方法时,作为参数传递什么?
public static String getSuiteName(ITestContext context){
    return context.getCurrentXmlTest().getSuite().getName();
}
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;
}
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;
}