首页 > 解决方案 > 如何使用 JMeter 报告生成器生成 JSON 文件

问题描述

我正在尝试使用 ReportGenerator 使用 JMeter 创建一个 statistics.json 文件,其中填充了我的 .jmx 测试结果。可以用 JMeter 做到这一点吗?

我已经完成了本教程:https : //jmeter.apache.org/usermanual/generating-dashboard.html,它专注于使用报告生成器创建一个 html 仪表板,但我有一个创建/更新 statstics.json 的项目要求文件也是如此。我已经使用 JSON Extractor 后处理器提取了必要的数据,并且可以从该提取器获取自定义变量以显示在我的调试响应和我的 CSV 文件中(在将一些 sample_variables 添加到 user.properties 之后)。不幸的是,我未能找到有关如何使用这些响应创建 JSON 文件的更多信息。

在我的 reportgenerator.properties 文件中,我看到的与 json 相关的唯一部分是:

jmeter.reportgenerator.exporter.json.classname=org.apache.jmeter.report.dashboard.JsonExporter
jmeter.reportgenerator.exporter.json.property.output_dir=report-output

我正在寻找一些允许我编辑该 JSON 文件中的内容的设置,但我无法在文档中查找信息。我是否需要在另一个设置文件中发送或设置我的自定义变量?任何帮助澄清这一点将不胜感激!

标签: jsonjmeterexporterreportgenerator

解决方案


查看JMeter 源代码,您无法有效地控制从外部导出到 statistics.json 文件的内容,您将不得不修改 JsonExporter 类代码或提出自己的AbstractDataExporter实现并选择存储内容、存储位置和方式。

private void createStatistic(Map<String, SamplingStatistic> statistics, MapResultData resultData) {
    LOGGER.debug("Creating statistics for result data:{}", resultData);
    SamplingStatistic statistic = new SamplingStatistic();
    ListResultData listResultData = (ListResultData) resultData.getResult("data");
    statistic.setTransaction((String) ((ValueResultData)listResultData.get(0)).getValue());
    statistic.setSampleCount((Long) ((ValueResultData)listResultData.get(1)).getValue());
    statistic.setErrorCount((Long) ((ValueResultData)listResultData.get(2)).getValue());
    statistic.setErrorPct(((Double) ((ValueResultData)listResultData.get(3)).getValue()).floatValue());
    statistic.setMeanResTime((Double) ((ValueResultData)listResultData.get(4)).getValue());
    statistic.setMinResTime((Long) ((ValueResultData)listResultData.get(5)).getValue());
    statistic.setMaxResTime((Long) ((ValueResultData)listResultData.get(6)).getValue());
    statistic.setMedianResTime((Double) ((ValueResultData)listResultData.get(7)).getValue());
    statistic.setPct1ResTime((Double) ((ValueResultData)listResultData.get(8)).getValue());
    statistic.setPct2ResTime((Double) ((ValueResultData)listResultData.get(9)).getValue());
    statistic.setPct3ResTime((Double) ((ValueResultData)listResultData.get(10)).getValue());
    statistic.setThroughput((Double) ((ValueResultData)listResultData.get(11)).getValue());
    statistic.setReceivedKBytesPerSec((Double) ((ValueResultData)listResultData.get(12)).getValue());
    statistic.setSentKBytesPerSec((Double) ((ValueResultData)listResultData.get(13)).getValue());
    statistics.put(statistic.getTransaction(), statistic);
}

一个更简单的选择是使用灵活文件编写器将示例变量写入单独的文件


推荐阅读