前言

监听器实际上是一些预定义的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\n");
} @Override
public void onTestSkipped(ITestResult tr) {
log(tr.getName()+ "--Test method skipped\n");
} @Override
public void onTestSuccess(ITestResult tr) {
log(tr.getName()+ "--Test method success\n");
} 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>

TestNG系列(四)TestNG监听器的更多相关文章

  1. testNG 学习笔记 Day2 配置testNG自带的监听器

    IntelliJ IDEA配置testNG自带的监听器的时候,操作如下菜单栏中 run ----> 下拉菜单中的 Edit Configurations ----> 新矿口中TeatNG下 ...

  2. testng系列-ReportNG

    生成reportng报告操作步骤: 一.maven的pom.xml文件需要添加内容: <properties> <!-- maven 参数配置,这里引用不同的testng.xml - ...

  3. TestNG(四) 基本注解BeforeSuite和AfterSuite

    package com.course.testng; import org.testng.annotations.*; public class BasicAnnotation { @Test //最 ...

  4. TestNG系列(一)TestNG+Eclipse环境配置

    前提 1.JDK的安装与环境变量的配置 2.Eclipse的下载与安装 以上这些是基础中的基础,不再详细介绍. Eclipse安装TestNG插件 打开eclipse--->help---> ...

  5. APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例

    前言 继上篇环境篇后,本篇主要对TestNG进行介绍,给出最最基础的两个实例,通过本文后,学会并掌握TestNG测试用例的编写与运行,以及生成美化后的报告.下一篇为HTTP接口实战(国家气象局接口自动 ...

  6. TestNG 五 运行TestNG

    一.并行运行于超时 可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中.这个属性可以带有如下这样的值: <suite name="My suite&q ...

  7. 前端构建大法 Gulp 系列 (四):gulp实战

    前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...

  8. testng教程之testng.xml的配置和使用,以及参数传递

    昨天学习了一下testng基础教程,http://www.cnblogs.com/tobecrazy/p/4579414.html 昨天主要学习的是testng 的annotation基本用法和生命周 ...

  9. Ant学习-002-ant 执行 TestNG 测试用例时 [testng] java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException 解决方案

    上篇文章中概述了 Ant windows 环境的基本配置,此文讲述在初次使用的过程中遇到的问题. 今天通过 ant 执行 TestNG 测试用例时,执行报错,相应的错误信息如下所示: Buildfil ...

随机推荐

  1. 一、Hadoop入门概述

    一.Hadoop是什么 Hadoop是一个由Apche基金会所开发的分布式系统基础架构. 主要解决海量数据的存储和海量数据的分析计算问题. 广义上来说,Hadoop通常是指一个更广泛的概念—Hadoo ...

  2. 探秘JVM的底层奥秘

    JVM的简单运行流程:主要将字节码文件加载到JVM的内存中,负责跨平台解释字节码文件到不同的操作系统. JVM的基本结构: 类加载器.执行引擎.运行时数据区域.本地接口 类的装载 加载.连接(验证.准 ...

  3. elasticsearch 安装 可视化工具

    一.windows下安装Elasticsearch首先计算机需要JAVA环境(已有次此环境跳过)1.java环境安装网址:http://www.oracle.com/technetwork/java/ ...

  4. sqlserver清空删除日志

    USE [lzdxdb] GO ALTER DATABASE lzdxdb SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE lzdxdb SET ...

  5. Django框架(四)-- 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别、Django虚拟环境搭建

    路由控制 一.简单路由配置 url(r'^booklist$', views.booklist) 第一个参数是正则表达式,第二个参数是视图函数 每个正则表达式前面的'r' 是可选的但是建议加上.它告诉 ...

  6. 【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)

    一.什么是AOP AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP ...

  7. Python字符编码和转码

    一:Python2 python2默认编码格式是ascii码,解释器解释代码时会将代码以及代码中的字符串等转换成ascii码再执行.这样会导致字符串输出或传输时,与当前环境编码格式不同的话会显示乱码. ...

  8. SpringBoot中使用Jackson将null值转化为""或者不返回的配置

    第一种方式:SpringBoot中使用Jackson将null值转化为"" 前言:在实际项目中难免会遇到null值的出现,但是我们转json时并不希望出现NULL值,而是将NULL ...

  9. 利用多线程使socket服务端可以与多个客户端同时通讯

    利用多线程使socket服务端可以与多个客户端同时通讯 server import socket 1. 符合TCP协议的手机 server = socket.socket(socket.AF_INET ...

  10. 2019牛客国庆day3-G &CF1238E

    牛客G: 给定大小为N的数组a[],给定M组关系,让你重排a[],使得sum{M队关系的绝对值之差}最小.首先将a排序,然后依次把a填入数组. 假设i在二进制下有x个1,用dp[i]更新dp[i|(1 ...