Testng 的重试机制 在不写代码的情况没有提供可配置方式,需要自己实现其提供的接口,并以监听器的方式提供出来才可使用,具体步骤如下:
1.首先需要实现 IRetryAnalyzer接口
package ec.qa.autotest.ui.testng.listener;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.Reporter;
import ec.qa.autotest.ui.constants.CommonConstants;
import ec.qa.autotest.ui.testbase.TestBase;
/**
* @author xin.wang
*实现testng接口实现用例失败重跑
*/
public class RetryToRunCase implements IRetryAnalyzer{
private int retryCount = 1;
private static int maxRetryCount;
public int getRetryCount() {
return retryCount;
}
public static int getMaxRetryCount() {
return maxRetryCount;
}
@SuppressWarnings("static-access")
public RetryToRunCase(){
this.maxRetryCount = CommonConstants.RETRY_COUNT;
}
public boolean retry(ITestResult result) {
if (retryCount <= maxRetryCount) {
Reporter.setCurrentTestResult(result);
TestBase.success = false;
retryCount++;
return true;
}
return false;
}
}
2.需要实现testNg监听器的2个接口,onFinish()方法的代码是为了在测试结果报告中剔除掉失败后重试成功的结果.
package ec.qa.autotest.ui.testng.listener;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.testng.IAnnotationTransformer;
import org.testng.IRetryAnalyzer;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import org.testng.annotations.ITestAnnotation;
/**
* @author xin.wang
* 用例失败重跑的监听器
*/
public class TestngRetryListener implements IAnnotationTransformer,ITestListener {
@SuppressWarnings("rawtypes")
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {
IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(RetryToRunCase.class);
}
}
public void onFinish(ITestContext testContext) {
ArrayList<ITestResult> testsToBeRemoved = new ArrayList<ITestResult>();
Set<Integer> passedTestIds = new HashSet<Integer>();
for (ITestResult passedTest : testContext.getPass