zoukankan      html  css  js  c++  java
  • testng对执行失败的用例,再次执行

        前段时间在网络上看到通过重写TestNG的接口,可以再次执行失败的测试用例,于是学习了,我之前的做法是当自己的脚本中碰到异常,就自动调用方法本身来达到再次执行用例的目的,这个过程中有设定重试的次数

        对于TestNG,首先重写接口IRetryAnalyzer,重写该接口中的retry方法,自定义需要重试的次数maxReTryNum,如果一个用例失败,自动进入retry方法,在此方法中判断已经重试的次数是否小于等于maxReTryNum,如果是,则返回true,则自动再次执行失败的用例,如果是失败的用例再次执行还是失败,那么还是自动调用retry方法,直到到重试次数大于设定的maxReTryNum了,则返回false,那么系统就是判定该方法失败了

    public class OverrideIReTry implements IRetryAnalyzer {
        public static Logger logger=Logger.getLogger(OverrideIReTry.class);
        public int initReTryNum=1;
        public int maxReTryNum=3;
        @Override
        public boolean retry(ITestResult iTestResult) {
            if(initReTryNum<=maxReTryNum){
                String message="方法<"+iTestResult.getName()+">执行失败,重试第"+initReTryNum+"次";
                logger.info(message);
                Reporter.setCurrentTestResult(iTestResult);
                Reporter.log(message);
                initReTryNum++;
                return true;
            }
            return false;
        }
    }
        当我们重写了TestNG的IRetryAnalyzer 接口,那么就需要让系统调用我们重写的接口,需要让TestNG调用,还需要对TestNG.xml中的注解接口进行重写。先判断TestNG.xml中是否有重试分析器,如果没有,则调用我们自己重写类
    public class OverrideIAnnotationTransformer implements IAnnotationTransformer{
        @Override
        public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
            IRetryAnalyzer iRetryAnalyzer= iTestAnnotation.getRetryAnalyzer();
            if(iRetryAnalyzer==null){
                iTestAnnotation.setRetryAnalyzer(OverrideIReTry.class);
            }
        }
    }
     
        我们可以定义了2个方法test1和test2,代码如下,其中test1方法执行是正确,test2执行一定是会报异常的,那么预期的结果是,test2方法失败后,会被再次执行3次
    public class ReTryTest {
        @Test
        public void test1(){
            System.out.println(1/1);
        }
        @Test
        public void test2(){
            System.out.println(1/0);
        }
    }
        此时,我们就可以在TestNG.xml中直接声明监听重试的函数了,并且调用test1和test2来验证重写IRetryAnalyzer是否会对失败的用例重新执行
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="casual">
        <listeners>
            <listener class-name="reTry.OverrideIAnnotationTransformer"></listener>
        </listeners>
        <test name="test">
            <classes>
                <class name="reTry.ReTryTest">
                    <methods>
                        <include name="test1"/>
                        <include name="test2"/>
                    </methods>
                </class>
            </classes>
        </test>
    </suite>
        直接编译后,我们可以看到log中是显示这个的,说明了我们的重写是可以正确的
    [INFO ] main 2015-08-29 09:55:13,030                  reTry.OverrideIReTry     - 方法<test2>执行失败,重试第1次
    [INFO ] main 2015-08-29 09:55:13,031                  reTry.OverrideIReTry     - 方法<test2>执行失败,重试第2次
    [INFO ] main 2015-08-29 09:55:13,032                  reTry.OverrideIReTry     - 方法<test2>执行失败,重试第3次
  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/xxyBlogs/p/6151765.html
Copyright © 2011-2022 走看看