在使用范围报告在Selenium中调用endTest之前关闭

时间:2018-05-31 07:07:36

标签: extent extentreports selenium-extent-report

BaseTest.java:

private static ReportService reportService; // Calling report service interface

@BeforeSuite:
reportService = new ExtentReportService(getConfig()); // New instance of ExtentReportService.

@BeforeMethod:
reportService.startTest(testname); // Starting the test and passing the name and description of the test.

@AfterMethod:
reportService.endTest(); // Ending the test

@AfterSuite:
reportService.close(); // Closing the test

**ExtentReportService.java:** // Contains different extent API methods. (These are designed to be generic.)

protected static ExtentReports extent; // static instance of ExtentReports
protected static ExtentTest test; //static instance of ExtentTTest

@Override // StartTest method
startTest(Method method) {
testMetaData = getTestMetaData(method);
test=extent.startTest(testMetaData.getId(),testMetaData.getSummary());
}

@Override //End test method
endTest() {
extent.endTest(test);
extent.flush();
}
  1. 以上是我的硒代码。
  2. 当我使用parallel =“methods”和thread count =“3”执行我的套件文件时,我收到以下错误:“com.relevantcodes.extentreports.ExtentTestInterruptedException:在测试可以使用EndTest安全结束之前调用Close “。
  3. 在调试时,我发现即使在执行AfterMehtod中的所有endTest()之前,也会调用AfterSuite。
  4. 我尝试了不同的变体,以便代码可以工作,例如,删除静态,在测试本身而不是在方法之后调用endTest(),从AfterSuite和许多其他变体中删除close()调用。但仍然得到同样的错误。
  5. 我尝试了互联网上提供的所有可能解决方案,但没有用。

1 个答案:

答案 0 :(得分:1)

  1. 使用Singleton()在ExtentManager类中初始化的ExtentReports。

    公共类ExtentManager {
    私有静态ExtentReports范围; 公共静态ExtentReports getInstance(){
        if(extent == null){
            范围=新的ExtentReports(System.getProperty(“ user.dir”)+“ \ target \ surefire-reports \ html \ extent.html”,true,DisplayOrder.OLDEST_FIRST);         scope.loadConfig(新文件(System.getProperty(“ user.dir”)+“ src \ test \ resources \ extentconfig \ ReportsConfig.xml”));
        }     回报程度; } }

  2. 在TestBase类中声明为全局。

    public ExtentReports repo = ExtentManager.getInstance(); 公共静态ExtentTest测试

  3. 在公共无效的onTestStart(ITestResult结果)中调用startTest

    test = repo.startTest(result.getName()。toUpperCase());

  4. 同时在CustomListener类中调用endTest:a)public void onTestFailure(ITestResult result); b)public void onTestSuccess(ITestResult结果)。

    repo.endTest(test)

  5. 在TestBase类的@AfterSuite中调用close()或flush(),但不能两者都使用!

    // repo.close(); repo.flush();

注意:我有ExtentReports版本2.41.2和TestNg版本7.1.0。

完成上述步骤后,已解决错误“在Selenium中使用范围报告在endTest调用之前关闭”。 范围报告会在报告中成功生成每个测试。 试试吧!