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

Фотография

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

dataprovider ITestResult failure.count IRetryAnalyzerWithSkip IRetryAnalyzer

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 Unstop

Unstop

    Новый участник

  • Members
  • Pip
  • 2 сообщений


Отправлено 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);
         }
    }
}

  • 0

#2 aksas

aksas

    Активный участник

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 15 января 2016 - 14:44

мне кажется вам надо в onTestSuccess устанавливать retryCount в 0.


  • 0

#3 Unstop

Unstop

    Новый участник

  • Members
  • Pip
  • 2 сообщений


Отправлено 15 января 2016 - 15:15

мне кажется вам надо в onTestSuccess устанавливать retryCount в 0.

по завершению теста выполняется Invoker.class (testNG)

в котором есть условие 

IRetryAnalyzer retryAnalyzer = testMethod.getRetryAnalyzer();

boolean willRetry = retryAnalyzer != null && status == ITestResult.FAILURE && failure.instances != null && retryAnalyzer.retry(testResult);

 

которое, как я понял вызывает RetryAnalyzer.retry только при фейле теста, следовательно при Success он туда (RetryAnalyzer.class) даже не будет заходить

 

зы. значит счетчик тут не причем

 

если капнуть глубже... то после фейла теста( в этом же файте invoker.class) происходит "failure.count++"

т.е. после фела теста "failure.count=1"(изначально 0) - что скорее всего и говорит запускать тесты еще раз

и при прохождении теста со статусом success мы имеем failure.count=1 (он не сбрасывается на 0), а следовательно пройденный тест запускается по новой... вот как эту переменную бы перезаписать/сбросить на 0


  • 0

#4 Loka

Loka

    Новый участник

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Савенок Глеб Олегович

Отправлено 11 мая 2016 - 17:03

 

 

 вот как эту переменную бы перезаписать/сбросить на 0

Добрый день, столкнулся со схожей проблемой.

Удалось ли вам ее решить?

Схожий фунционал у нас перестал работать после обновления версии тест нг  с 6.8.5.


  • 0



Темы с аналогичным тегами dataprovider, ITestResult, failure.count, IRetryAnalyzerWithSkip, IRetryAnalyzer

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных