Close вызывался до того, как тест мог благополучно завершиться с помощью EndTest при запуске теста в нескольких потоках - PullRequest
0 голосов
/ 10 декабря 2018

Исключение составляет ExtentTestInterruptedException, когда я запускаю тест в нескольких потоках (с помощью TestNG для запуска теста в нескольких потоках):

com.relevantcodes.extentreports.ExtentTestInterruptedException: 
Close was called before test could end safely using EndTest.
    at com.relevantcodes.extentreports.Report.terminate(Report.java:425)
    at com.relevantcodes.extentreports.ExtentReports.close(ExtentReports.java:917)

Выполненные шаги

  1. Я начинаю свой тест по методу @BeforeTest с отчетом по экстенту startTest метод
  2. И заканчиваю свой тест по отчету по экстенту endTest в @AfterMethod метод
  3. Мой метод закрытия отчета по экстенту определен в функции @AfterSuite.
  4. Я удалил close() вызов метода из @AfterSuite, но в этом случае результат для нескольких тестовых случаев выглядит как неизвестный.

Может кто-нибудь помочь мне в решении этого вопроса?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если тест не пройден, если он не обрабатывается для exte.endTest (), вы столкнетесь с этой проблемой.Я использовал приведенный ниже метод ITestListener для обработки ошибки теста.Здесь причина фиксируется и заносится в отчет и завершает ведение журнала экстента.

public void onTestFailure(ITestResult t)
    {
        if(t.getStatus()==ITestResult.FAILURE) {
            String reason = t.getThrowable().toString();
            logger.log(LogStatus.FAIL, reason);
            extent.endTest(logger);
        }

    }
0 голосов
/ 12 декабря 2018

Это связано с отчетом по экстентам.Я не уверен, как вы пишете свой метод @after, но я могу только догадываться, что вы используете reports.endTest(test); в своем коде. Это более старая версия отчета о экстентах .Скорее всего, ваша проблема с этим.Вот альтернатива с последним решением для отчета экстентов, поскольку здесь нет кода, связанного с отчетом экстентов для вашей проблемы.

@AfterMethod
public synchronized void afterMethod(ITestResult result) {

    StringBuilder inputArgs = new StringBuilder();
    Object objects[] = result.getParameters();

    for(Object obj : objects){
        if(obj==null){
            inputArgs.append("  ");
        }else{
            inputArgs.append(obj.toString());
        }
        inputArgs.append(" , ");
    }

    if (result.getStatus() == ITestResult.FAILURE)
        test.get().fail(result.getThrowable()+ "Input Parameters : "+inputArgs.toString());
    else if (result.getStatus() == ITestResult.SKIP)
        test.get().skip(result.getThrowable() + "Input Parameters : "+inputArgs.toString());
    else
        test.get().pass( " Test Passed. Input parameters : " +inputArgs.toString());
    extent.flush();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...