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),我们将立即处理。