如何在JMeter中统计循环请求到指定响应的耗时并生成报告
JMeter实现Job状态轮询耗时统计及报告生成方案
1. 前置准备:记录轮询开始时间
在While Controller之前添加一个JSR223 PreProcessor,写入以下代码记录轮询启动的时间戳:
// 记录开始时间,单位毫秒 vars.put("loopStartTime", String.valueOf(System.currentTimeMillis()));
2. 循环内补充字段提取
你现有逻辑已经提取了Status变量,需要新增提取逻辑从API响应中拿到jobID字段:
- 用JSON Extractor(如果响应是JSON格式)或者正则表达式提取器,将提取的jobID存为JMeter变量
jobID - 确保提取逻辑放在API请求的子节点下,保证每次请求都更新最新的字段值
3. 循环结束后计算耗时并生成报告
在While Controller之后添加一个JSR223 PostProcessor,写入以下代码完成耗时计算和报告写入:
long startTime = Long.parseLong(vars.get("loopStartTime")); long endTime = System.currentTimeMillis(); // 耗时默认单位为秒,要保留毫秒的话去掉/1000即可 long totalCost = (endTime - startTime) / 1000; vars.put("totalCost", String.valueOf(totalCost)); // 写入CSV报告,多线程运行时要加同步锁避免文件写入冲突 synchronized(this) { FileWriter fw = new FileWriter("job_status_report.csv", true); BufferedWriter bw = new BufferedWriter(fw); // 首行可以手动加表头:jobID,status,cost_time(秒) bw.write(vars.get("jobID") + "," + vars.get("Status") + "," + vars.get("totalCost") + "\n"); bw.close(); fw.close(); }
4. 可选:整合到JMeter原生报告
如果需要把三个字段同步到JMeter自带的HTML报告中,可以修改jmeter.properties配置:
- 找到
sample_variables配置项,修改为:sample_variables=jobID,Status,totalCost
配置后运行生成的.jtl结果文件会自带这三个字段,原生HTML报告中也可以直接查看和统计。
补充说明
你现有循环条件设置了最多300次轮询,若触发上限退出循环,报告中会自动记录非Ready的异常状态和对应耗时,不需要额外做判断。
内容的提问来源于stack exchange,提问作者JessieB
相关产品推荐
相关产品推荐

