51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师论坛测试积点免费获取渠道攻略【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【111期】:聊聊想出国找测试工作最核心的那些事!2020不玩虚的,先来一波技术PK! 【征稿】疫情当下手头紧?这波投稿补贴很及时! 自学软件测试那点事
查看: 670|回复: 0

TestNG 报告定制最简单的原理

[复制链接]

该用户从未签到

发表于 2018-3-20 13:19:02 | 显示全部楼层 |阅读模式
看到有人发个帖子,关于如果定制TESTNG报告的,我自己实现过一个自定义的简单报告,所以也就顺便谈谈。

如果需要定制TestNG的测试报告,可以先想一下首先需要什么的数据,其实最简单的数据就是测试用例成功失
败的数据,
那么实际上TestNG提供了ITestListener的接口可以让你获取这些测试数据.
同时IReporter 接口可以让用户在调用最后自己生成测试报告.

所以其实只要用一个类实现ITestListener,IReporter就可以了.

ITestListener,IReporter实现

一下是我一个最简单的实现, 实际上TestNG开放出来的这些监听器,主要是让你可以获取TestNG 测试容器中运行
测试的数据,上下文.
关于代码里面的ITestResult, xmlSuites,suites 可以自行查找

  1. public class TestNGSimpleReport implements ITestListener, IReporter {
  2.     private List<String> testPassed = Lists.newArrayList();
  3.     private List<String> testFailed = Lists.newArrayList();
  4.     private List<String> testSkipped = Lists.newArrayList();

  5.     @Override
  6.     public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
  7.                                String outputDirectory) {
  8.         System.out.println("Passed Case: " + testPassed.size());
  9.         System.out.println("testFailed Case: " + testFailed.size());
  10.         System.out.println("testSkipped Case: " + testSkipped.size());

  11.         for (String passed : testPassed) {
  12.             System.out.println("passed case:" + passed);
  13.         }
  14.         for (String passed : testFailed) {
  15.             System.out.println("failed case:" + passed);
  16.         }

  17.         for (String passed : testSkipped) {
  18.             System.out.println("skipped case:" + passed);
  19.         }

  20.     }

  21.     @Override
  22.     public void onTestStart(ITestResult result) {

  23.     }

  24.     @Override
  25.     public void onTestSuccess(ITestResult result) {
  26.         testPassed.add(result.getMethod().getMethodName());
  27.     }

  28.     @Override
  29.     public void onTestFailure(ITestResult result) {
  30.         testFailed.add(result.getMethod().getMethodName());
  31.     }

  32.     @Override
  33.     public void onTestSkipped(ITestResult result) {
  34.         testSkipped.add(result.getMethod().getMethodName());
  35.     }

  36.     @Override
  37.     public void onTestFailedButWithinSuccessPercentage(ITestResult result) {

  38.     }

  39.     @Override
  40.     public void onStart(ITestContext context) {

  41.     }

  42.     @Override
  43.     public void onFinish(ITestContext context) {

  44.     }
  45. }

  46. 编写TestNG的测试

  47. public class TestNGTest {

  48.     @Test
  49.     public void test_pass(){
  50.         System.out.println("passed_case");
  51.     }

  52.     @Test
  53.     public void test_failed(){
  54.         Assert.assertTrue(false);
  55.     }

  56.     @Test
  57.     public void test_pass_2(){
  58.         System.out.println("passed_case_2");
  59.     }
  60. }
  61. 将监听器放入Testng.xml文件

  62. <suite name="SimpleReport">
  63.     <listeners>
  64.         <listener class-name="com.hedwig.testng.TestNGSimpleReport"/>
  65.     </listeners>
  66.     <test verbose="1" name="simple test" >
  67.         <classes>
  68.             <class name="com.hedwig.testng.TestNGTest"/>
  69.         </classes>
  70.     </test>

  71. </suite>
复制代码

运行Testng.xml文件,查看结果

结果如下,是不是很简单? 如果想做的cool一点,可以将这些数据写到一个html模版,写入文件就可以了

  1. ===============================================
  2. SimpleReport
  3. Total tests run: 3, Failures: 1, Skips: 0
  4. ===============================================

  5. Passed Case: 2
  6. testFailed Case: 1
  7. testSkipped Case: 0
  8. passed case:test_pass
  9. passed case:test_pass_2
  10. failed case:test_failed
复制代码


回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2020-4-10 04:35 , Processed in 0.060927 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2020 Comsenz Inc.

快速回复 返回顶部 返回列表