Ниже приведены классы, используемые для реализации логики повтора.
Класс TestRetry:
public class TestRetry implements IRetryAnalyzer {
int counter=0;
int retryLimit=2;
@Override
public boolean retry(ITestResult result) {
if (counter < retryLimit) {
TestReporter.logStep("Retrying Test " +result.getName()+" for number of times: "+(counter+1));
counter++;
return true;
}
return false;
}
Класс RetryListener:
public class RetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
// TODO Auto-generated method stub
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(TestRetry.class);
}
}}
Образец теста:
@Listeners(RetryListener.class)
public class SampleTest {
@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
for (ITestNGMethod method : context.getAllTestMethods()) {
method.setRetryAnalyzer(new TestRetry());
}
}
@Test(priority=0)
public void firsttest() {
System.out.println();
TestReporter.assertEquals("Test", "Test", "pass");
}
@Test(priority=1, dependsOnMethods="firsttest")
public void secondtest() {
TestReporter.assertEquals("Test", "Test1", "fail");
}
@Test(priority=2,dependsOnMethods="secondtest")
public void thirdtest() {
TestReporter.assertEquals("Test", "Test", "pass");
}
}
Когда я выполняю вышеуказанный тест, следующий результат: firsttest выполняется и проходит secondtest, зависит от firsttest и выполняется, его не удалось - повторили 3 раза и снова не удалось.
Результат достигнут, как и ожидалось.
Вопрос: Так как тесты зависимые. Если один из тестов терпит неудачу, я хочу сначала выполнить весь класс. есть способ сделать это?
Примеры: Если вторая проверка не удалась, я хочу снова выполнить весь класс SampleTest.
Спасибо!