TestNG-TestListenerAdapter和IReporter的实现方式
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章给大家介绍TestNG-TestListenerAdapter和IReporter的实现方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。https://static.j
千家信息网最后更新 2026年11月04日TestNG-TestListenerAdapter和IReporter的实现方式
这篇文章给大家介绍TestNG-TestListenerAdapter和IReporter的实现方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
https://static.javadoc.io/org.testng/testng/6.13/org/testng/TestListenerAdapter.html
TestListenerAdapter一个简单的ITestListener适配器,用于存储所有运行的测试。您可以使用以下方法检索这些结果:getPassedTests()getFailedTests()getSkippedTests()如果您扩展此类以覆盖任何这些方法,请记住如果您希望维护此测试列表,则调用它们的超级等效项。
IReporter 客户端可以实现此接口以生成报告。它的方法generateReport()将在所有套件运行后调用,参数将提供在该运行期间发生的所有测试结果。
参考:
https://www.cnblogs.com/relax-zw/p/9884009.html
http://bbs.51testing.com/thread-1161195-1-1.html
| 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{ @Override public void generateReport(List xmlSuites, List suites, String outputDirectory) { List list = new ArrayList(); for (ISuite suite : suites) { Map 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 listTestResult(IResultMap resultMap){ Set results = resultMap.getAllResults(); return new ArrayList(results); } private void sort(List list){ Collections.sort(list, new Comparator() { @Override public int compare(ITestResult r1, ITestResult r2) { if(r1.getStartMillis()>r2.getStartMillis()){ return 1; }else{ return -1; } } }); } private void outputResult(List 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 { @DataProvider public Object[][] dataProvider(){ return new Object[][]{{1},{2}}; } @Test(dataProvider="dataProvider") public void testAssert1(int a){ Assert.assertEquals(1, a); } @Test public void testAssert2(){ Assert.assertEquals("2", "2"); }}关于TestNG-TestListenerAdapter和IReporter的实现方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
报告
接口
测试
方式
方法
结果
生成
运行
信息
内容
更多
参考
帮助
不错
不能自已
兴趣
功能
参数
套件
客户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技与互联网
互联网中国科技
中资互联网科技
高科技与互联网
猪兼强互联网科技
互联网科技公司电话
居家互联网科技有限公司
科技与互联网哪个更好
重庆威客帮互联网科技
互联网与医疗科技
新兴科技互联网创新大赛颁奖典礼
洛阳昕诺飞互联网科技有限公司
世界互联网领先科技成果获奖
启辰互联网科技
宇信科技在杭州互联网排第几
马化腾互联网科技教学
互联网科技博主张洲
互联网科技品牌
杭州科技互联网公司有哪些
互联网科技自媒体灵感
互联网品科技
小马过河互联网科技
深圳国际航运科技和互联网
恒银科技与互联网金融
上海宁丞科技互联网
中和天地互联网科技有限公司
沐思想互联网科技有限公司
互联网安防科技感
北京天晋互联网科技有限公司
互联网科技快速发展优美句子