前言

监听器实际上是一些预定义的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. MP构造器

    官方文档:https://baomidou.gitee.io/mybatis-plus-doc/#/wrapper 实体包装器,用于处理 sql 拼接,排序,实体参数查询等! 补充说明: 使用的是数据 ...

  2. TP5.0整合webuploader实现多图片上传功能

    在https://github.com/fex-team/webuploader 下载webuploader并解压,解压后放到public里面.其中我把解压缩后的文件夹改名为webuploader,放 ...

  3. Linux shell 函数应用示例01

    函数Function的使用 定义函数 (1) 函数名称() {     ...     ... } (2) function 函数名称{     ...     ... } 调用函数         ...

  4. python的multitask模块安装

    今天参考网络上的例子,编写基于python的网络程序,遇到下面的错误. No module named 'multitask' 但是multitask的模块却始终下载不了,在网上找到的CSDN下载链接 ...

  5. Go Programming Language 2

    [Go Programming Language 2] 1.In Go, the sign of the remainder is always the same as the sign of the ...

  6. axios之Vue请求初始化数据放在Created还是Mounted?

    先分析下生命周期 beforecreated:el 和 data 并未初始化 created:完成了 data 数据的初始化,el没有 beforeMount:完成了 el 和 data 初始化 mo ...

  7. centos7.7离线安装nginx

    一.1.安装openssl,因为编译安装nginx需要指定openssl目录 mkdir /data/openssl -p cd /data/openssl wget https://www.open ...

  8. Django Model的外键自关联‘self'和设置'unique_together'

    在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门 ...

  9. python基础之四:list、tuple

    一.列表 list # 列表 ''' 类似str,可以进行切片 ''' li = [', [1, 2, 3], 55, 'we all in ', 'Tom', ''] print(li[0:2]) ...

  10. Flex弹性盒模型(新老版本完整)--移动端开发整理笔记(二)

    Flex布局 Flex即Flexible Box,写法为:display:flex(旧版:display: -webkit-box) 在Webkit内核下,需要加-webkit前缀: .box{ di ...