如何将PerfMon插件统计数据整合到JMeter标准HTML报告中
解决PerfMon数据在JMeter HTML自定义图表中展示的方法
方法一:用JSR223 Sampler直接采集系统指标(推荐)
既然自定义图表依赖采样器数据,直接用采样器采集CPU/内存等指标,生成的采样结果能直接被HTML报告识别:
- 添加JSR223 Sampler到测试计划,设置采样间隔(比如和PerfMon一致的10秒)
- 在Sampler的脚本框中写入Groovy代码,调用系统API获取指标:
示例(用Java自带API获取CPU使用率,适配JMeter 5.0+):import com.sun.management.OperatingSystemMXBean import java.lang.management.ManagementFactory OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class) double cpuUsage = osBean.getProcessCpuLoad() * 100 // 转换为百分比格式 // 把值存入变量,供自定义图表引用 vars.put("system_cpu", String.format("%.2f", cpuUsage)) // 也可将值设为采样器响应时间,方便报告直接关联展示 SampleResult.setResponseTime((long)(cpuUsage * 100)) - 若需采集远程服务器指标,可通过SSH Sampler执行
top/vmstat等命令,解析输出后存入变量。 - 在HTML报告配置文件(
user.properties或reportgenerator.properties)中添加自定义图表配置,引用上述变量:reportgenerator.graph.custom_system_cpu.title=System CPU Usage reportgenerator.graph.custom_system_cpu.property=system_cpu reportgenerator.graph.custom_system_cpu.x_axis=Time reportgenerator.graph.custom_system_cpu.y_axis=CPU (%)
方法二:合并PerfMon CSV到JMeter结果文件
利用PerfMon输出的CSV数据,将其合并到JMeter测试结果CSV中,让报告生成工具读取到这些指标:
- 配置PerfMon监听器输出CSV,勾选"Save data to CSV file"并设置输出路径。
- 编写Groovy脚本(可放在JSR223 Listener的测试计划收尾阶段执行),读取两个CSV文件并按时间戳对齐合并:
示例脚本逻辑:def jmeterResultFile = new File("jmeter_results.csv") def perfmonFile = new File("perfmon_results.csv") def mergedFile = new File("merged_results.csv") // 读取PerfMon数据,按时间戳存储 def perfmonData = [:] perfmonFile.eachLine { line -> if (!line.startsWith("timestamp")) { // 跳过表头 def parts = line.split(",") def timestamp = parts[0].toLong() perfmonData[timestamp] = parts[2] // 假设第三列为CPU使用率 } } // 读取JMeter结果,添加CPU数据列 def writer = mergedFile.newWriter() jmeterResultFile.eachLine { line, index -> if (index == 0) { writer.writeLine(line + ",CPU_Usage") // 新增表头 } else { def parts = line.split(",") def timestamp = parts[0].toLong() // 匹配最接近的PerfMon数据 def closestTimestamp = perfmonData.keySet().find { Math.abs(it - timestamp) < 1000 } def cpuValue = closestTimestamp ? perfmonData[closestTimestamp] : "0" writer.writeLine(line + "," + cpuValue) } } writer.close() - 使用合并后的
merged_results.csv生成HTML报告,在报告配置中添加对CPU_Usage列的引用,即可生成对应自定义图表。
方法三:自定义PerfMon监听器输出采样器结果(进阶)
若熟悉JMeter插件开发,可修改PerfMon监听器代码,让它在收集数据时生成虚拟采样器结果:
- 基于PerfMon源码,添加逻辑创建
SampleResult对象,将CPU/内存值存入采样器的自定义字段或响应数据。 - 编译修改后的插件,替换JMeter的PerfMon jar包,这样PerfMon收集的数据会以采样器形式进入结果文件,直接被自定义图表引用。
内容的提问来源于stack exchange,提问作者Ian Hodgetts
相关产品推荐
相关产品推荐

