Доброго времени суток!
Связка: 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); } } }