当尝试使用Java代码生成html报告时,我只能看到生成的statistics.json,但没有html报告。
我的Java代码-
ResultCollector logger = new ResultCollector(summer);
logger.setFilename(csvFile);
testPlanTree.add(testPlanTree.getArray()[0], logger);
//run
StandardJMeterEngine jMeterEngine = new StandardJMeterEngine();
jMeterEngine.configure(testPlanTree);
jMeterEngine.run();
//Report Generator
ReportGenerator rg = new ReportGenerator(csvFile, null);
rg.generate();
在我的reportgenerator.properties中,我有以下条目(仅结尾部分)
jmeter.reportgenerator.exporter.html.classname=org.apache.jmeter.report.dashboard.HtmlTemplateExporter
jmeter.reportgenerator.exporter.html.property.template_dir=report-template
jmeter.reportgenerator.exporter.json.classname=org.apache.jmeter.report.dashboard.JsonExporter
jmeter.reportgenerator.exporter.json.property.output_dir=report-output
我检查了csv文件是否已生成并具有有效的数据,因为我尝试使用相同的csv从jmeter命令行生成html报告,并且该文件可以正常工作。
执行后,我的Java代码仅生成statistics.json文件,但没有生成html报告。日志中没有错误(只有很少的警告与未设置的某些属性有关,并且正在使用默认属性)。
修改
我在Java代码中设置JMeter属性jmeter.reportgenerator.outputdir
-
properties.put(org.apache.jmeter.JMeter.JMETER_REPORT_OUTPUT_DIR_PROPERTY, "report-path");
输出日志-
Creating statistics for overall
Creating statistics for other transactions
Checking output folder
Writing statistics JSON to path\to\dir\statistics.json
Exporting data using exporter:'html' of
className:'org.apache.jmeter.report.dashboard.HtmlTemplateExporter'
Will generate dashboard in folder: path\to\dir
在日志中显示“将在文件夹中生成仪表板”,但未生成html。
知道我可能会丢失的东西吗?
答案 0 :(得分:2)
您遗漏了一件非常明显的事情:生成的HTML Reporting Dashboard
的位置您需要设置jmeter.reportgenerator.outputdir
JMeter Property并提供仪表板的完整路径作为值,以便在初始化ReportGenerator之前添加下一行:
JMeterUtils.setProperty(org.apache.jmeter.JMeter.JMETER_REPORT_OUTPUT_DIR_PROPERTY, "/full/path/to/the/dashboard/folder");
更多信息:Five Ways To Launch a JMeter Test without Using the JMeter GUI
答案 1 :(得分:0)
检查完所有配置后,我继续调试JMeter的ReportGenerator类中的代码,以检查代码在什么地方失败。这是用于生成html报告的代码的层次结构-
ReportGenerator generator = new ReportGenerator(csvFileName, null);
generator.generate();
public void generate() throws GenerationException {
-----
exportData(sampleContext, key, value);
-----
}
private void exportData(SampleContext sampleContext, String exporterName,
ExporterConfiguration exporterConfiguration)
throws GenerationException {
----
exporter.export(sampleContext, testFile, configuration);
----
}
最终,将调用HTMLTemplateExporter的export()方法-
public void export(SampleContext context, File file,
ReportGeneratorConfiguration configuration) throws ExportException {
----
Configuration templateCfg = new Configuration(
Configuration.getVersion());
----
在为Freemarker创建新配置时,代码在此处失败。 JMeter内部使用Freemarker模板引擎来生成仪表板报告。
进一步分析后,我发现Freemarker库的依赖项相互冲突。 Freemarker依赖项是通过JMeter lib itslef添加的,而我的应用程序已经在使用另一版本的freemarker库。我必须排除其中一个版本(使用pom.xml中的exclude标签),并确保仅存在一个版本。 (您可以使用maven依赖关系树进行检查。)
PS-尽管在Maven依赖树中,最初似乎省略了旧版本,而只使用了一个版本。这就是我毫不怀疑库版本冲突的原因。但是在调试时,我确信代码由于库冲突而失败,因此我必须明确确保只有一个库版本。