TestNG сообщает о повторных методах как отдельные тестовые прогоны

Я впервые начал работать с TESTNG несколько дней назад.

Я реализовал анализатор повторных попыток с использованием интерфейса IRetryAnalyzer, который повторяет неудачный метод тестирования максимум 3 раза.

У меня есть тестовый метод retryInvoker (), который дважды терпит неудачу и успешно работает в третий раз.

Как сообщает TestNG, это 3 отдельных тестовых прогона, 2 из которых завершились неудачно, а 1 - успешным, что на самом деле правильно. Хотя я просто хочу зафиксировать его как один тестовый прогон, который в конечном итоге завершился успешно (если это было до того, как закончилось максимально разрешенное количество повторных попыток, которых в данном случае было 3). Или, даже если это не удалось после 3 попыток, я хочу сообщить об этом как об одном тестовом прогоне, который завершился неудачно, вместо 4 отдельных тестовых прогонов, все из которых не прошли.

Есть какие-нибудь зацепки по этому поводу?


person laksh    schedule 16.05.2018    source источник
comment
Чтобы добавить подробностей, я также реализовал прослушиватель, который реализует интерфейс IMethodListener и устанавливает анализатор повторов для тестового класса, если он еще не установлен до вызова метода тестирования. Я читал об интерфейсе ITestListener, который имеет такие методы, как метод onFailure (), который можно использовать, а также может быть реализована логика в методе afterInvocation () IMethodListener.   -  person laksh    schedule 16.05.2018


Ответы (1)


Вы можете попробовать подход, предложенный в этом ответе SO, удалив дубликаты из тестового контекста в случае обнаружения того же метода. либо в неуспешных, либо в пройденных тестах:

@Overrride
public void onFinish(ITestContext context) {
    Iterator<ITestResult> failedTestCases = context.getFailedTests().getAllResults().iterator();
    while (failedTestCases.hasNext()) {
        System.out.println("failedTestCases");
        ITestResult failedTestCase = failedTestCases.next();
        ITestNGMethod method = failedTestCase.getMethod();
        if (context.getFailedTests().getResults(method).size() > 1) {
            System.out.println("failed test case remove as dup:" + failedTestCase.getTestClass().toString());
            failedTestCases.remove();
        } else {
            if (context.getPassedTests().getResults(method).size() > 0) {
                System.out.println(
                        "failed test case remove as pass retry:" + failedTestCase.getTestClass().toString());
                failedTestCases.remove();
            }
        }
    }
}
person Edvins    schedule 17.05.2018
comment
Это, безусловно, помогает изменять отчет для каждого пакета. Хотя мне кажется, что такой подход не сработает, если мы будем использовать поставщиков данных. - person laksh; 21.05.2018