Перейти к содержимому

Unstop

Регистрация: 23 окт 2011
Offline Активность: 11 ноя 2022 12:42
-----

Мои темы

Перезапуск упавших тестов IRetryAnalyzer в связке с dataprovider

15 января 2016 - 12:41

Доброго времени суток!

Связка: Testng+eclipse+Maven+jenkins

Есть тест, листенер, и аналайзер. Необходимо перезапускать упавший тест "n" раз, если он не выполнился то выдавать ошибку и продолжать тест со следующим параметром @dataprovider
 
Результаты прохождения тестов:

-первый тест запускается один раз - результат - success

-второй тест запускается один раз - результат - success

-третий тест запускается 2 раза - результат - skip,failed
-четвертый тест запускается 2 раза - результат - success,success

зы. пятый и так далее тесты будут запускаться все по 2 раза в не зависимости от статуса. А должны при статусе success отрабатывать всего один раз (как при выполнении первых двух тестов)

 

Вопрос в следующем... что надо перезаписать(прописать) в ITestResult (public void onTestSuccess / onTestFailure) для моего RetryListener.class чтобы после успешного теста, запускался следующий объект из dataprovider?

@Listeners({RetryListener.class})
public class simpletest   {
WebDriver driver;
String baseURL = "http://localhost/";
 
@DataProvider 
private Object[][] addUrl() {
return new Object[][] {
{"page1"},
{"page2"},
{"page3"},
{"page4"},
};
}

@Test(dataProvider="addUrl",retryAnalyzer=RetryAnalyzer.class)            //Сам тест
driver = new FirefoxDriver();
driver.get(baseURL+addUrl);
...............


Если тест сфейлился то перезапускаем его столько раз (сколько указано в maxRetryCount=2)

public class RetryAnalyzer implements IRetryAnalyzerWithSkip {
    private int retryCount = 0;
    private int maxRetryCount = 2;


    public boolean retry(ITestResult result) {


        if (retryCount < maxRetryCount) {
            retryCount++;
            return true;
        }
        return false;
    }


    @Override
    public boolean isRetryable() {
        return retryCount < maxRetryCount;
    }
public class RetryListener extends TestListenerAdapter {
 public void onTestFailure(ITestResult tr) { if (retryAnalyzer == null || !(retryAnalyzer instanceof IRetryAnalyzerWithSkip)) {
          super.onTestFailure(tr);
        } else if (((IRetryAnalyzerWithSkip) retryAnalyzer).isRetryable()) {
            tr.setStatus(ITestResult.SKIP);
            super.onTestSkipped(tr);
        } else {
          super.onTestFailure(tr);
         }
    }
}