在使用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中(可以不改源码,废弃)的更多相关文章

  1. Windows7 64位环境6sv2.1大气传输模型修改源码添加国产高分卫星GF-1 GF-2光谱响应支持

    下面开始添加国产卫星光谱响应的支持: 以下主要参考文章“6S大气传输模型修改源码添加.自定义卫星光谱响应(以HJ-1B CCD为例)”网址:http://blog.csdn.net/sam92/art ...

  2. 向openwrt 源码添加ap143支持

    借鉴地址:http://www.pppei.net/blog/post/536 1.向文件 \target\linux\ar71xx\generic\profiles\atheros.mk 中添加ap ...

  3. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

  4. vue系列---理解Vue中的computed,watch,methods的区别及源码实现(六)

    _ 阅读目录 一. 理解Vue中的computed用法 二:computed 和 methods的区别? 三:Vue中的watch的用法 四:computed的基本原理及源码实现 回到顶部 一. 理解 ...

  5. 【新阁教育】基于Log4Net实现日志信息双向存储(含源码)

    1.引言 在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪.初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些 ...

  6. java编程思想第四版中net.mindview.util包下载,及源码简单导入使用

    在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...

  7. java 日志体系(四)log4j 源码分析

    java 日志体系(四)log4j 源码分析 logback.log4j2.jul 都是在 log4j 的基础上扩展的,其实现的逻辑都差不多,下面以 log4j 为例剖析一下日志框架的基本组件. 一. ...

  8. 10 hbase源码系列(十)HLog与日志恢复

    hbase源码系列(十)HLog与日志恢复   HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢 ...

  9. eclipse中导入外部包却无法查看对应源码或Javadoc的入坑指南

    eclipse中导入外部包却无法查看对应源码或Javadoc的 入坑指南 出现这个错误的原因是,你虽然导入了.jar包,但没有配置对应的Javadoc或源码路径,所以在编辑器中无法查看源 码和对应AP ...

随机推荐

  1. Java泛型:泛型的定义(类、接口、对象)、使用、继承

    地址   http://blog.csdn.net/lirx_tech/article/details/51570138 1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题 ...

  2. 【Django】Django Debug Toolbar调试工具配置

    正在发愁怎么调试Django,就遇到了Django Debug Toolbar这个利器. 先说遇到的问题: 网上也有教程,不过五花八门的,挨个尝试了一遍,也没有成功运行.最后终于找到问题所在: 从开发 ...

  3. [GO]可见性

    GO的可见性:如果想使用别的包的函数.结构体类型.结构体成员 函数名.结构体类型.结构体成员变量名的首字母必须是大写,则为可见,反之,则只能在一个包里使用 比如本来就有一个项目叫awesomeproj ...

  4. AC620教程 第十五节 8位7段数码管驱动设计与验证

    本章导读 电子系统中常用的显示设备有数码管.LCD液晶以及VGA显示器等.其中数码管又可分为段式显示(7段.米字型等)以及点阵显示(8*8.16*16等),LCD液晶的应用可以分为字符式液晶(1602 ...

  5. .net Tuple特性

    .net 4.0 引入了 Tuple特性: 在C# 4.0之前我们函数有多个返回值,通常是使用ref,out .到了c# 4.0 应当使用元组Tuple而不是使用输出参数,在任何时候都应避免使用ref ...

  6. Iframe 高度自适应 example (跨子域实现)

    跨子域的iframe高度自适应 比如 'https://www.kzwr.com/topics/baidu' 嵌入了 'http://pan.kzwr.com/',这种跨子域的页面,实现起来也比较简单 ...

  7. Backup--清理MSDB中的备份记录

    每次数据库备份或日志备份,都会向msdb中多多张表插入数据,如果备份比较频繁的话,需要定期清理. 使用sp_delete_backuphistory来清理以下表中数据: backupfile back ...

  8. C#判断一个字符串是否是数字或者含有某个数字

    第一种就是 最常见的 用Try..Catch.. 再try中强转你要确认的string 类型 成功就是int  catch 就不是 string a = "avdfd"; try ...

  9. [Perl]Windows 系统 Unicode 文件名操作(新建、重命名、枚举、复制)全攻略

    [Perl] Windows 系统 Unicode 文件名操作(新建.重命名.枚举.复制)全攻略 环境 XP/WIN7 Perl v5.16 编辑整理:PerlMonk.523066680 常见的那些 ...

  10. linux命令之文件系统管理命令(下)

    1.mount:挂载文件系统 该命令可以将指定的文件系统挂载到指定目录(挂载点),在linux中必须先挂载所有的设备,才能够访问,挂载的目录必须事先存在并且最好为空. 参数 说明 -t(常用) 指定挂 ...