重跑失败场景

1.要添加两个文件

背景:因为这里只是想单独展示失败的重跑的案例,所以先暂时把app这块的运行注释掉,只跑一个简单的demo,就一个简单类,类中就3个测试方法,失败重跑的原理是,运行方法是成功状态,就不重跑,如果是失败的,就在继续执行方法,直到他设置的最大重跑次数时就停止,要先添加这个一个类,实现IRetryAnalyzer 这个方法,以下就是一个retry 类

失败重跑代码展示

  1. package until;
  2. import org.apache.log4j.Logger;
  3. import org.testng.IRetryAnalyzer;
  4. import org.testng.ITestResult;
  5.  
  6. public class retry implements IRetryAnalyzer{
  7.  
  8. private static Logger logger = Logger.getLogger(retry.class);
  9. private int retryCount = 1;
  10. private static int maxRetryCount = 3; #控制失败跑几次
  11.  
  12. public boolean retry(ITestResult result) {
  13. if (retryCount < maxRetryCount) {
  14. retryCount++;
  15. return true;
  16. }
  17. return false;
  18. }

2.这个类RetryListener.Java主要是实现IAnnotationTransformer 方法

  1. package until;
  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Method;
  4. import org.apache.tools.ant.taskdefs.Retry;
  5. import org.testng.IAnnotationTransformer;
  6. import org.testng.IRetryAnalyzer;
  7. import org.testng.annotations.ITestAnnotation;
  8. public class RetryListener implements IAnnotationTransformer {
  9. @Override
  10. public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor,
  11. Method testMethod) {
  12. IRetryAnalyzer retry = annotation.getRetryAnalyzer();
  13. if (retry == null) {
  14. annotation.setRetryAnalyzer(retry.class); #注意这里的类名一定要写对
  15. }
  16.  
  17. }
  18.  
  19. }

3.在xml文件中配置监听器, 监听的是RetryListener这个类

  1. <?xml version="1.0" encoding="gb2312"?>
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
  3.  
  4. <suite name="SuiteName" >
  5. <listeners>
  6. <listener class-name="until.RetryListener" />
  7. </listeners>
  8. <test name="version" preserve-order="true">
  9. <classes>
  10. <class name="com.test.appuimtest.rosewholePC">
  11. <methods>
  12. <include name="chooseNew"/>
  13. </methods>
  14. </class>
  15. </classes>
  16. </test>
  17. </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中直接添加以上代码就可以了

  1. @Override
  2. public void onFinish(ITestContext testContext) {
  3. super.onFinish(testContext);
  4. //失败后重跑,记录最后一次结果
  5. Iterator<ITestResult> listOfFailedTests = testContext.getFailedTests().getAllResults().iterator();
  6. while (listOfFailedTests.hasNext()) {
  7. ITestResult failedTest = listOfFailedTests.next();
  8. ITestNGMethod method = failedTest.getMethod();
  9. if (testContext.getFailedTests().getResults(method).size() > 1) {
  10. listOfFailedTests.remove();
  11. } else {
  12. if (testContext.getPassedTests().getResults(method).size() > 0) {
  13. listOfFailedTests.remove();
  14. }
  15. }
  16. }
  17. }

  

我在添加了2个案例

执行效果如下

testng失败重跑的更多相关文章

  1. TestNg失败重跑—解决使用 dataProvider 参数化用例次数冲突问题

    问题背景 在使用 testng 执行 UI 自动化用例时,由于 UI自动化的不稳定性,我们在测试的时候,往往会加上失败重跑机制.在不使用 @DataProvider 提供用例参数化时,是不会有什么问题 ...

  2. testng增加失败重跑机制

    注: 以下内容引自 http://www.yeetrack.com/?p=1015 testng增加失败重跑机制 Posted on 2014 年 10 月 31 日 使用Testng框架搭建自动测试 ...

  3. testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件

    生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...

  4. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  5. RF实现多次失败重跑结果合并的基础方法和优化方法

    实现思路:通过分次执行失败案例重跑,然后通过结果文件合并命令实现多次失败重跑结果文件的合并,并输出合并后的log和report文件: 说明:具体失败案例重跑命令和结果文件合并命令请参考本博客其他相关章 ...

  6. python3 unittest框架失败重跑加截图支持python2,python3

    github源码地址下载:https://github.com/GoverSky/HTMLTestRunner_cn.git 解压文件后取出/HTMLTestRunner_cn.py文件丢进C:\Py ...

  7. pytest 失败重跑截图

    1.环境准备 /*@param: 作者:流浪的python Date:2019/01/19 env:python 3.7(由于3.0-3.5以下部分pytest可能有部分兼容问题安装建议2.7-2.9 ...

  8. pytest文档8-html报告报错截图+失败重跑

    前言 做web自动化的小伙伴应该都希望在html报告中展示失败后的截图,提升报告的档次,pytest-html也可以生成带截图的报告. conftest.py 1.失败截图可以写到conftest.p ...

  9. pytest失败重跑

    一.说明 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例 ...

随机推荐

  1. linux / OS 杀死进程

    1,查询端口 sudo netstat -apn | grep 端口号 2,杀死进程kill -9 应用程序进程id

  2. LeeCode(No4 - Median of Two Sorted Arrays)

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  3. hive默认配置 .hiverc

    -- 切换数据库 use database_name; -- 优化本地查询 set hive.fetch.task.conversion=more; -- 设置hive的计算引擎为spark set ...

  4. docker(3)docker下的centos7下安装jdk

    1.将jdk-8u65-linux-x64.tar.gz文件传到docker的宿主机上 rz 2.将宿主机上的jdk-8u65-linux-x64.tar.gz复制到centos7的容器下 #在宿主机 ...

  5. Smarty保留变量信息

    对php里边的超级全局数组变量信息的使用 例如:$_GET.$_POST.$_SESSION.$_COOKIE.$_REQUEST.$_SERVER.$_ENV.$GLOBALS.$_FILES.常量 ...

  6. 网页console console.log 用法 Chrome F12

    #########sample 0 https://www.cnblogs.com/xiaozong/p/4961929.html https://blog.csdn.net/shanliangliu ...

  7. 操作集合的线程安全考虑——java

    运行场景:多个线程同时调用ArrayList存放元素 两个线程A和B,在A线程调用的时候,list中暂时还未有元素存在,此时,list的size值为0,同时A在添加元素的时候,add进了一个元素,此时 ...

  8. CEF和JS交互

    CefClient提供所有浏览器事件处理的接口,重写CefClient类中的方法处理浏览器事件:包括Browser的生命周期,右键菜单,对话框,状态通知显示,下载事件,拖曳事件,焦点事件,键盘事件,离 ...

  9. Java基本语法_循环练习系列(一)——模拟双色球

    目前正在自学java中,学完循环这一块,简单写几个例子,使之更加熟练掌握循环语句和条件语句. 简述一下要这段代码要完成的任务: /*有33个红色球,16个蓝色球. 在33个里选6个 ,16个里选1个. ...

  10. Python 多继承(新式类) 的mro算法

    转载自:http://www.cnblogs.com/panyinghua/p/3283831.html mro即method resolution order,主要用于在多继承时判断调的属性的路径( ...