TestNG-TestListenerAdapter和IReporter的实现方式
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章给大家介绍TestNG-TestListenerAdapter和IReporter的实现方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。https://static.j
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
网络安全专业收学生多的大学
社交软件开发初步选题
大学计算机网络技术课软件
施工项目网络安全月考评操作
手机网络安全教育教案
浙江省校园网络安全题
嵌入式系统软件开发用什么语言
一卡管理数据服务器
电视在哪看dns服务器设置
软件开发的筹资
河北什么是网络技术咨询
西安凯歌网络技术有限公司
数据库开发方向
政府网络安全宣传周活动总结
苏州际缘互联网科技公司
携程公司软件开发一流吗
网络安全法解读 试卷
软件开发都是全日制的
数据库包括的内容
mc手机服务器添加模组
如何只读一次数据库
勇芳软件开发小组
我的世界rpg 副本服务器
大连亚新软件开发
远程服务器怎么重启
手游lol哪个服务器人少
开源服务器监控软件
测试工程师与软件开发工程师
船舶网络数据库安全
软件开发计算机培训学校招生要求