代码改变世界

TestNG 失败重试,动态绑定到所有测试方法

2016-05-17 23:36  yoogo  阅读(867)  评论(0编辑  收藏  举报

对一个测试方法需要失败重试,只需实现 IRetryAnalyzer 接口,然后注册到测试方法:

public class Retry implements IRetryAnalyzer {
    int i = 0;
    int max = 4;

    @Override
    public synchronized boolean  retry(ITestResult result) {
        return i++<max;
    }
}

这里允许测试 fail 4次, 把它注册给测试方法:

    @Test(retryAnalyzer = Retry.class)
    public void retryTest() throws InterruptedException {
        //test 
    }

 

通常,在集成测试中,几乎所有测试方法都需要重试,可以通过监听器动态绑定:

    public class RetryListener implements IAnnotationTransformer {

        @Override
        public void transform(ITestAnnotation testannotation, Class testClass,
                              Constructor testConstructor, Method testMethod) {
            IRetryAnalyzer retry = testannotation.getRetryAnalyzer();

            if (retry == null) {
                testannotation.setRetryAnalyzer(Retry.class);
            }

        }
    }

最后把监听器注册到 testng.xml 。

注意: 使用 testNG 6.9.10,亲测 6.9.6 重试接口有逻辑问题。