Retry Logic - повторить попытку всего класса, если один из тестов не прошел - селен

Ниже приведены классы, используемые для реализации логики повтора.

Класс 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.

Спасибо!


person user9586244    schedule 08.05.2018    source источник


Ответы (1)


В настоящее время нет возможности достичь того, о чем вы просите.

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

Если подумать, зависимый тест выполняется только потому, что его восходящие зависимости (методы, от которых он зависит) были успешно выполнены. Итак, если в текущем тесте произошел сбой, зачем нужно повторно выполнять уже удовлетворенные восходящие зависимости? Его фишка интуитивно понятна.

Для того, что у вас есть в качестве варианта использования, вы должны просто построить всю логику внутри метода @Test, при этом вы позаботитесь об обработке повторных попыток, а также о повторном вызове всей цепочки в случае сбоев.

В приведенном ниже примере следует пояснить, что

public class SampleTest {

    @Test (retryAnalyzer = TestRetry.class)
    public void orchestrateTest() {
        firsttest();
        secondtest();
        thirdtest();
    }

    public void firsttest() {
        System.out.println();
        TestReporter.assertEquals("Test", "Test", "pass");
    }

    public void secondtest() {
        TestReporter.assertEquals("Test", "Test1", "fail");
    }

    public void thirdtest() {
        TestReporter.assertEquals("Test", "Test", "pass");
    }
}

TestNG не поддерживает вариант использования, который вы ищете в своем вопросе.

Кстати, вы не можете подключиться к IAnnotationTransformer слушателю через аннотацию @Listeners (это явно вызывается в javadocs этого интерфейса). Его можно подключить только через тег <listeners> в xml вашего пакета (или), сославшись на него в файле META-INF\services\org.testng.ITestNGListener (он называется подход к интерфейсу поставщика услуг в Java)

person Krishnan Mahadevan    schedule 09.05.2018
comment
Спасибо за ваше предложение, это действительно полезно. - person user9586244; 09.05.2018
comment
@ user9586244 - примите мой ответ, если это помогло - person Krishnan Mahadevan; 09.05.2018