You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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中,让报告生成工具读取到这些指标:

  1. 配置PerfMon监听器输出CSV,勾选"Save data to CSV file"并设置输出路径。
  2. 编写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()
    
  3. 使用合并后的merged_results.csv生成HTML报告,在报告配置中添加对CPU_Usage列的引用,即可生成对应自定义图表。

方法三:自定义PerfMon监听器输出采样器结果(进阶)

若熟悉JMeter插件开发,可修改PerfMon监听器代码,让它在收集数据时生成虚拟采样器结果:

  • 基于PerfMon源码,添加逻辑创建SampleResult对象,将CPU/内存值存入采样器的自定义字段或响应数据。
  • 编译修改后的插件,替换JMeter的PerfMon jar包,这样PerfMon收集的数据会以采样器形式进入结果文件,直接被自定义图表引用。

内容的提问来源于stack exchange,提问作者Ian Hodgetts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:15:18