Как избежать повторного добавления в тестовую аннотацию?

#java #selenium-webdriver #testng

#java #selenium-webdriver #testng

Вопрос:

Я наткнулся на ответ о том, как использовать Retry в Selenium web driver test. Теперь я реализовал класс Retry в разделе утилиты и внутри тестовой аннотации, приведенной следующим образом @Test(retryAnalyzer = Retry.class) . Сейчас это работает нормально, но я хотел бы изменить этот способ, могу ли я использовать Повторную попытку любым другим способом вместо указания аннотации к тесту как @Test(retryAnalyzer = Retry.class) ? Также мне нужно прокомментировать @Test(enabled = true) , Может кто-нибудь, пожалуйста, посоветовать?

utilities/Retry класс

 public class Retry implements IRetryAnalyzer {

     private int retryCount = 0;
     private int maxRetryCount = 2;
     
     public boolean retry(ITestResult result) {
         if(retryCount < maxRetryCount) {
             retryCount    ;
             return true;
         }
         return false;
     }
}
  

tests/RepaymentCalculatorTest

 public class RepaymentCalculatorTest extends BaseTest {
    
    Retry retryTest = new Retry();
    //@Test(enabled = true)
    @Test(retryAnalyzer = Retry.class)
    public void loanRepaymentCalculator() throws InterruptedException {

     // rest of the UI test code added here ....
}
  

Ответ №1:

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

Давайте создадим для этого пользовательский прослушиватель

 public class RetryFailedTestCases implements IRetryAnalyzer, IAnnotationTransformer{

public void transform(ITestAnnotation testannotation, Class testClass, Constructor testConstructor,
        Method testMethod) {
    testannotation.setRetryAnalyzer(RetryFailedTestCases.class);
}

int counter = 0;
int retryLimit = 1; //as per need

@Override
public boolean retry(ITestResult result) {
    
    if(counter < retryLimit)
    {
        counter  ;
        return true;
    }
    
    return false;
   }

 }
  

Теперь добавьте это в testng.xml файл

 <listeners>
  <listener class-name="package.RetryFailedTestCases"/>
</listeners>
  

это просто и полезно, когда мы запускаемся как suite.. в качестве альтернативы мы можем указать класс слушателя поверх каждого класса вместо testng.xml файл

я не уверен, почему явно указано enabled = true ? даже если не @Test выполнить правильно? если вы не хотите выполнять, укажите значение false.

Комментарии:

1. Спасибо .. могу я узнать, что делает метод преобразования? почему мы должны упомянуть Class testClass, Constructor testConstructor, Method testMethod внутри этого?

2. даже если мы не упомянули, что enabled = true @Test будет выполнен, вы правы, добавлять это нет смысла…