新建包TestngRetry , implements IRetryAnalyzer实现重跑功能
implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.Reporter;
import com.test.utils.PropertiesDataProvider;
public class TestngRetry implements IRetryAnalyzer {
private int retryCount = 1;
private static int maxRetryCount;
static {
maxRetryCount = 2;//重跑的次数
String sourcecodedir = src;//源码路径
String sourcecodeencoding = UTF-8;//源代码编码
}
public boolean retry(ITestResult result) {
if (retryCount <= maxRetryCount) {
String message = result.getName()+" 测试用例执行失败!即将重跑第 ["+ retryCount + "]次 :class [" + result.getTestClass().getName();
logger.info(message);
Reporter.setCurrentTestResult(result);
Reporter.log("RunCount=" + (retryCount + 1));
retryCount++;
return true;
}
return false;
}
public static int getMaxRetryCount() {
return maxRetryCount;
}
public int getRetryCount() {
return retryCount;
}
}
新建RetryListener,implements IAnnotationTransformer
重写transform方法,读取TestngRetry的重跑设置
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 {
@SuppressWarnings("rawtypes")
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(TestngRetry.class);
}
}
}
最后在xml文件中加入监听器RetryListener
<listeners>
<listener class-name="com.test.listener.RetryListener" />
</listeners>