Закрытие перед вызовом endTest в Selenium с использованием Extent Reports
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();
}
- Выше мой код селена.
- Когда я выполняю свой файл набора с параллельными ="method" и count count="3", я получаю следующую ошибку: "com.relevantcodes.extentreports.ExtentTestInterruptedException: Close был вызван, прежде чем тест мог завершиться безопасно с помощью EndTest.".
- Во время отладки я обнаружил, что еще до того, как все endTest() в AfterMehtod были выполнены, вызывался AfterSuite.
- Я пробовал разные варианты, чтобы код работал, например, удаляя static, вызывая endTest() в самом тесте, а не после метода, удаляя вызов close() из AfterSuite и многие другие варианты. Но все равно получаю ту же ошибку.
Я перепробовал все возможные решения, данные в интернете, но безрезультатно.
- Прикрепление файла иерархии для ExtentReport, используемого в моем проекте
- Кроме того, в Stackru приведено следующее решение: Отчет по экстентам:com.relevantcodes.extentreports.ExtentTestInterruptedException: Close был вызван до безопасного завершения теста с использованием EndTest.
- Несинхронизированный вывод
- XMF-файл для параллельного теста.
0 ответов
ExtentReports инициализируется в классе ExtentManager с помощью Singleton().
открытый класс ExtentManager {
частный статический экстент ExtentReports; общедоступные статические ExtentReports getInstance () {
if (extension == null) {
extension = new ExtentReports(System.getProperty("user.dir")+"\target\surefire-reports\html\extension.html", true, DisplayOrder. СТАРЕЙШИЙ ПЕРВЫЙ); extension.loadConfig(новый файл (System.getProperty("user.dir")+"src\test\resources\extensionconfig \ ReportsConfig.xml"));
} вернуть экстент; } }Объявлен в классе TestBase как глобальный.
public ExtentReports repo = ExtentManager.getInstance (); общедоступный статический тест ExtentTest
Вызов startTest в общедоступном void onTestStart(результат ITestResult)
test = repo.startTest(result.getName (). toUpperCase());
Вызов endTest в классе CustomListener как в: a)public void onTestFailure(результат ITestResult); б)public void onTestSuccess(результат ITestResult).
repo.endTest (тест)
Вызовите close () ИЛИ flush() в @AfterSuite в классе TestBase, но НЕ в обоих случаях!
//repo.close (); repo.flush();
Примечание: у меня есть ExtentReports ver-2.41.2 и TestNg ver-7.1.0.
После вышеуказанных шагов ошибка "Закрытие перед вызовом endTest в Selenium с использованием отчетов Extent" была устранена. Отчет по экстенту успешно генерирует каждый тест в отчете. Попробуйте!