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监听器的更多相关文章
- testNG 学习笔记 Day2 配置testNG自带的监听器
IntelliJ IDEA配置testNG自带的监听器的时候,操作如下菜单栏中 run ----> 下拉菜单中的 Edit Configurations ----> 新矿口中TeatNG下 ...
- testng系列-ReportNG
生成reportng报告操作步骤: 一.maven的pom.xml文件需要添加内容: <properties> <!-- maven 参数配置,这里引用不同的testng.xml - ...
- TestNG(四) 基本注解BeforeSuite和AfterSuite
package com.course.testng; import org.testng.annotations.*; public class BasicAnnotation { @Test //最 ...
- TestNG系列(一)TestNG+Eclipse环境配置
前提 1.JDK的安装与环境变量的配置 2.Eclipse的下载与安装 以上这些是基础中的基础,不再详细介绍. Eclipse安装TestNG插件 打开eclipse--->help---> ...
- APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例
前言 继上篇环境篇后,本篇主要对TestNG进行介绍,给出最最基础的两个实例,通过本文后,学会并掌握TestNG测试用例的编写与运行,以及生成美化后的报告.下一篇为HTTP接口实战(国家气象局接口自动 ...
- TestNG 五 运行TestNG
一.并行运行于超时 可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中.这个属性可以带有如下这样的值: <suite name="My suite&q ...
- 前端构建大法 Gulp 系列 (四):gulp实战
前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...
- testng教程之testng.xml的配置和使用,以及参数传递
昨天学习了一下testng基础教程,http://www.cnblogs.com/tobecrazy/p/4579414.html 昨天主要学习的是testng 的annotation基本用法和生命周 ...
- Ant学习-002-ant 执行 TestNG 测试用例时 [testng] java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException 解决方案
上篇文章中概述了 Ant windows 环境的基本配置,此文讲述在初次使用的过程中遇到的问题. 今天通过 ant 执行 TestNG 测试用例时,执行报错,相应的错误信息如下所示: Buildfil ...
随机推荐
- sqlplus连接远程Oralce数据库
1. 下载 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 2. 三个包 in ...
- Html引入百度富文本编辑器ueditor及自定义工具栏
在日常工作用,肯定有用到富文本编辑器的时候,富文本编辑器功能强大使用方便,我用的是百度富文本编辑器,首先需要下载好百度编辑器的demo, 然后创建ueditor.html文件,引入百度编辑器,然后在h ...
- MySQL的select详细介绍
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据 语法 以下为在MySQL数据库中查询数据通用的 SE ...
- 第07节-开源蓝牙协议BTStack框架代码阅读(上)
首先来看一下,对于硬件操作,它是如何来进行处理的.在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码.在BTStack中,可以搜索一下main.c,将会发现有很多ma ...
- phpcms站点域名配置https无法提交如何处理
一位网友给ytkah反映说phpcms站点域名配置https无法提交,在后台修改站点域名为https提交后提示“站点域名格式应该为http://www.phpcms.cn/,请以‘/’结束”,这个要如 ...
- 每天一道Rust-LeetCode(2019-06-02)
每天一道Rust-LeetCode(2019-06-02) Z 字形变换 坚持每天一道题,刷题学习Rust. LeetCode原题 Z 字形变换 题目描述 将一个给定字符串根据给定的行数,以从上往下. ...
- selenium 中在 iframe 内的元素定位
有些时候 元素明明就在 但是通过什么方式定位都提示 定位不到元素 此时就要考虑元素是不是内嵌在iframe 中 对于内嵌在 ifra中的元素定位 首先定位到 iframe 元素 例如 iframe = ...
- RabbitMQ消息确认机制
文章目录 1. 事务机制2. Confirm模式2.1 生产者2.1.1 普通Confirm模式2.1.2 批量Confirm模式2.1.3 异步Confirm模式2.2 消费者3. 其他 消费者如何 ...
- Python面向对象 | 类方法 classmethod
类方法:必须通过类的调用,而且此方法的意义:就是对类里面的变量或者方法进行修改添加. 例一个商店,店庆全场八折,代码怎么写呢? class Goods: __discount = 0.8 # 折扣 ...
- [RN] React Native 使用 react-native-camera 过程中报错 Found react-native-camera 'mlkit' but wasn't required.`
详细报错如下: Could not resolve all task dependencies for configuration ':app:debugRuntimeClasspath'. Coul ...