1 package com.reporter.main;
2
3 import java.io.BufferedWriter;
4 import java.io.FileWriter;
5 import java.io.Writer;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Properties;
9 import org.apache.velocity.Template;
10 import org.apache.velocity.VelocityContext;
11 import org.apache.velocity.app.VelocityEngine;
12 import org.testng.IReporter;
13 import org.testng.IResultMap;
14 import org.testng.ISuite;
15 import org.testng.ISuiteResult;
16 import org.testng.ITestContext;
17 import org.testng.ITestResult;
18 import org.testng.xml.XmlSuite;
19
20 public class GenerateReporter implements IReporter {
21 @Override
22 public void generateReport(List xmlSuites, List suites,
23 String outputDirectory) {
24 // TODO Auto-generated method stub
25 try {
26 // 初始化并取得Velocity引擎
27 VelocityEngine ve = new VelocityEngine();
28 Properties p = new Properties();
29 //虽然不懂为什么这样设置,但结果是好的.可以用了
30 p.setProperty("resource.loader", "class");
31 p.setProperty("class.resource.loader.class","org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
32 ve.init(p);
33 Template t = ve.getTemplate("com/reporter/VMmodel/overview.vm");
34 VelocityContext context = new VelocityContext();
35
36 for (ISuite suite : suites) {
37 Map suiteResults = suite.getResults();
38 for (ISuiteResult suiteResult : suiteResults.values()) {
39 ReporterData data = new ReporterData();
40 ITestContext testContext = suiteResult.getTestContext();
41 // 把数据填入上下文
42 context.put("overView", data.testContext(testContext));//测试结果汇总信息
43 //ITestNGMethod[] allTests = testContext.getAllTestMethods();//所有的测试方法
44 //Collection excludeTests = testContext.getExcludedMethods();//未执行的测试方法
45 IResultMap passedTests = testContext.getPassedTests();//测试通过的测试方法
46 IResultMap failedTests = testContext.getFailedTests();//测试失败的测试方法
47 IResultMap skippedTests = testContext.getSkippedTests();//测试跳过的测试方法
48
49 context.put("pass", data.testResults(passedTests, ITestResult.SUCCESS));
50 context.put("fail", data.testResults(failedTests, ITestResult.FAILURE));
51 context.put("skip", data.testResults(skippedTests, ITestResult.FAILURE));
52
53
54
55 }
56 }
57 // 输出流
58 //Writer writer = new BufferedWriter(new FileWriter("report.html"));
59 OutputStream out=new FileOutputStream("report.html");
60 Writer writer = new BufferedWriter(new OutputStreamWriter(out,"utf-8"));//解决乱码问题
61 // 转换输出
62 t.merge(context, writer);
63 //System.out.println(writer.toString());
64 writer.flush();
65 } catch (Exception e) {
66 // TODO Auto-generated catch block
67 e.printStackTrace();
68 }
69 }
70
71
72 }