1

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: Close was called before test can be used to secure endTest.”。
  3. 在调试时,我发现即使在 AfterMehtod 中的所有 endTest() 被执行之前,AfterSuite 就被调用了。
  4. 我尝试了不同的变体以使代码正常工作,例如,删除静态,在测试本身而不是 after 方法中调用 endTest(),从 AfterSuite 中删除 close() 调用以及许多其他变体。但仍然得到同样的错误。
  5. 我尝试了互联网上提供的所有可能的解决方案,但没有用。

4

1 回答 1

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

    公共类 ExtentManager {
    私有静态 ExtentReports 范围;公共静态 ExtentReports getInstance() {
    if(extent == null) {
    extent = new ExtentReports(System.getProperty("user.dir")+"\target\surefire-reports\html\extent.html", true, DisplayOrder。 OLDEST_FIRST); extent.loadConfig(new File(System.getProperty("user.dir")+"src\test\resources\extentconfig\ReportsConfig.xml"));
    } 返回范围;} }

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

    公共 ExtentReports 回购 = ExtentManager.getInstance(); 公共静态 ExtentTest 测试

  3. 在 public void onTestStart(ITestResult 结果) 中调用 startTest

    测试 = repo.startTest(result.getName().toUpperCase());

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

    repo.endTest(测试)

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

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

注意:我有 ExtentReports ver-2.41.2 和 TestNg ver-7.1.0。

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

于 2019-12-28T23:35:01.147 回答