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

JMeter中不使用定时器实现120~180秒随机Pacing的方法

无定时器实现120~180秒随机Pacing间隔方案

你完全可以不用任何定时器组件,通过脚本后置处理器实现需求,不需要给10个采样器逐个重复配置,具体操作如下:


核心逻辑

Pacing的本质是采样器执行完成后、下一个采样器启动前的等待间隔,我们只需要在采样器执行结束的节点,生成120~180秒范围内的随机值,阻塞对应时长即可。优先推荐用JSR223+Groovy实现,性能远高于BeanShell,如果你一定要用BeanShell,脚本逻辑完全通用。

操作步骤

  • 先把10个需要加Pacing的采样器放到同一个简单控制器下(如果这10个采样器就是线程组下的全部组件,直接操作线程组即可,不用额外加控制器)
  • 选中这个父容器(装了10个采样器的简单控制器/对应线程组),右键添加「后置处理器 -> JSR223 PostProcessor」,这个组件的作用域会自动覆盖容器下的所有10个采样器,不用逐个配置
  • 语言选择groovy(JMeter官方推荐的脚本语言,会编译缓存,高并发压测下性能远好于BeanShell),在脚本输入框粘贴对应代码即可

脚本1:采样器结束后硬等120~180秒

也就是不管采样器本身跑了多久,执行完就等120到180秒的随机时间,再跑下一个采样器:

// 生成120000毫秒(120秒)到180000毫秒(180秒)的随机等待时长
long waitMs = (long) (120000 + Math.random() * 60000);
// 阻塞等待
Thread.sleep(waitMs);

如果你要的是**相邻两个采样器的启动间隔落在120180秒区间**(即把采样器自身的执行耗时算进间隔里,而不是采样器跑完之后额外等满120180秒),用下面的脚本即可:

// 获取当前刚执行完的采样器自身耗时
long samplerCostMs = prev.getTime();
// 生成120~180秒的随机总间隔
long totalPacingMs = (long) (120000 + Math.random() * 60000);
// 计算实际需要等待的时长,如果采样器本身执行已经超过总间隔,就不再等待
long realWaitMs = totalPacingMs - samplerCostMs;
if (realWaitMs > 0) {
    Thread.sleep(realWaitMs);
}

BeanShell版本实现

和你猜测的路径一致,如果要使用BeanShell实现,只需要在添加后置处理器的时候选择「BeanShell PostProcessor」,脚本内容和上面完全一致,直接粘贴即可。注意BeanShell是解释执行,高并发压测场景下性能损耗会比Groovy高很多,非必要不推荐。

注意事项

  • 确认JSR223/BeanShell后置处理器的作用域只覆盖你需要加Pacing的10个采样器,不要误覆盖其他无关组件
  • 如果后续要调整Pacing范围,直接修改代码里的数值即可:基础等待时长是最小值对应的毫秒数,随机范围是(最大值-最小值)对应的毫秒数
  • 这种实现方式完全不依赖任何定时器组件,效果和Throughput Timer一致,逻辑完全可控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:51:20