如何在套件之前记录测试套件名称

时间:2019-04-04 12:41:30

标签: java selenium log4j testng

我想在运行测试套件之前记录它的名称。我成功记录了方法名称,但无法弄清楚如何使用套件执行相同的操作。我的代码:

编辑:我找到了解决方案。这是需要的人的代码。

public class TestCase {

private Logger logger = LogManager.getLogger(this.getClass());
protected static WebDriver driver;

private String url = PropertyManager.getUrl();
private String browser = PropertyManager.getBrowser();

@BeforeSuite
protected void setUp(ITestContext tes) { 
    System.setProperty("webdriver.chrome.driver","chromedriver.exe");
    System.setProperty("webdriver.chrome.logfile", "chromedriver.log");
    System.setProperty("webdriver.chrome.verboseLogging", "true");
    driver = new ChromeDriver();

    driver.get(url);
    driver.manage().window().maximize();
    logger.info("Starting up {} driver.", browser);


    logger.info(tes.getSuite().getName());
}

1 个答案:

答案 0 :(得分:1)

这可以通过在项目中添加Listener来完成。在调用预期方法之前,请使用IInvokedMethodListener执行活动。

步骤

  1. 创建一个类,说ListenerClass并在其中实现IInvokedMethodListener接口。

    public class ListenerClass implements IInvokedMethodListener
    
  2. 添加所有未实现的方法,并在beforeInvocation方法中添加以下代码:

    @SuppressWarnings("deprecation")
    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
    
        try {
            if (method.getTestMethod().getMethod().getAnnotation(org.testng.annotations.BeforeSuite.class)
                .toString() != null) {
                System.out.println("Before suite annoted method name - " + method.getTestMethod().getMethodName());
                System.out.println("Test suite name  - " + testResult.getTestContext().getSuite().getName());
             }
        } catch (Exception e) {
      }
    }
    
  3. 在您的testng.xml文件中添加侦听器类

    <listeners>
        <listener class-name="ListenerClass"></listener>
    </listeners>
    
    <test name="Test_Name">
        <classes>
            <class name="Test_Class_Name" />
        </classes>
    </test> <!-- Test -->
    

以TestNGSuite身份运行testng.xml,您将获得预期的结果。让我知道是否有东西