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

如何在JMeter HTML报告中展示JSR223脚本计算的线程总时长?

如何在JMeter HTML报告中展示自定义线程总时长

要把你通过JSR223脚本计算的线程总时长放到HTML报告里,核心是让JMeter把这个自定义指标存入测试结果文件,再配置报告生成器读取并展示它,有两种常用方法:

方法一:给SampleResult添加自定义属性,配置报告显示

  1. 在JSR223脚本中保存指标
    计算完线程总时长后,把它存为当前请求SampleResult的自定义属性,这样会写入到.jtl结果文件中。示例代码:

    // 替换成你实际计算出的线程总时长(单位:毫秒)
    def threadTotalDuration = 1500;
    
    // 把时长存入SampleResult的自定义属性,属性名自己定,比如THREAD_TOTAL_DURATION
    prev.getProperties().put("THREAD_TOTAL_DURATION", threadTotalDuration);
    // 同时可以把时长写到响应消息里,方便查看单个样本结果
    prev.setResponseMessage("线程总时长:" + threadTotalDuration + "ms");
    

    这里prev是JMeter内置的当前SampleResult对象,直接用就行。

  2. 修改JMeter配置让报告识别这个属性
    找到JMeter安装目录bin下的user.properties(没有的话复制jmeter.properties重命名为user.properties),添加以下配置:

    # 指定要从结果文件中读取的自定义属性
    sample_variables=THREAD_TOTAL_DURATION
    # 配置报告表格的列,把自定义属性加进去
    report_generator.sample_table_columns=time,threadName,label,responseCode,responseMessage,THREAD_TOTAL_DURATION
    # 可选:添加自定义图表展示时长分布
    report_generator.graph.custom_thread_duration.classname=org.apache.jmeter.report.processor.graph.impl.CustomGraphConsumer
    report_generator.graph.custom_thread_duration.title=线程总时长分布
    report_generator.graph.custom_thread_duration.property.set=THREAD_TOTAL_DURATION
    report_generator.graph.custom_thread_duration.x_axis=样本序号
    report_generator.graph.custom_thread_duration.y_axis=时长(ms)
    
  3. 重新生成报告
    用修改后的配置重新生成HTML报告,命令示例:

    jmeter -g /你的结果文件路径/results.jtl -o /报告输出目录/
    

    生成的报告表格里就会多一列显示你计算的线程总时长,配置了图表的话还能看到时长分布。

方法二:生成自定义样本直接展示

如果你的时长是整个线程组的总耗时,更直观的方式是生成一个专门的"线程总时长"样本,让它和普通请求一样出现在报告里:

  1. 在线程开始时记录启动时间
    比如在JSR223 Sampler(线程组第一个元件)里存启动时间:

    vars.putObject("THREAD_START_TIME", System.currentTimeMillis());
    
  2. 在线程结束时生成自定义样本
    添加一个JSR223 Listener,监听线程结束事件并生成样本:

    if (ctx.getThread().isDone()) {
        def startTime = vars.getObject("THREAD_START_TIME");
        def endTime = System.currentTimeMillis();
        def totalDuration = endTime - startTime;
    
        // 创建自定义样本
        def sampleResult = new org.apache.jmeter.samplers.SampleResult();
        sampleResult.setSampleLabel("线程总时长统计");
        sampleResult.setResponseCode("200");
        sampleResult.setResponseMessage("总耗时:" + totalDuration + "ms");
        sampleResult.setStartTime(startTime);
        sampleResult.setEndTime(endTime);
        sampleResult.setTime(totalDuration);
        sampleResult.setSuccessful(true);
    
        // 把样本加入结果集
        ctx.getPreviousResult().addSubResult(sampleResult);
    }
    

    这样测试结束后,报告里会多一个名为"线程总时长统计"的样本,它的响应时间就是你计算的线程总时长,无需额外配置报告参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:15:47