为了账号安全,请及时绑定邮箱和手机立即绑定

testNG-失败用例重跑机制

标签:
Ionic

下面简单介绍下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);
    }
}

复制代码

 

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

原文出处:https://www.cnblogs.com/clairejing/p/10215054.html  

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消