Закрытие перед вызовом endTest в Selenium с использованием отчетов Extent

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 был вызван до того, как тест можно было безопасно завершить с помощью EndTest.".
  3. Во время отладки я обнаружил, что еще до того, как были выполнены все endTest () в AfterMehtod, был вызван AfterSuite.
  4. Я пробовал разные варианты, чтобы код работал, например, удаление статики, вызов endTest () в самом тесте, а не после метода, удаление вызова close () из AfterSuite и многие другие варианты. Но все равно возникает та же ошибка.
  5. Я перепробовал все возможные решения, представленные в Интернете, но без толку.


person Sagar Jani    schedule 31.05.2018    source источник
comment
Вы вызываете extension.endTest (test); в методе endTest, если да, то какой метод вызывает этот метод. Попробуй перед этим прошить отчет.   -  person Ishita Shah    schedule 31.05.2018
comment
Мой endTest () в BaseTest вызывает endTest () в классе ExtentReportsService. Там сначала он закончит тест, а потом сбросит отчет. Я пробовал его промыть перед завершением теста. Не работает. Другое дело, что все мои тестовые примеры выполняются отлично. Но только отчет по экстенту не создается должным образом.   -  person Sagar Jani    schedule 31.05.2018
comment
Сначала достаточно драйвера, а потом прошить экстент Отчет.   -  person Ishita Shah    schedule 31.05.2018
comment
Тоже пробовал, но не работал. Я получаю успешные тестовые прогоны. Просто нет надлежащего документа Extent Report.   -  person Sagar Jani    schedule 31.05.2018
comment
Вы должны делать extent.flush() в своем @AfterSuite   -  person Bill Hileman    schedule 31.05.2018
comment
Снимите призыв к закрытию, это не обязательно. Он закрывает поток, поэтому вы видите это исключение. Кроме того, по возможности обновитесь до версии 3, поскольку версия 2 больше не поддерживается. Эта проблема, скорее всего, связана с завершением существующего набора, хотя тесты из другого набора еще не были запущены полностью.   -  person Anshoo    schedule 01.06.2018
comment
Сейчас я выполняю flush () в @AfterSuite. Также я обновился до последней версии Extent. Но все равно возникает та же проблема.   -  person Sagar Jani    schedule 01.06.2018
comment
Вы удалили вызов метода close, как предлагал @Anshoo?   -  person Bill Hileman    schedule 01.06.2018
comment
да. Я удалил вызов close (). Я добавил вызов flush () в AfterSuite. Может ли эта проблема быть вызвана многопоточностью?   -  person Sagar Jani    schedule 04.06.2018
comment
Пожалуйста, обратитесь к изображению под названием Несинхронизированный вывод в описании.   -  person Sagar Jani    schedule 04.06.2018
comment
Привет, вы пробовали использовать синхронизированные методы, не могли бы вы предоставить xml, где вы вызываете это параллельное выполнение, есть вероятность, что вы закрываете что-то раньше, чем предполагалось   -  person Kovacic    schedule 04.06.2018
comment
Да, я тоже пробовал. Я приложил снимок экрана с XML-файлом для параллельного теста, над которым я работаю. Я инициализирую отчет о степени в BeforeSuite, затем инициализирую драйвер в BeforeMethod и вызываю driver.quit () в Aftermethod. Затем я вызываю extension.flush () в AfterSuite. Я также пробовал с alwaysRun = true и без него.   -  person Sagar Jani    schedule 04.06.2018
comment
Я все еще не могу решить эту проблему. Но я думаю, что это вызвано многопоточностью. Когда я не использую Extent Reports, отправляемый по электронной почте отчет TestNG показывает шаги, как они есть в соответствующем тестовом примере. Но в Extent Reports шаги запутываются.   -  person Sagar Jani    schedule 06.06.2018


Ответы (1)


  1. ExtentReports инициализируется в классе ExtentManager с помощью Singleton ().

    открытый класс ExtentManager {
    частный статический экстент ExtentReports; public static ExtentReports getInstance () {
    if (extension == null) {
    extension = new ExtentReports (System.getProperty ("user.dir") + "\ target \ surefire-reports \ html \ extension.html ", истина, DisplayOrder.OLDEST_FIRST); 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 с использованием отчетов экстентов» была устранена. Отчет «Экстент» успешно генерирует каждый тест в отчете. Попробуйте!

person Jayanth R    schedule 28.12.2019
comment
Спасибо. Но это был старый вопрос, и я переписал код с нуля, так как было много других проблем. Ваше решение, если рассматривать его логически, сработает. Спасибо за приложенные усилия и за то, что поделились своим ответом. - person Sagar Jani; 30.12.2019