如何在JMeter HTML报告中展示JSR223脚本计算的线程总时长?
如何在JMeter HTML报告中展示自定义线程总时长
要把你通过JSR223脚本计算的线程总时长放到HTML报告里,核心是让JMeter把这个自定义指标存入测试结果文件,再配置报告生成器读取并展示它,有两种常用方法:
方法一:给SampleResult添加自定义属性,配置报告显示
在JSR223脚本中保存指标
计算完线程总时长后,把它存为当前请求SampleResult的自定义属性,这样会写入到.jtl结果文件中。示例代码:// 替换成你实际计算出的线程总时长(单位:毫秒) def threadTotalDuration = 1500; // 把时长存入SampleResult的自定义属性,属性名自己定,比如THREAD_TOTAL_DURATION prev.getProperties().put("THREAD_TOTAL_DURATION", threadTotalDuration); // 同时可以把时长写到响应消息里,方便查看单个样本结果 prev.setResponseMessage("线程总时长:" + threadTotalDuration + "ms");这里
prev是JMeter内置的当前SampleResult对象,直接用就行。修改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)重新生成报告
用修改后的配置重新生成HTML报告,命令示例:jmeter -g /你的结果文件路径/results.jtl -o /报告输出目录/生成的报告表格里就会多一列显示你计算的线程总时长,配置了图表的话还能看到时长分布。
方法二:生成自定义样本直接展示
如果你的时长是整个线程组的总耗时,更直观的方式是生成一个专门的"线程总时长"样本,让它和普通请求一样出现在报告里:
在线程开始时记录启动时间
比如在JSR223 Sampler(线程组第一个元件)里存启动时间:vars.putObject("THREAD_START_TIME", System.currentTimeMillis());在线程结束时生成自定义样本
添加一个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
相关产品推荐
相关产品推荐

