zoukankan      html  css  js  c++  java
  • TestNG系列(四)TestNG监听器

    前言

    监听器实际上是一些预定义的java接口,用户创建这些接口的实现类(即implements某监听接口,并实现里面的方法),并加入到testng中,testng便会在运行的不同时刻调用这些类中你自定义实现的接口方法,从而实现定制额外的功能;

    一、IHookable:TestNG在测试方法执行前执行,常用于授权检查。

    IHookable实现类

    public class IHookableImp implements IHookable {
        @Override
        public void run(IHookCallBack iHookCallBack, ITestResult iTestResult) {
            ConstructorOrMethod method = iTestResult.getMethod().getConstructorOrMethod();
            String name = method.getName();
            System.out.println("测试method是 "+name);
            System.out.println("开始执行~");
            //测试用例开始执行
            iHookCallBack.runTestMethod(iTestResult); 
            System.out.println("结束~");
        }
    }

    测试用例

    @Listeners(IHookableImp.class)
    public class Test_case {
        @Test
        public void case1(){
            System.out.println("case1方法");
        }
    }

    执行结果:

    二、IINvokedmethodl:TestNG在调用方法前、后启用该监听器,常用于日志的采集。

    IInvokedMethodListener实现类

    public class IInvokedMethodListenerImp implements IInvokedMethodListener {
        //TestNG在调用方法前、后启用该监听器,常用于日志的采集。
        @Override
        public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
            // TODO Auto-generated method stub
            //获取执行的@Test方法
            System.out.println(iTestResult.getName());
        }
        @Override
        public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
            // TODO Auto-generated method stub
            //获取执行的@Test方法
            System.out.println(iTestResult.getName());
        }
    }

    测试用例

    @Listeners(IInvokedMethodListenerImp.class)
    public class Test_case {
        @Test
        public void case1(){
            System.out.println("执行了case1测试方法");
        }
    }

    测试结果

    三、IReporter:在测试方法执行后执行,通过遍历 xmlSuites 和 suites 能够获取所有测试方法的信息以及测试结果,后续可用于自定义测试报告。

    IReporter实现类

    public class IReporterImp implements IReporter {
        //通过遍历 xmlSuites 和 suites 能够获取所有测试方法的信息以及测试结果,后续可用于自定义测试报告。
        @Override
        public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> iSuites, String outputDirectory) {
            
            for(ISuite iSuite:iSuites){
                Map<String,ISuiteResult> iSuiteResultMap = iSuite.getResults();
                //获取所有执行的方法
                System.out.println("所有执行的方法:"+iSuite.getAllInvokedMethods());
                //获取所有@Test标注的方法
                System.out.println("获取所有@Test标注的方法:"+iSuite.getAllMethods());
                //获取suite标签的name属性
                System.out.println("suiteName:"+iSuite.getName());
                //获取测试报告的输出路径
                System.out.println("输出路径:"+iSuite.getOutputDirectory());
                System.out.println("报告路径:"+outputDirectory);
                //获取并发方式
                System.out.println("并发方式:"+iSuite.getParallel());
                
                for(ISuiteResult iSuiteResult:iSuiteResultMap.values()){
                    ITestContext iTestContext = iSuiteResult.getTestContext();
                    IResultMap iResultMap = iTestContext.getPassedTests();
                    
                    Set<ITestResult> iTestResultset = iResultMap.getAllResults();
                    for(ITestResult iTestResult:iTestResultset){
                        //获取执行的Test方法
                        System.out.println("测试方法:"+iTestResult.getName());
                        //获取执行结果
                        System.out.println("执行结果(1-成功,2-失败,3-skip):"+iTestResult.getStatus());
                        //获取开始执行的时间
                        System.out.println("开始时间:"+iTestResult.getStartMillis());
                        //获取结束执行的时间
                        System.out.println("结束时间:"+iTestResult.getEndMillis());
                    }
                    
                }
                
            }
            
        }
    
    }

    测试用例

    @Listeners(IReporterImp.class)
    public class Test_case {
        @Test
        public void case1(){
            System.out.println("执行了case1测试方法");
        }
    }

    运行结果

    四、Testlisteneradapter:执行测试方法后执行,主要用于记录log信息,根据执行结果的不同调用不同的方法。

    实现类

    public class TestListenerAdapterImp extends TestListenerAdapter {
        private int m_count = 0;
        
        @Override
        public void onTestFailure(ITestResult tr) {
            log(tr.getName()+ "--Test method failed
    ");
        }
         
        @Override
        public void onTestSkipped(ITestResult tr) {
            log(tr.getName()+ "--Test method skipped
    ");
        }
         
        @Override
        public void onTestSuccess(ITestResult tr) {
            log(tr.getName()+ "--Test method success
    ");
        }
         
        private void log(String string) {
            System.out.print(string);
            if (++m_count % 40 == 0) {
            System.out.println("");
            }
        }
    
    }

    测试方法

    @Listeners(TestListenerAdapterImp.class)
    public class Test_case {
        @Test
        public void case1(){
            System.out.println("执行了case1测试方法");
        }
    }

    运行结果

    五、监听的调用

    可在测试类前添加@Listeners(监听实现类名.class),也可在XML配置文件中通过listeners标签进行监听的添加。

    <listeners>
           <listener class-name="com.Monitor.IHookableImp"/>
    </listeners>
  • 相关阅读:
    tomcat7
    SSO
    搜索服务Solr集群搭建 使用ZooKeeper作为代理层
    JavaScript
    JavaScript中给onclick绑定事件后return false遇到的问题
    ES6.0简单了解
    php之gennerator
    RBAC权限管理及使用原生PHP实现
    使用YII框架的migrate迁移数据库
    shell脚本--文件包含
  • 原文地址:https://www.cnblogs.com/yogouo/p/11946916.html
Copyright © 2011-2022 走看看