51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6080|回复: 0
打印 上一主题 下一主题

TestNG 报告定制最简单的原理

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-16 11:54:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
看到有人发个帖子,关于如果定制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. }
复制代码

编写TestNG的测试
  1. public class TestNGTest {

  2.     @Test
  3.     public void test_pass(){
  4.         System.out.println("passed_case");
  5.     }

  6.     @Test
  7.     public void test_failed(){
  8.         Assert.assertTrue(false);
  9.     }

  10.     @Test
  11.     public void test_pass_2(){
  12.         System.out.println("passed_case_2");
  13.     }
  14. }
复制代码


将监听器放入Testng.xml文件
  1. <suite name="SimpleReport">
  2.     <listeners>
  3.         <listener class-name="com.hedwig.testng.TestNGSimpleReport"/>
  4.     </listeners>
  5.     <test verbose="1" name="simple test" >
  6.         <classes>
  7.             <class name="com.hedwig.testng.TestNGTest"/>
  8.         </classes>
  9.     </test>

  10. </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
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 14:54 , Processed in 0.147893 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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