testng失败重跑
重跑失败场景
1.要添加两个文件
背景:因为这里只是想单独展示失败的重跑的案例,所以先暂时把app这块的运行注释掉,只跑一个简单的demo,就一个简单类,类中就3个测试方法,失败重跑的原理是,运行方法是成功状态,就不重跑,如果是失败的,就在继续执行方法,直到他设置的最大重跑次数时就停止,要先添加这个一个类,实现IRetryAnalyzer 这个方法,以下就是一个retry 类
失败重跑代码展示
package until;
import org.apache.log4j.Logger;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class retry implements IRetryAnalyzer{
private static Logger logger = Logger.getLogger(retry.class);
private int retryCount = 1;
private static int maxRetryCount = 3; #控制失败跑几次
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
2.这个类RetryListener.Java主要是实现IAnnotationTransformer 方法
package until;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.apache.tools.ant.taskdefs.Retry;
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); #注意这里的类名一定要写对
}
}
}
3.在xml文件中配置监听器, 监听的是RetryListener这个类
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="SuiteName" >
<listeners>
<listener class-name="until.RetryListener" />
</listeners>
<test name="version" preserve-order="true">
<classes>
<class name="com.test.appuimtest.rosewholePC">
<methods>
<include name="chooseNew"/>
</methods>
</class>
</classes>
</test>
</suite>
目前的目录结构是这样,但是关键是是retry.java, RetryListener.java, rosewholepc.java:
3.实现:
在rosewholepc中写入的方法就1个为
查看执行效果,运行了三次
以为这样就完了,其实没有,这个时候执行你会发现他会记录你3次结果数据,但是其实我们只想记录最后1次的数据,因为做UI你会发现,因为网络原因会导致第一次失败,第二次就正常了,所以我们增加重跑就可以减少脚本的误报的情况,我们只要采取最后一次结果就好了,
4.解决这个问题我还需要那在TestngListener这个类里面的finnish监听里面加上这段代码就可以了
执行类中的Xml文件加上这两个监听,RetryListener失败重跑
执行效果
有人中提到是去实现ITestListener接口, IestListenerAdapter 已经实现 ITestListener,并且提供了一些有用的方法,比如分别获取所有成功失败跳过三种测试结果的测试方法的方法,并且 ITestListner 中有很多方法而 TestListenerAdapter 已给出了默认实现。因此,继承 TestListenerAdapter 后,便只需关注需要修改的方法。因为我们最开始用到的也是TestListenerAdapter,所以在onFinish中直接添加以上代码就可以了
@Override
public void onFinish(ITestContext testContext) {
super.onFinish(testContext);
//失败后重跑,记录最后一次结果
Iterator<ITestResult> listOfFailedTests = testContext.getFailedTests().getAllResults().iterator();
while (listOfFailedTests.hasNext()) {
ITestResult failedTest = listOfFailedTests.next();
ITestNGMethod method = failedTest.getMethod();
if (testContext.getFailedTests().getResults(method).size() > 1) {
listOfFailedTests.remove();
} else {
if (testContext.getPassedTests().getResults(method).size() > 0) {
listOfFailedTests.remove();
}
}
}
}
我在添加了2个案例
执行效果如下
|
作者:做梦的人(小姐姐) 出处:https://www.cnblogs.com/chongyou/ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 微信号:18582559217 |

![clip_image001[4] clip_image001[4]](http://images2017.cnblogs.com/blog/597371/201709/597371-20170921093458618-426724357.png)
![clip_image003[4] clip_image003[4]](http://images2017.cnblogs.com/blog/597371/201709/597371-20170921093500259-1906462994.jpg)
![clip_image004[4] clip_image004[4]](http://images2017.cnblogs.com/blog/597371/201709/597371-20170921093501446-669029933.png)
![clip_image007[4] clip_image007[4]](http://images2017.cnblogs.com/blog/597371/201709/597371-20170921093505728-2118967909.jpg)
![clip_image008[4] clip_image008[4]](http://images2017.cnblogs.com/blog/597371/201709/597371-20170921093507181-1778756230.png)
![clip_image009[10] clip_image009[10]](http://images2017.cnblogs.com/blog/597371/201709/597371-20170921093508040-68415013.png)
浙公网安备 33010602011771号