IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么不能自已定制一份呢?testng的IReporter接口就接供了这样的功能,我们只需要实现这个接口,并加上监听,就能拿到所有的信息了,你可以把这些信息存数据库,或者自已生成一个html,亦或者写在EXCEL里啊等等,都可以,下面给出IReporter接口的实现方式:

package com.demo;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.testng.IReporter;
import org.testng.IResultMap;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.xml.XmlSuite;public class NewReport implements IReporter{@Overridepublic void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {List<ITestResult> list = new ArrayList<ITestResult>();for (ISuite suite : suites) {            Map<String, ISuiteResult> suiteResults = suite.getResults();for (ISuiteResult suiteResult : suiteResults.values()) {ITestContext testContext = suiteResult.getTestContext();            IResultMap passedTests = testContext.getPassedTests();IResultMap failedTests = testContext.getFailedTests();IResultMap skippedTests = testContext.getSkippedTests();IResultMap failedConfig = testContext.getFailedConfigurations();    list.addAll(this.listTestResult(passedTests));list.addAll(this.listTestResult(failedTests));list.addAll(this.listTestResult(skippedTests));list.addAll(this.listTestResult(failedConfig));}         }this.sort(list);this.outputResult(list, outputDirectory+"/test.txt");}private ArrayList<ITestResult> listTestResult(IResultMap resultMap){Set<ITestResult> results = resultMap.getAllResults();        return new ArrayList<ITestResult>(results);}private void sort(List<ITestResult> list){Collections.sort(list, new Comparator<ITestResult>() {@Overridepublic int compare(ITestResult r1, ITestResult r2) {if(r1.getStartMillis()>r2.getStartMillis()){return 1;}else{return -1;}               }});}private void outputResult(List<ITestResult> list, String path){      try {BufferedWriter output = new BufferedWriter(new FileWriter(new File(path)));   StringBuffer sb = new StringBuffer();for (ITestResult result : list) {if(sb.length()!=0){sb.append("\r\n");}sb.append(result.getTestClass().getRealClass().getName()).append(" ").append(result.getMethod().getMethodName()).append(" ").append(this.formatDate(result.getStartMillis())).append(" ").append(result.getEndMillis()-result.getStartMillis()).append("毫秒 ").append(this.getStatus(result.getStatus()));}output.write(sb.toString());output.flush();output.close();} catch (IOException e) {           e.printStackTrace();}}private String getStatus(int status){String statusString = null;switch (status) {        case 1:statusString = "SUCCESS";break;case 2:statusString = "FAILURE";break;case 3:statusString = "SKIP";break;default:            break;}return statusString;}private String formatDate(long date){      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return formatter.format(date);}}

代码简单易懂,下面给一个测试类:

package com.demo;import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;@Listeners({com.demo.NewReport.class})
public class Test15 {@DataProviderpublic Object[][] dataProvider(){return new Object[][]{{1},{2}};}@Test(dataProvider="dataProvider")public void testAssert1(int a){   Assert.assertEquals(1, a);} @Testpublic void testAssert2(){    Assert.assertEquals("2", "2");  }}

运行后,大家打开test-output文件夹,看是不是多了个test.txt的文件夹。截图如下:

转载于:https://www.cnblogs.com/zhangfei/p/4514697.html

TestNg的IReporter接口的使用相关推荐

  1. freemarker的测试结果框架_TestNG框架Listener介绍及测试结果的收集

    此文已由作者范旭斐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 抛砖引玉 假设我们将testng作为自动化测试框架的选型方案,以下两个问题如何实现: 问题1:如何将每次执行 ...

  2. Java+Maven+TestNG接口(API)自动化测试教程(九) 使用 Extent Reporters 美化测试报告

    TestNG 自己生成的测试报告不够美观,我们可以使用 Extent Reporters 来美化测试报告. 9.1 在 pom.xml 中加入支持 extent reporters 的 XML 片段 ...

  3. 接口自动化集成TestNG框架

    目录 1. 接口概念 2. HTTP接口 3. TestNG介绍 4. TestNG注解 4.1 dependsOnMethods标签 4.2 alwaysRun标签 4.2.1 alwaysRun ...

  4. java自动化测试报告_Java自动化测试框架-10 - TestNG之测试结果篇(详细教程)

    1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...

  5. java 自动化测试报告_Java自动化测试框架-10 - TestNG之测试结果篇

    1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...

  6. Java自动化测试框架-10 - TestNG之测试结果篇(详细教程)

    1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...

  7. Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)

    一.并行性和超时 您可以指示TestNG以各种方式在单独的线程中运行测试. 可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中.这个属性可以带有如下这样的值: 二.并 ...

  8. extentreports报告插件与testng集成(二)

    之前的一篇文章中,是把extentreports 的报告的初始方法写在driver的初始方法中,写报告的方法在testng的 onTest中,这次将这些方法全都拆出来,写在一个方法类中,这个类重现实现 ...

  9. TestNG监听器实现失败自动截图、重跑、自定义html结果文件功能

    本文转载自孔庆云kevin<TestNG监听器实现失败自动截图.重跑.自定义html结果文件功能> 使用Testng框架搭建自动测试框架,经常会需要增加失败自动截图,以及失败重跑功能,下面 ...

最新文章

  1. yolov3(一:模型训练)
  2. 博客 | Machine Learning Yearning 要点笔记
  3. 雷林鹏分享:XML 命名空间
  4. 为了孩子上名校,他们发论文给子女署名,Nature发文报道韩国学术不当行为
  5. python setup用法_python的构建工具setup.py的方法使用示例
  6. Blog小技巧之二-让朋友在Blog上也能QQ到自己
  7. Android之给ImageView添加点击效果
  8. 计算机网络技术教材多少钱,计算机网络技术课程标准教材.doc
  9. ubuntu 16.04 编译android,Ubuntu 16.04 64bit 编译 Android 4.4 源码
  10. 10打开没有反应_【专利】表面施胶剂的反应装置
  11. Atitit 人工智能体系树培训列表应用较为广泛的技术.docx Atitit 人工智能体系培训列表 目录 1. 1.NLP自然语言处理文本处理 2 1.1. 语言理解 分词 2 1.2. 抽取
  12. 高德地图定位误差_导航定位错误致拥堵,四川景区建议别用高德地图 高德回应...
  13. MINIST手写数字数据集–神经网络(mini-batch)
  14. hx711基本原理讲解
  15. Flink Window TOPN: The window can only be ordered in ASCENDING mode.
  16. 第三章 输入验证----tapestry教程Enjoying Web DevelopmenEnjoying Development翻译
  17. 一个 Gitlab 帐号无法访问文件、克隆项目问题的解决
  18. 名帖73 柳公权 楷书《玄秘塔碑》
  19. 北京有哪些牛逼的中小型公司?
  20. 广播发射系统的安装调试维护——TFN T300F天馈线驻波比测试仪手持矢量网络分析仪

热门文章

  1. delphi接口带上请求头是什么意思_Python接口自动化之Token详解及应用
  2. 简易 Vue 构建--篇三
  3. ts 变量后面加问号或者叹号_关于记录型信号量与TS指令的理解
  4. markdown 本地链接_记录笔记、markdown工具推荐
  5. java hibernate更新_Hibernate更新某些字段的几种update方法
  6. 使用SpringBoot+JPA报错Incorrect syntax near 'hibernate_sequence'
  7. 程序员和注册会计师的地位_“注册会计师和律师哪个地位高?”这3张图给出了答案!...
  8. mysql应用层透明扩展_MySQL高扩展和高可用
  9. C语言如何处理不定长度参数,C语言中不定参数的实现
  10. 有谁转行学java成功了的吗_毕业五六年转行学java可以吗,还能学会吗?