Закрытие перед вызовом 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();
}
  1. Выше мой код селена.
  2. Когда я выполняю свой файл набора с параллельными ="method" и count count="3", я получаю следующую ошибку: "com.relevantcodes.extentreports.ExtentTestInterruptedException: Close был вызван, прежде чем тест мог завершиться безопасно с помощью EndTest.".
  3. Во время отладки я обнаружил, что еще до того, как все endTest() в AfterMehtod были выполнены, вызывался AfterSuite.
  4. Я пробовал разные варианты, чтобы код работал, например, удаляя static, вызывая endTest() в самом тесте, а не после метода, удаляя вызов close() из AfterSuite и многие другие варианты. Но все равно получаю ту же ошибку.
  5. Я перепробовал все возможные решения, данные в интернете, но безрезультатно.

0 ответов

  1. 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"));
    } вернуть экстент; } }

  2. Объявлен в классе TestBase как глобальный.

    public ExtentReports repo = ExtentManager.getInstance (); общедоступный статический тест ExtentTest

  3. Вызов startTest в общедоступном void onTestStart(результат ITestResult)

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

  4. Вызов endTest в классе CustomListener как в: a)public void onTestFailure(результат ITestResult); б)public void onTestSuccess(результат ITestResult).

    repo.endTest (тест)

  5. Вызовите close () ИЛИ flush() в @AfterSuite в классе TestBase, но НЕ в обоих случаях!

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

Примечание: у меня есть ExtentReports ver-2.41.2 и TestNg ver-7.1.0.

После вышеуказанных шагов ошибка "Закрытие перед вызовом endTest в Selenium с использованием отчетов Extent" была устранена. Отчет по экстенту успешно генерирует каждый тест в отчете. Попробуйте!

Другие вопросы по тегам