JMeter如何获取最后一次请求的Latency(请求耗时)
JMeter获取上一请求耗时实现固定间隔等待逻辑
完全可以实现,JMeter内置了直接取上一个采样器执行结果的对象,不需要额外装插件,推荐用性能最好的JSR223 + Groovy方案实现,步骤如下:
核心取值说明
首先明确两个容易混淆的时间字段,按需取用:
Latency:请求发出到收到第一个响应字节的首包耗时,通过prev.getLatency()获取- 请求完整持续时长:请求发出到接收完所有响应内容的总耗时,也就是你计算等待时间需要用到的值,通过
prev.getTime()获取
两个值的单位都是毫秒。
具体实现步骤
- 在你需要执行等待逻辑的位置(也就是上一个HTTP请求执行完、下一个业务逻辑执行前的位置)添加
JSR223 定时器,脚本语言选择Groovy(JMeter默认内置,性能远高于BeanShell) - 在脚本输入框粘贴以下代码:
// 读取上一个采样器的总执行耗时 def lastRequestCost = prev.getTime() // 计算需要等待的时长:总间隔10秒=10000毫秒,减去已消耗的请求时间,最小等待值设为0避免负数 def needWaitMs = Math.max(0, 10000 - lastRequestCost) // 直接返回等待时长,JSR223定时器会按返回的毫秒数自动执行等待 return needWaitMs
- 不需要额外配置其他元件,脚本运行时就会自动补足10秒的总间隔:如果上一个请求跑了3秒,就自动等7秒;如果上一个请求本身跑了12秒,就直接继续执行不等待。
注意事项
prev是JMeter内置的采样器结果对象,永远指向最近一次执行完成的采样器,中间加的定时器、前置/后置处理器、断言等非采样器元件不会改变它的取值- 如果你需要把这个等待时间存下来给其他元件用,可以在脚本里加一行
vars.put("waitTime", needWaitMs.toString()),后续就可以通过${waitTime}引用这个值- 不要用BeanShell实现同类逻辑,高并发场景下BeanShell的性能损耗会导致压测结果失真
内容的提问来源于stack exchange,提问作者bennex
相关产品推荐
相关产品推荐

