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();
}
我尝试了互联网上提供的所有可能解决方案,但没有用。
答案 0 :(得分: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”));
}
回报程度;
}
}
在TestBase类中声明为全局。
public ExtentReports repo = ExtentManager.getInstance(); 公共静态ExtentTest测试
在公共无效的onTestStart(ITestResult结果)中调用startTest
test = repo.startTest(result.getName()。toUpperCase());
同时在CustomListener类中调用endTest:a)public void onTestFailure(ITestResult result); b)public void onTestSuccess(ITestResult结果)。
repo.endTest(test)
在TestBase类的@AfterSuite中调用close()或flush(),但不能两者都使用!
// repo.close(); repo.flush();
注意:我有ExtentReports版本2.41.2和TestNg版本7.1.0。
完成上述步骤后,已解决错误“在Selenium中使用范围报告在endTest调用之前关闭”。 范围报告会在报告中成功生成每个测试。 试试吧!