Невозможно выполнить неудачные тестовые случаи с помощью IRetryAnalyzer - PullRequest
1 голос
/ 29 апреля 2020

У меня тестовый пример, основанный исключительно на данных. Моя цель - повторить тесты, которые провалились хотя бы еще раз. Проблема, с которой я здесь сталкиваюсь, заключается в том, что если счетчик повторных попыток установлен на 3, и у меня есть тест на основе данных следующим образом,

    @Test(dataProvider="PositiveScenarios",groups= "smoke",retryAnalyzer = utils.Retry.class)
    public void positiveScenariosTest(LinkedHashMap<String, String> data) throws InterruptedException {
    }

And the Retry class is like below

    package utils;

    import org.testng.IRetryAnalyzer;
    import org.testng.ITestResult;

    public class Retry  implements IRetryAnalyzer{

    int counter = 1;
    int retryMaxLimit = 3;

     public boolean retry(ITestResult result) {
    if (counter < retryMaxLimit) {
            System.out.println("Going to retry test case: " + result.getMethod() + ", " + (retryMaxLimit - counter + 1) + " out of " + retryMaxLimit);
            counter++;
            return true;
        }
        return false;
    }
}

Допустим, у меня есть 10 тестов. Если 4-й тест не пройден, 4-й тест повторяется 3 раза (что хорошо). После этого, скажем, если 6-й тест не пройден, 6-й тест выполняется только один раз, а не 3 раза. Я ожидал, что 6-й тест будет запущен 3 раза, прежде чем потерпеть неудачу.

Не уверен, что я здесь не так делаю.

У меня нет никаких специфических c слушателей TestNG здесь (как при сбое теста) Нужно ли иметь его? Если это так, то как первый тестовый провал прошел 3 раза? Есть ли инициализатор, который мне не хватает.

Любая помощь с благодарностью. Я использую последнюю версию TestNG.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Я считаю, что аннотация @Override отсутствует над retry(ITestResult result) в вашем классе Retry.
Она должна выглядеть следующим образом:

package utils;

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

public class Retry  implements IRetryAnalyzer{

int counter = 1;
int retryMaxLimit = 3;

@Override
public boolean retry(ITestResult result) {
if (counter < retryMaxLimit) {
       System.out.println("Going to retry test case: " + result.getMethod() + ", " + (retryMaxLimit - counter + 1) + " out of " + retryMaxLimit);
       counter++;
       return true;
       }
   return false;
   }
}
0 голосов
/ 06 мая 2020

Я узнал наконец. Не уверен, что это проблема TestNG. То, что я делал, сбрасывало счетчик каждый раз, когда тест проходил (даже после 2-го или 3-го раунда), как показано ниже

@AfterMethod(alwaysRun = true)
    public void AfterTest(ITestResult result) throws IOException {
    if(result.getStatus() == ITestResult.FAILURE) {         

    }
    else if(result.getStatus() == ITestResult.SUCCESS) {

        Retry retry = new Retry();
        retry.resetCounter();
    }       
    else if(result.getStatus() == ITestResult.SKIP) {         
    }

    }

Надеюсь, это кому-нибудь пригодится. Еще раз спасибо. Это похоже на взлом, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...