修改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 ...
随机推荐
- 面向对象JS基础
什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...
- Openssl speed命令
一.简介 speed命令用于测试库的性能 二.语法 openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [sha256] [sha512] [whirlpoo ...
- [C++] NEW Advanced Usage
NEW Advanced Usage 将分配的内存限定在特定的一块区域 #include<iostream> #include<new> ); ); }; using name ...
- 并发编程CAS操作
并发编程CAS操作 简介 CAS即compare and swap,中文就是比较并交换 CAS是Java并发包的基石 原理 其实CAS的原理相对来说比较简单.将要被改变的数据和期望的值作比较,当两个值 ...
- mongodb学习-创建唯一索引(在已存在的集合创建)
如果在已存在的集合创建,可能会存在相同的值如下: 我们可以使用(2.x版本) db.users.ensureIndex({uid:1, name:1}, {unique:true, dropDups: ...
- HttpContext.Current.Session[strName]未将对象引用设置到对象的实例
项目开发是在4.5.1上,不知道为啥客户提供的服务器上安装的是4.5,差别不大也没去升级,然后部署MVC的时候web.config报错 <system.web> <compilati ...
- javascript总结46: JS三大系列-方便的offset 家族
1 offset 家族 offset这个单词本身是--偏移,补偿,位移的意思. js中有一套方便的获取元素尺寸的办法就是offset家族: 2 offset 结构介绍为: 3 offset常用属性 ...
- 编写高质量代码改善C#程序的157个建议——建议132:考虑用类名作为属性名
建议132:考虑用类名作为属性名 一般来说,若果属性对应一个类型,应该直接用类型名命名属性名.如下: class Person { public Company Company { get; set; ...
- 策略和计费控制(PCC)系统研究
策略和计费控制(PCC)系统研究 研究内容 [TOC "float:left"] 策略与计费控制(PCC)框架1 [架构图](achitecture.png "Archi ...
- 关于搜索elasticsearch的数据条数大于10000的坑 max_result_window的两种设置方式
当用elasticsearch进行深度分页查询时的size-from大于10000的时候,就会报错“”, 官方推荐是scroll查询返回结果是无序的不满足业务需求,所以还是通过设置最大返回结果数来达到 ...