json - 如何使用 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 文件中的内容的设置,但我无法在文档中查找信息。我是否需要在另一个设置文件中发送或设置我的自定义变量?任何帮助澄清这一点将不胜感激!
解决方案
查看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);
}
一个更简单的选择是使用灵活文件编写器将示例变量写入单独的文件
推荐阅读
- apache-spark - 高效批处理 Spark 数据帧以调用 API
- reactjs - 如何避免 redux-toolkit 中出现重复的 reducer
- html - 什么是错误无法从给定项目获取上下文?
- ios - 当我尝试在视图之间转换时,某些数据没有出现这样的 UIImageViews:Xcode
- linux - 如何为 Docker 使用制作跨操作系统的 sh 脚本?
- php - Laravel:仅对 Intranet 应用程序使用密码身份验证
- c# - .NET 实体框架和存储过程
- python-3.8 - 检查什么程序创建了一个文件
- css - 我页面周围的边框正在阻止元素悬停工作
- java - Spring Boot:执行最佳实践