1.创建一个类,继承 IRetryAnalyzer 接口并实现 retry 方法,实现重跑逻辑
public class Retry implements IRetryAnalyzer {
private int retryCount = 1;
@Override
public boolean retry(ITestResult result) {
// 控制失败跑几次
int maxRetryCount = 3;
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
}
2.用例添加注解即可实现单个用例重跑
3.也可以通过全局设置实现所有用例均失败重跑:创建一个类,继承 IAnnotationTransformer接口并实现 transform方法
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);
}
}
}
4.在xml文件中添加listener,需要注意IAnnotationTransformer 监听器不能通过测试类文件中@Listeners添加
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="xxx" parallel="tests" verbose="10">
<listeners>
<listener class-name="com.test.retry.RetryListener"/>
</listeners>
<test verbose ="10" name="xxx">
<classes>
<class name="xxx">
<methods>
<include name="xxxxx" />
</methods>
</class>
</classes>
</test>
</suite>
5.配置完成后运行用例时会自动保留最后一次运行结果,前几次结果均会自动忽略,不需要额外配置(笔者TestNg版本6.14.2)