ResourceManager : unable to find resource 'C:\Test\TestConfig\overview.vm' in any resource loader.org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'C:\Test\TestConfig\overview.vm' at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474) at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352) at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533) at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514) at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373) at baseReport.GenerateReporter.generateReport(GenerateReporter.java:28) at org.testng.TestNG.generateReports(TestNG.java:1076) at org.testng.TestNG.run(TestNG.java:1001) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
导致的原因是overview.vm路径不正确
换了一种写法,注释掉的是之前的,对比下
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.testng.*;
import org.testng.xml.XmlSuite;import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.Properties;public class GenerateReporter implements IReporter {
@Override public void generateReport(List<XmlSuite> xmlSuites,List<ISuite> suites,String outputDirectory) { // TODO Auto-generated method stub try { // 初始化并取得Velocity引擎 VelocityEngine ve = new VelocityEngine(); Properties p = new Properties(); String fileDir=".//TestConfig/"; //p.setProperty("resource.loader","class"); //p.setProperty("class.resource.loader.class","org.apache.velocity.runtime.resource.loader.<a href="/tag/ClassPathResource/" target="_blank" class="keywords">ClassPathResource</a>Loader"); //ve.init(p); //Template t = ve.getTemplate("main/java/baseReport/overview.vm"); p.setProperty(ve.FILE_RESOURCE_LOADER_PATH,fileDir); //此处的fileDir可以直接用<a href="/tag/jueduilujing/" target="_blank" class="keywords">绝对路径</a>来 ve.init(p); //初始化 Template t = ve.getTemplate("overview.vm");//此处只要指明<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>名就可以了. VelocityContext context = new VelocityContext(); for (ISuite suite : suites) { Map<String,ISuiteResult> suiteResults = suite.getResults(); for (ISuiteResult suiteResult : suiteResults.values()) { ReporterData data = new ReporterData(); ITestContext testContext = suiteResult.getTestContext(); // 把数据填入上下文 context.put("overView",data.testContext(testContext));//测试结果汇总信息 //ITestNGMethod[] allTests = testContext.getAllTestMethods();//所有的测试<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a> //Collection<ITestNGMethod> excludeTests = testContext.getExcludedMethods();//未执行的测试<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a> IResultMap passedTests = testContext.getPassedTests();//测试通过的测试<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a> IResultMap <a href="/tag/Failed/" target="_blank" class="keywords">Failed</a>Tests = testContext.get<a href="/tag/Failed/" target="_blank" class="keywords">Failed</a>Tests();//测试失败的测试<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a> IResultMap skippedTests = testContext.getSkippedTests();//测试跳过的测试<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a> //IResultMap starttime=testContext.getStartDate(); //IResultMap endtime=testContext.getEndDate(); context.put("pass",data.testResults(passedTests,ITestResult.SUCCESS)); context.put("fail",data.testResults(<a href="/tag/Failed/" target="_blank" class="keywords">Failed</a>Tests,ITestResult.FAILURE)); context.put("skip",data.testResults(skippedTests,ITestResult.FAILURE)); } } // <a href="/tag/shuchu/" target="_blank" class="keywords">输出</a>流 OutputStream out = new FileOutputStream("report.html"); Writer writer = new BufferedWriter(new OutputStreamWriter(out,"utf-8"));//<a href="/tag/jiejue/" target="_blank" class="keywords">解决</a>乱码问题 // 转换<a href="/tag/shuchu/" target="_blank" class="keywords">输出</a> t.merge(context,writer); //System.out.println(writer.toString()); writer.flush(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }