Неработоспособность testng Retry Analyzer

Я следил за несколькими различными веб-сайтами, объясняющими, как использовать RetryAnalyzer (все они говорят в основном одно и то же, но я проверил несколько, чтобы увидеть, есть ли разница). Я реализовал то же, что и в примерах, и намеренно вызвал сбой при первом запуске (который оказался единственным запуском). Несмотря на неудачу, испытание не повторялось. Я даже поставил точку останова внутри анализатора на первой строке (res = false). который ни разу не попал. Я говорю ему попробовать 3 раза, но он вообще не пытался. Я что-то упускаю? Мой пример ниже: это как-то связано с установкой counter = 0? А вот "res=false" хотя бы должен попасть?

public class RetryAnalyzer implements IRetryAnalyzer {

    int counter = 0;

    @Override
    public boolean retry(ITestResult result) {
        boolean res = false;
        if (!result.isSuccess() && counter < 3) {
            counter++;
            res = true;
        }
        return res;
    }
}

и

@Test(dataProvider = "dp",  retryAnalyzer = RetryAnalyzer.class)
public void testA(TestContext tContext) throws IOException {
    genericTest("A", "83701");
}

Тест обычно проходит. Я намеренно вызвал сбой, но повторной попытки не было. Я что-то упускаю?

============================================== Набор по умолчанию

Всего выполнено тестов: 1, сбоев: 1, пропусков: 0


person Tony    schedule 22.03.2018    source источник


Ответы (2)


Попробуйте добавить alwaysRun = true в декоратор тестового метода.

@Test(dataProvider = "dp",  retryAnalyzer = RetryAnalyzer.class, alwaysRun = true)
public void testA(TestContext tContext) throws IOException {
    genericTest("A", "83701");
}

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

Просто выполните driver.Quit() после переустановки драйвера браузера.

person Cosmin    schedule 22.03.2018
comment
Это тоже не сработало. У нас есть гуру SQA, который организовал для нас тестирование. Интересно, он каким-то образом заменяет анализатор повторных попыток на что-то, чтобы мой перезаписывался. Есть ли способ проверить это? - person Tony; 22.03.2018
comment
Проверьте, не наследуется ли ваш тестовый класс от какого-то другого Базового класса, возможно, что-то там было. В противном случае потребуются дополнительные подробности. - person Cosmin; 22.03.2018
comment
Это также может быть проблема с поставщиком данных. Проверьте сообщение здесь: github.com/cbeust/testng/issues/877 - person Cosmin; 22.03.2018
comment
Эй, Космин, я заметил, что ты румын. Я еду в Клуж через 5 месяцев на свадьбу. Извините за дрейф ;-) Да, класс наследует. Когда я делаю повторный анализатор статическим, он вызывается, я вижу увеличение счетчика. После того, как счетчик достигает значения, возвращается false, но тест продолжает выполняться и повторяться. Счетчик остается на 3. Я думаю, что это класс AbstractTest, который написал здесь сотрудник. Думаю, мне лучше подождать, пока он вернется из Канады, и попросить его о помощи? - person Tony; 22.03.2018

Класс RetryAnalyzer должен быть общедоступным. Кроме того, если это внутренний класс, он должен быть статическим. В противном случае TestNg молча игнорирует retryAnalyzer.

person Ashish Tyagi    schedule 24.07.2019