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

如何在JMeter脚本中实现报告生成耗时统计及超时断言

解决方案

步骤1:记录触发报告的起始时间

在触发报告生成的HTTP POST请求下添加一个JSR223 PostProcessor,用以下脚本将当前毫秒级时间戳存入JMeter变量:

vars.put("startTime", System.currentTimeMillis().toString())

该操作会在触发请求执行完成后,把当前系统时间设为计时起点。

步骤2:在轮询请求中判断状态并计算耗时

在检查报告状态的HTTP请求下添加两个组件:

2.1 JSR223 PostProcessor(判断状态+计算总耗时)

用Groovy脚本解析响应,判断状态是否为“完成”,若是则计算从触发到完成的总耗时:

// 示例:假设状态在响应JSON的"status"字段下,根据实际响应格式调整解析逻辑
def responseText = prev.getResponseDataAsString()
def responseJson = new groovy.json.JsonSlurper().parseText(responseText)

if (responseJson.status == "完成") {
    def startTime = Long.parseLong(vars.get("startTime"))
    def endTime = System.currentTimeMillis()
    // 转换为分钟,保留两位小数
    def totalDuration = String.format("%.2f", (endTime - startTime) / 1000 / 60)
    vars.put("totalDuration", totalDuration)
}

若响应不是JSON格式(比如纯文本/HTML),直接用responseText.contains("完成")判断即可。

2.2 响应断言(验证耗时是否达标)

添加响应断言,配置如下:

  • 应用范围:勾选「Main Sample Only」
  • 响应字段:勾选「JMeter Variable」,变量名填totalDuration
  • 模式匹配规则:选择「Less Than」
  • 要测试的模式:填10
    这样就能直接断言总耗时是否小于10分钟,不满足则标记为测试失败。

步骤3:优化轮询逻辑(可选)

为避免无意义的轮询,给轮询请求加一个While Controller,设置条件为:

${__jexl3("${status}" != "完成",)}

需要先通过JSON Extractor或正则表达式提取器,从轮询响应中把状态值提取到status变量里,这样轮询会在状态变为“完成”时自动停止。

为什么之前的方法不适用?

  • Transaction Controller统计的是所有请求的执行时间总和,但轮询间隔的等待时间不会被计入,无法反映真实的从触发到完成的总耗时。
  • 累加各请求响应时间的方式同样忽略了轮询间隔的等待时间,得到的结果比实际耗时小,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:25:28