testng生成自定义html报告

发表于:2018-10-24 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:钱先生    来源:博客园

  3.测试方法排序,按测试方法执行时间排序
  遍历 suites 得到的getAllResults()是一个set 集合,需要对数据进行排序
  这里是将getAllResults()转为list,实现Comparable接口的方法进行排序的.
  (好像是可以将getAllResults()转成TreeSet排序?)
  1 package com.reporter.main;
  2
  3 import org.testng.ITestResult;
  4
  5 public class TestResultSort implements Comparable<ITestResult> {
  6     private Long order;
  7     @Override
  8     public int compareTo(ITestResult arg0) {
  9         // TODO Auto-generated method stub
  10         return this.order.compareTo( arg0.getStartMillis());//按test开始时间排序
  11     }
  12
  13 }
  4.得到测试报告数据
  1 package org.reporter.main;
  2
  3
  4 import java.util.ArrayList;
  5 import java.util.Collection;
  6 import java.util.Collections;
  7 import java.util.List;
  8 import java.util.Set;
  9
  10
  11 import org.testng.IResultMap;
  12 import org.testng.ITestContext;
  13 import org.testng.ITestNGMethod;
  14 import org.testng.ITestResult;
  15 import org.testng.Reporter;
  16
  17
  18
  19
  20 public class ReporterData {
  21     // 测试结果Set<ITestResult>转为list,再按执行时间排序 ,返回list
  22     public List<ITestResult> sortByTime(Set<ITestResult> str) {
  23         List<ITestResult> list = new ArrayList<ITestResult>();
  24         for (ITestResult r : str) {
  25             list.add(r);
  26         }
  27         Collections.sort(list);
  28         return list;
  29
  30
  31     }
  32
  33     public DataBean testContext(ITestContext context) {
  34         // 测试结果汇总数据
  35         DataBean data = new DataBean();
  36         ReportUnits units = new ReportUnits();
  37         IResultMap passedTests = context.getPassedTests();
  38         IResultMap failedTests= context.getFailedTests();
  39         IResultMap skipedTests = context.getSkippedTests();
  40         //全部测试周期方法,包括beforetest,beforeclass,beforemethod,aftertest,afterclass,aftermethod
  41         //IResultMap passedConfigurations =context.getPassedConfigurations();
  42         //IResultMap failedConfigurations =context.getFailedConfigurations();
  43         //IResultMap skipedConfigurations =context.getSkippedConfigurations();
  44         Collection<ITestNGMethod> excludeTests = context.getExcludedMethods();
  45
  46         int passedTestsSize = passedTests.size();
  47         int failedTestsSize = failedTests.size();
  48         int skipedTestsSize = skipedTests.size();
  49         int excludeTestsSize = excludeTests.size();
  50         //所有测试结果的数量=测试pass+fail+skip的和,因为数据驱动一个测试方法有多次执行的可能,导致方法总数并不等于测试总数
  51         int allTestsSize= passedTestsSize+failedTestsSize+skipedTestsSize;
  52         data.setAllTestsSize(allTestsSize);
  53         data.setPassedTestsSize(passedTestsSize);
  54         data.setFailedTestsSize(failedTestsSize);
  55         data.setSkippedTestsSize(skipedTestsSize);
  56         data.setExcludeTestsSize(excludeTestsSize);
  57         data.setTestsTime(units.getTestDuration(context));
  58         data.setPassPercent(units.formatPercentage(passedTestsSize, allTestsSize));
  59         data.setAllTestsMethod(context.getAllTestMethods());
  60         data.setExcludeTestsMethod(context.getExcludedMethods());
  61
  62         return data;
  63
  64
  65     }
  66
  67
  68     public List<DataBean> testResults(IResultMap map, int status) {
  69         // 测试结果详细数据
  70         List<DataBean> list = new ArrayList<DataBean>();
  71         ReportUnits units = new ReportUnits();
  72         map.getAllResults().size();
  73         for (ITestResult result : sortByTime(map.getAllResults())) {
  74             DataBean data = new DataBean();
  75             data.setTestName(result.getName());
  76             data.setClassName(result.getTestClass().getName());
  77             data.setDuration(units.formatDuration(result.getEndMillis()
  78                     - result.getStartMillis()));
  79             data.setParams(units.getParams(result));
  80             data.setDescription(result.getMethod().getDescription());
  81             data.setOutput(Reporter.getOutput(result));
  82             data.setDependMethod(units.getDependMethods(result));
  83             data.setThrowable(result.getThrowable());
  84             if (result.getThrowable() != null) {
  85                 data.setStackTrace(result.getThrowable().getStackTrace());
  86             }
  87             list.add(data);
  88         }
  89         return list;
  90     }
  91
  92 }
  5.生成测试报告,生成的测试报告是项目根目录下的report.html(要定制的话再改了)
  使用 IReporter 监听器。IReporter 监听器只有一个方法需要实现。
  void generateReport(java.util.List<XmlSuite> xmlSuites, java.util.List
  <ISuite> suites, java.lang.String outputDirectory)
  该方法在所有测试方法执行结束后被调用,通过遍历 xmlSuites 和 suites 能够获取所有测试方法的信息以及测试结果。outputDirectory 是默认的测试报表生成路径,当然你可以指定其他路径生成报表。

   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
32/3<123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号