编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

TestNg 失败自动重试(test connection错误怎么办)

wxchong 2024-10-05 02:20:56 开源技术 12 ℃ 0 评论

基于注解实现简单的失败重试

重写IRetryAnalyzer方法

  // 日志
    public static Logger logger = Logger.getLogger(OverrideIReTry.class);
    //初始化重试次数
    public int retryCount = 0;
    //最大重试次数
    private static int MaxRetryCount;
    static {
        // 失败后次数+1 等于重试4次~
        MaxRetryCount = 10;
        logger.info("重试次数=" + MaxRetryCount);
    }

/*
*
     * @param iTestResult 测试结果
     * @return
*/
    @Override
    public boolean retry(ITestResult iTestResult) {
        if (retryCount <= MaxRetryCount) {
             String message = "running retry for " + iTestResult.getName() + "' on class " +
                    this.getClass().getName() + " Retrying " + retryCount + " times";
            String msg = "执行用例:" + iTestResult.getName() + "第" + retryCount + "次运行失败";
            System.out.println(msg);
            logger.info(msg);
            Reporter.log("RunCount=" + (retryCount + 1));
            retryCount++;
            return true;
        }
        return false;
    }
}

测试类

在test方法中注解 @Test(retryAnalyzer = OverrideIReTry.class)

如果想修改重试的次数可以在实现类中修改

进阶版-动态修改实现重试机制

因为上图这样的方式,如果每个用例都要重试的话,都必须添加上一条注解,若要动态修改我们用例的注解该怎么办呢?testng给出的解决方案是:实现IAnnotationTransformer,并重写方法transform方法

重现监听方法,并基于上图的OverrideIReTry方法,set RetryAnalyzer重试器

public class RetryListener implements IAnnotationTransformer {

    @Override
    public void transform(ITestAnnotation iTestAnnotation, Class aClass,
                          Constructor constructor, Method method) {
        iTestAnnotation.setRetryAnalyzer(OverrideIReTry.class);
    }
}

配置xml文件

执行xml文件测试

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表