使用testNGListenter来自定义日志
时间:2022-04-24
本文章向大家介绍使用testNGListenter来自定义日志,主要内容包括背景、操作步骤、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
背景
用testNG写用例的时候,只是打印了请求的日志,没有打印这个用例的开始和结束的标识,想加上这个标识这样更好的排查问题
这种日志是加在用例开始执行和结束,相当于spring中的AOP功能,今天翻阅了testNG的文档发现有监听器这玩意,这玩意可以在testNG执行的某一过程中进行操作;
操作步骤
直接show the code:
public class TestNGLogListener extends TestListenerAdapter {
static Logger logger = LogManager.getLogger(TestNGLogListener.class.getName());
@Override
public void onTestFailure(ITestResult tr) {
log(String.format("[method: %s]",tr.getName())+ "--Test method failedn");
}
@Override
public void onTestSkipped(ITestResult tr) {
log(String.format("[method: %s]",tr.getName())+ "--Test method skippedn");
}
@Override
public void onTestSuccess(ITestResult tr) {
log(String.format("[method: %s]",tr.getName())+ "--Test method successn");
}
@Override
public void onTestStart(ITestResult tr) {
log(String.format("[method: %s]",tr.getName())+ "-- START");
}
private void log(String string) {
logger.info(string);
}
}
1. 写编写一个监听器的类,继承 TestListenerAdapter 这个类,需要重写对应的几个方法
void onTestFailure(ITestResult result) // 用例执行结果失败
void onTestSkipped(ITestResult result) // 跳过该条用例
void onTestSuccess(ITestResult result) // 用例执行结果成功
void onTestStart(ITestResult tr) // 用例开始执行的时候
2. 使用这个监听器,有两种方法
2.1 第一种是直接在测试用例的class上加Listener注解,如下:
@Listeners({CustomListener.class })
public class SampleTest {
@Test
public void testMethodOne(){
Assert.assertTrue(true);
}
@Test
public void testMethodTwo(){
Assert.assertTrue(false);
}
@Test(dependsOnMethods={"testMethodTwo"})
public void testMethodThree(){
Assert.assertTrue(true);
}
}
2.2 直接在testNG.xml文件中添加,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="wm-api-autotest">
<test name="Test">
<packages>
<package name="com.jwen.demo"/>
</packages>
</test>
<listeners>
<listener class-name=com.jwen.demo.common.TestNGLogListener'/>
</listeners>
</suite> <!-- Suite -->
2.3 效果展示:
- SpringMVC类型转换器、属性编辑器PropertiesEditor源码分析CustomDateEditor源码分析TypeConverterDelegate源码分析
- Intellij IDEA 插件开发之自建插件仓库
- 空Word文档附件:绕过垃圾邮件过滤的新方法
- SpringMVC基本使用关于DisptacherServlet关于ServletContainerInitializer最简单配置接收参数路径变量表单变量
- 测序数据可视化 (一)
- Android log日志
- Activity的生命周期
- GitHub无法访问或访问缓慢解决办法
- 我用 Python 爬取了全国 4500 个热门景点,告诉你国庆哪里去不得?
- Fragment添加、删除、替换
- spring整合hibernate
- Android应用程序中应用图标和名字的设置
- java中的==和equals
- Android手机开机自动启动
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 公共钥匙盒-CSP数组排序练习
- 疫情这么严重,还不待家里学Numpy和Pandas?
- CSP-201812-2-小明放学-Java
- Mac怎么设置docker国内镜像源来加速下载?
- 适合数据分析面试笔试入门的编程题
- 女同事问狗哥什么是线程池的阻塞队列?
- BAT某厂数据分析终面面经
- 通过常见的业务掌握SQL高级功能
- 滴滴出行数据分析师面试经验
- 如何制作推论统计分析报告
- 全局唯一 ID 服务的分布式ID生成系统
- SpringBoot 国际化实现跨地区的多语言切换
- MySQL 死锁产生原因和解决方法
- 手把手教你ShardingSphere和Mybatis拦截器实现特殊字段动态切换加密
- Swagger3.0官方starter诞生,可以扔掉那些野生starter了