无法从Java代码生成Jmeter HTML报告

时间:2020-04-07 03:49:01

标签: performance jmeter load-testing jmeter-5.0 jmeter-3.2

当尝试使用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。
知道我可能会丢失的东西吗?

2 个答案:

答案 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依赖树中,最初似乎省略了旧版本,而只使用了一个版本。这就是我毫不怀疑库版本冲突的原因。但是在调试时,我确信代码由于库冲突而失败,因此我必须明确确保只有一个库版本。