修改testng源码,添加beforeMethod和afterMethod中的日志到test中(可以不改源码,废弃)
在使用testng生成报告的时候,只会记录test方法中的日志,但是一般会在beforeMethod、beforeTest、afterMethod、afterTest中做一下数据的处理,这里面的日志没办法在test中显示。查看了testng的源码,发现suite中的getAllInvokedMethods方法会返回所有调用过的方法,包括test、after、before等。拿到了所有方法执行的结果,就可以进行处理,把beforeMethod、beforeTest、afterMethod、afterTest中的数据整合到对应的test中。
第一步:下载testng源码到本地:
git clone -b testng-6.8.9 git@github.com:cbeust/testng.git
修改接口ITestResult和他的实现类TestResult代码如下:
在ITestResult添加代码:
List<String> log = new ArrayList<String>(); void setLog(List<String> log);
List<String> getLog();
在TestResult中添加代码:
private List<String> log;
public void setLog(List<String> log) {
this.log = log;
} public List<String> getLog() {
return log;
}
使用maven打包,要把依赖打进去,所以在pom中添加:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
mvn clean
mvn package
生成需要的jar包
第二步:
把jar包放到我们的工程目录中(新建lib目录,放到lib下)
工程中pom添加,同时删掉原来有的testng依赖:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/testng-6.8.8.jar</systemPath>
</dependency>
第三步:如何使用
新建类实现IReporter接口:
package test.service;
import org.testng.*;
import org.testng.xml.XmlSuite;
import java.util.*; public class CustomReporter implements IReporter{
@Override
public void generateReport(List<XmlSuite> xmlSuite, List<ISuite> suites, String s) { List<ITestResult> list = new ArrayList<>();
List<IInvokedMethod> allInvokedMethodsList = new ArrayList<>();
for (ISuite suite : suites) {
Map<String, ISuiteResult> suiteResults = suite.getResults();
List<IInvokedMethod> allInvokedMethods = suite.getAllInvokedMethods();
//排序
Collections.sort(allInvokedMethods, new Comparator<IInvokedMethod>() {
@Override
public int compare(IInvokedMethod o1, IInvokedMethod o2) {
return Long.valueOf(o1.getTestResult().getStartMillis()).compareTo(Long.valueOf(o2.getTestResult().getStartMillis()));
}
});
}
for(int i=0;i<allInvokedMethodsList.size();i++){
IInvokedMethod iInvokedMethod = allInvokedMethodsList.get(i);
ITestResult itestResult = iInvokedMethod.getTestResult();
ITestNGMethod iTestNGMethod = itestResult.getMethod();
if(iTestNGMethod.isTest()){
if(i-1>=0){
ITestResult tmpTestResult = allInvokedMethodsList.get(i-1).getTestResult();
if(tmpTestResult.getMethod().isBeforeTestConfiguration() || tmpTestResult.getMethod().isBeforeMethodConfiguration()){
List<String> log = new ArrayList<>();
log.addAll(Reporter.getOutput(tmpTestResult));
log.addAll(Reporter.getOutput(itestResult));
itestResult.setLog(log);
}
}
if(i+1<allInvokedMethodsList.size()){
ITestResult tmpTestResult = allInvokedMethodsList.get(i+1).getTestResult();
if(tmpTestResult.getMethod().isAfterClassConfiguration() || tmpTestResult.getMethod().isAfterMethodConfiguration()){
List<String> log = new ArrayList<>();
log.addAll(Reporter.getOutput(itestResult));
log.addAll(Reporter.getOutput(tmpTestResult));
itestResult.setLog(log);
}
}
list.add(itestResult);
}
}
}
}
修改testng源码,添加beforeMethod和afterMethod中的日志到test中(可以不改源码,废弃)的更多相关文章
- Windows7 64位环境6sv2.1大气传输模型修改源码添加国产高分卫星GF-1 GF-2光谱响应支持
下面开始添加国产卫星光谱响应的支持: 以下主要参考文章“6S大气传输模型修改源码添加.自定义卫星光谱响应(以HJ-1B CCD为例)”网址:http://blog.csdn.net/sam92/art ...
- 向openwrt 源码添加ap143支持
借鉴地址:http://www.pppei.net/blog/post/536 1.向文件 \target\linux\ar71xx\generic\profiles\atheros.mk 中添加ap ...
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- vue系列---理解Vue中的computed,watch,methods的区别及源码实现(六)
_ 阅读目录 一. 理解Vue中的computed用法 二:computed 和 methods的区别? 三:Vue中的watch的用法 四:computed的基本原理及源码实现 回到顶部 一. 理解 ...
- 【新阁教育】基于Log4Net实现日志信息双向存储(含源码)
1.引言 在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪.初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些 ...
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...
- java 日志体系(四)log4j 源码分析
java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...
- 10 hbase源码系列(十)HLog与日志恢复
hbase源码系列(十)HLog与日志恢复 HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢 ...
- eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南
eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...
随机推荐
- servicestack.redis工具类
using System;using System.Collections.Generic;using System.Linq;using ServiceStack.Redis;using Servi ...
- vim全局替换命令-乾颐堂
语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:“1,20” :表示从第1行到2 ...
- 兼容低于IE9不支持html5标签的元素的方法
方法一: <!--[if lt IE9]> <script> (function() { if (! /*@cc_on!@*/ 0) retur ...
- xfce4快捷键设置
xfce4的"Keyboard"可以方便的设置启动应用程序的快捷键. 例如,添加xfce4-terminal和emacs的启动快捷键 Alt+F3打开"Applicati ...
- 流程控制语句(if、for、while、do while、switch、 break、continue)
3:流程控制语句 (1)顺序结构 从上往下,依次执行 (2)选择结构 按照不同的选择,执行不同的代码 (3)循环结构 做一些重复的代码 4:if语句 (1)三种格式 ...
- jenkins构建后接受者收不到邮件问题解决方案
jenkins部署.安装增强版邮件插件,配置邮件及增强版邮件通知请参考网上教程,由于教程比较多页通俗易懂,笔者在这里不做重复说明,本文重点是解决配置好增强版邮件,job构建后仍然收不到邮件的问题 步骤 ...
- 解决NIOS II工程移动在磁盘上位置后project无法编译问题
说明:本文档于2017年3月4日由小梅哥更新部分内容,主要是增加了讲解以Quartus II13.0为代表的经典版本和以15.1为代表的更新版本之间,解决问题的一些小的差异. 如果用户只是想快速解决问 ...
- struts2下面如何同时使用servlet,就是如何实现struts与servlet共存
转载 原文链接:https://blog.csdn.net/u013358115/article/details/20706607 问题 项目要求struts2和servlet能够共存,就是strut ...
- python文件操作os模块
Python 统计某一文件夹下文件数量 使用python pathlib模块 from pathlib import Path dir_path = ' ' print(len(list(Path( ...
- Intel GPA果然是神器
又一次PERF暗黑三...只有GPA帮到了我. Intel GPA是一个用于测试产品性能和质量的工具.使用这个工具可以运行在游戏或3D应用程序中用来看看它们是如何工作的,其优势性的一点是,有了Auto ...