51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2184|回复: 1
打印 上一主题 下一主题

TestNg的IReporter接口的使用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-2 16:59:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IReporter接口是干嘛的?就是让用户自定义报告的,很多人想要自定义报告,于是乎找各种插件,比如什么testng-xslt啊,reportng啊,各种配置,最后出来的结果,还不能定制化,但为什么不能自已定
制一份呢?testng的IReporter接口就接供了这样的功能,我们只需要实现这个接口,并加上监听,就
能拿到所有的信息了,你可以把这些信息存数据库,或者自已生成一个html,亦或者写在EXCEL里啊
等等,都可以,下面给出IReporter接口的实现方式:

  1. package com.demo;

  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileWriter;
  5. import java.io.IOException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.Comparator;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Set;

  13. import org.testng.IReporter;
  14. import org.testng.IResultMap;
  15. import org.testng.ISuite;
  16. import org.testng.ISuiteResult;
  17. import org.testng.ITestContext;
  18. import org.testng.ITestResult;
  19. import org.testng.xml.XmlSuite;

  20. public class NewReport implements IReporter{
  21.      
  22.     @Override
  23.     public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites, String outputDirectory) {
  24.         List<ITestResult> list = new ArrayList<ITestResult>();
  25.         for (ISuite suite : suites) {         
  26.             Map<String, ISuiteResult> suiteResults = suite.getResults();
  27.             for (ISuiteResult suiteResult : suiteResults.values()) {
  28.                 ITestContext testContext = suiteResult.getTestContext();           
  29.                 IResultMap passedTests = testContext.getPassedTests();
  30.                 IResultMap failedTests = testContext.getFailedTests();
  31.                 IResultMap skippedTests = testContext.getSkippedTests();
  32.                 IResultMap failedConfig = testContext.getFailedConfigurations();   
  33.                 list.addAll(this.listTestResult(passedTests));
  34.                 list.addAll(this.listTestResult(failedTests));
  35.                 list.addAll(this.listTestResult(skippedTests));
  36.                 list.addAll(this.listTestResult(failedConfig));
  37.             }         
  38.         }
  39.         this.sort(list);
  40.         this.outputResult(list, outputDirectory+"/test.txt");
  41.     }
  42.      
  43.     private ArrayList<ITestResult> listTestResult(IResultMap resultMap){
  44.         Set<ITestResult> results = resultMap.getAllResults();   
  45.         return new ArrayList<ITestResult>(results);
  46.     }
  47.      
  48.     private void sort(List<ITestResult> list){
  49.         Collections.sort(list, new Comparator<ITestResult>() {
  50.             @Override
  51.             public int compare(ITestResult r1, ITestResult r2) {
  52.                 if(r1.getStartMillis()>r2.getStartMillis()){
  53.                     return 1;
  54.                 }else{
  55.                     return -1;
  56.                 }              
  57.             }
  58.         });
  59.     }
  60.      
  61.     private void outputResult(List<ITestResult> list, String path){      
  62.         try {
  63.             BufferedWriter output = new BufferedWriter(new FileWriter(new File(path)));
  64.             StringBuffer sb = new StringBuffer();
  65.             for (ITestResult result : list) {
  66.                 if(sb.length()!=0){
  67.                     sb.append("\r\n");
  68.                 }
  69.                 sb.append(result.getTestClass().getRealClass().getName())
  70.                   .append(" ")
  71.                   .append(result.getMethod().getMethodName())
  72.                   .append(" ")
  73.                   .append(this.formatDate(result.getStartMillis()))
  74.                   .append(" ")
  75.                   .append(result.getEndMillis()-result.getStartMillis())
  76.                   .append("毫秒 ")
  77.                   .append(this.getStatus(result.getStatus()));
  78.             }
  79.             output.write(sb.toString());
  80.             output.flush();
  81.             output.close();
  82.         } catch (IOException e) {         
  83.             e.printStackTrace();
  84.         }
  85.          
  86.     }
  87.      
  88.     private String getStatus(int status){
  89.         String statusString = null;
  90.         switch (status) {      
  91.         case 1:
  92.             statusString = "SUCCESS";
  93.             break;
  94.         case 2:
  95.             statusString = "FAILURE";
  96.             break;
  97.         case 3:
  98.             statusString = "SKIP";
  99.             break;
  100.         default:           
  101.             break;
  102.         }
  103.         return statusString;
  104.     }
  105.      
  106.     private String formatDate(long date){     
  107.        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  108.        return formatter.format(date);
  109.     }

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

  112. 1
  113. 2
  114. 3
  115. 4
  116. 5
  117. 6
  118. 7
  119. 8
  120. 9
  121. 10
  122. 11
  123. 12
  124. 13
  125. 14
  126. 15
  127. 16
  128. 17
  129. 18
  130. 19
  131. 20
  132. 21
  133. 22
  134. 23
  135. 24
  136. 25
  137. 26
  138. package com.demo;

  139. import org.testng.Assert;
  140. import org.testng.annotations.DataProvider;
  141. import org.testng.annotations.Listeners;
  142. import org.testng.annotations.Test;

  143. @Listeners({com.demo.NewReport.class})
  144. public class Test15 {
  145.      
  146.     @DataProvider
  147.     public Object[][] dataProvider(){
  148.         return new Object[][]{{1},{2}};
  149.     }
  150.      
  151.     @Test(dataProvider="dataProvider")
  152.     public void testAssert1(int a){
  153.         Assert.assertEquals(1, a);
  154.     }  
  155.      
  156.     @Test
  157.     public void testAssert2(){
  158.         Assert.assertEquals("2", "2");
  159.     }

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 21:01 , Processed in 0.064667 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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