下面简单介绍下testNG的失败重跑的实现方法:

1.首先编写一个类,实现IRetryAnalyzer类,重写其中的retry方法。

public class TestNGRetry implements IRetryAnalyzer {

    private int retryCount = 1;//设置当前的重跑次数
private static final int maxRetryCount = 3;//设置最大重跑次数,定义为常量。 @Override
public boolean retry(ITestResult iTestResult) {
if (retryCount<=maxRetryCount){
System.out.println("it's the "+retryCount+"times retry.And the current case is"+iTestResult.getName());//输出当前的重跑次数以及当前的正在重跑的用例名称。 retryCount++;//重跑之后,次数+1
return true;//当return true之后,代表继续重跑
}
return false;//return false之后,代表停止重跑
} public void reSetCount(){
retryCount=1;
} }

在完成这个方法的重写之后,其实已经可以实现失败用例重跑了。前提是,用例上注解设置如下:

@Test(retryAnalyzer= TestNGRetry.class)
当然,我们是期望所有的用例执行失败之后,都可以重跑,所以就需要考虑执行时动态修改我们用例的注解。testNG已经给实现了,我们只
需要编写一个类去实现IAnnotationTransformer,并重写方法transform

public class RetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
IRetryAnalyzer retryAnalyzer = iTestAnnotation.getRetryAnalyzer();//获取到retryAnalyzer的注解
if (retryAnalyzer == null){ iTestAnnotation.setRetryAnalyzer(TestNGRetry.class); } } }//如果注解为空,则动态设置注解,以确保用例失败后重跑。
在testNG的xml配置文件中配置上述监听器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="NeuronIOSSystemTest" parallel="true"
thread-count="2">
<listeners>
<listener
class-name="com.neuron.util.TestRunnerListener" />
<listener class-name="com.nervos.neuron.retry.RetryListener"/>
</listeners> <test verbose="2" name="Neuron iOS App System Test"
preserve-order="true" enabled="true">
<classes>
<class name="com.xxx.xxx.xxxTest" /> </classes>
</test>
</suite>

综上,失败用例重跑机制基本实现。但是在执行的时候,会发现一个问题:

使用了dataProvider并且提供多个数据的时候,这个重跑次数是共用的,就会导致dataProvider提供的第一个数据执行失败后,重跑3次。如果提供的第二个数据再次失败了,就不会再重跑了。

或者dataProvider提供的第一个数据执行失败后,重跑第一次的时候又成功了。提供的第二个数据再次失败了,就只重跑2次。

所以,在用例执行失败和用例执行成功后,都需要重置当前的重跑次数。

public class TestRunnerListener extends TestListenerAdapter {
@Override
public void onTestSuccess(ITestResult tr) {
TestNGRetry retryAnalyzer = (TestNGRetry) tr.getMethod().getRetryAnalyzer();
retryAnalyzer.reSetCount();
finish(tr);
} @Override
public void onTestFailure(ITestResult tr) {
     TestNGRetry retryAnalyzer = (TestNGRetry) tr.getMethod().getRetryAnalyzer();
retryAnalyzer.reSetCount();
finish(tr);
}
}

以上,完全实现了失败用例的重跑机制。


testNG-失败用例重跑机制的更多相关文章

  1. RobotFramework与Jenkins集成后失败用例重跑

    Jenkins的执行Windows批处理命令填写如下: call pybot.bat -i 1adsInterface 01_测试用例\接口测试用例\adsInterface.txt call pyb ...

  2. testng增加失败重跑机制

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

  3. TestNG失败用例自动截图

    参考:https://blog.csdn.net/wangxin1982314/article/details/50247245 1. 首先写一个截屏方法 public class ScreenSho ...

  4. testNG-失败用例重跑方法探究

    实现IRetryAnalyzer类,重写其中的retry方法public class TestNGRetry implements IRetryAnalyzer { private int retry ...

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

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

  6. TestNG测试用例重跑详解及实践优化

    测试用例运行稳定性是自动化质量的一个重要指标,在运行中需要尽可能的剔除非bug造成的测试用例执行失败,对于失败用例进行重跑是常用策略之一.一种重跑策略是所有用例运行结束后对失败用例重跑,另一种重跑策略 ...

  7. Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  8. 如何解决testng执行用例失败自动重跑问题

    注: 以下内容引自 http://blog.csdn.net/MenofGod/article/details/72846649 看过几个相关问题的帖子,内容类似,不过这篇解决问题的步骤和代码比较清晰 ...

  9. TestNG入门教程-12-Java代码执行testng.xml和失败后重跑

    前面我们都在IDEA上右键testng.xml文件来运行testng用例,这个在编写测试用例过程是 可以这么做,但是,如果测试用例写完了,也是这么做吗?有没有什么方法,例如自动化去实现.测试脚本维护后 ...

随机推荐

  1. VSCode调试C++

    在ubuntu下调试C++ 本人觉得VSCode比较好用. 步骤如下: 1. 编写.cpp,.h文件 自行完成自己的程序. 2. 编写CMakeLists.txt.下面是一个比较好用的模板. 根目录为 ...

  2. 搞懂JVM类加载机制

    有这样一道面试题: class Singleton{ private static Singleton singleton = new Singleton(); public static int v ...

  3. linux 下线程错误查找,与线程分析命令

    一. 使用top和jstack查找线程错误 我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu ...

  4. CentOS查看卸载openjdk

    1.查看openjdk版本 java -versionjava version "1.7.0_51" OpenJDK Runtime Environment (rhel-2.4.5 ...

  5. 用JavaScript中lodash编写双色球

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. eclipse中svn插件装好后出现"位置错误"的处理

    错误现象: 验证位置时发生错误:"org.apache.subversion.javahl.ClientException:svn:E210004: Number is larger tha ...

  7. Qt绘制动态曲线

    首先*.pro文件中加一句 QT += charts 然后 mainwindow.cpp文件如下: #include "mainwindow.h" #include "u ...

  8. Mysql-数据的完整性约束

    一 .介绍 二 .not null与default 三 .unique 四 .primary key 五 .auto_increment 六 .foreign key 一 .介绍 约束条件与数据类型的 ...

  9. linux、SMART、Shell的学习

    Linux指令 useradd 添加用户 添加用户 -d 添加用户路径 -e 制定密码有效时间 -G -g 指定用户所属组 -c 指定一段用户描述 -s Shell文件指定用户的登录Shell -u ...

  10. 【vue】------浅谈vue------【William】

    ### Vue > Vue是一个前端js框架,由尤雨溪开发,是个人项目 Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它 ...