在自动化测试执行过程中,难免会出现因为执行机的环境或者延时等问题导致的用例失败问题,对于这些非功能问题导致的用例执行失败,我们希望这个用例能够重新执行一次或几次,从而尽量让最终的测试结果是功能相关的fail。
本框架实现用例执行失败后重跑的方法如下:
实现 IRetryAnalyzer接口,重写里面的retry方法。
然后通过注解转换器在每一个testcase后面加上 retryAnalyzer标签(retryAnalyzer = MyRetry.class)。
util包下创建两个类Retry和RetryListener,代码如下:
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import util.enums.ConfigItem;/**
* 失败后重新执行case.
*/
public class Retry implements IRetryAnalyzer{
private int retryCount = 1;
private static int maxRetryCount =2;//重试次数
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.testng.IAnnotationTransformer;
import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;
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(Retry.class);
}
}
}
最后在testng的.xml文件中加入
<listeners>
<listener class-name="util.RetryListener"/>
</listeners>