Appium 使用 Testng 监听器实现用例运行失败自动重跑时,没有响应该监听,麻烦各位路过的高手指点迷津。

YYGiel · 2015年05月23日 · 最后由 xiaoluosun 回复于 2015年12月16日 · 1517 次阅读
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.log4testng.Logger;

public class TestngRetry implements IRetryAnalyzer{
    private static Logger logger = Logger.getLogger(TestngRetry.class);
    private int retryCount = 1;
    private static int maxRetryCount;
    static {
        //外围文件配置最大运行次数
        maxRetryCount = 3;
}
    @Override
    public boolean retry(ITestResult result) {
        if (retryCount <= maxRetryCount) {
            String message = "running retry for  '" + result.getName() + "' on class " + this.getClass().getName() + " Retrying "
                    + retryCount + " times";
            logger.info(message);
            Reporter.setCurrentTestResult(result);
            Reporter.log("RunCount=" + (retryCount + 1));
            retryCount++;
            return true;
        }
        return false;
    }

}
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;
import org.testng.internal.annotations.IAnnotationTransformer;

public class RetryListener implements IAnnotationTransformer{

    @Override
    public void transform(ITestAnnotation annotation, Class testClass,
            Constructor testConstructor, Method testMethod) {
        IRetryAnalyzer retry = annotation.getRetryAnalyzer();
        if(retry == null){
            annotation.setRetryAnalyzer(TestngRetry.class);
        }

    }

}

具体测试用例如下:

@Test(description="zy.com.Public",retryAnalyzer=RetryListener.class)
  public void testBegin()throws Exception{
      Thread.sleep(5000);
      for(int i=0;i<=6;i++){
          publicMethod.scrollTo(driver);
          Thread.sleep(3000);
      }
      WebElement el = driver.findElement(By.id(id.get("Slpash_begin")));
      Thread.sleep(1000);
          el.click();
          Thread.sleep(4000);
  }

运行之后,该监听没有响应,不知道是什么原因,麻烦各位路过的高手指点迷津。

共收到 5 条回复 时间 点赞

TestNG 的 xml 文件配置了你的监听器了么 贴出来看看

2楼 已删除

我想问下,失败重跑只能是针对每一个 test 设置,不能针对整个类或者在 xml 设置吗?

设置到 xml 里面就是针对整个类

设置到 testng 的 xml 中:

<suite name="回归测试">
    <listeners>
        <listener class-name="RetryListener" /> 
    </listeners>
</suite>

错的地方应该是这个:

retryAnalyzer=RetryListener.class, 这个应该是不对的他指的是retryAnalyzer应该是TestngRetry这个类

看一下如下的代码:

IRetryAnalyzer retry = annotation.getRetryAnalyzer();  //获取在test注解里面配置的retryAnalyzer的类,注意不是监听器
        if(retry == null){
            annotation.setRetryAnalyzer(TestngRetry.class);
        }

监听器需要在 testng 文件中加

#5 楼 @simonpatrick 你好,我写的失败重跑,在 testng.xml 里配置 listener 了,但还是对失败的方法重新运行,整个 class 并没有。还需要设置什么吗? 可以加下你的 QQ 吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册