JMeter基于时长测试提前终止,如何让线程完成Transaction Controller再停止?
让JMeter线程完成事务后再终止的配置方法
当然可以实现,以下是两种可行的配置方案:
方案1:线程组核心配置直接生效
在线程组的设置界面里,找到**"延迟线程直到所有采样器完成"**选项并勾选。这个配置会让测试时长到达后,线程不会立刻终止,而是继续完成当前正在执行的Transaction Controller以及其中所有采样器的流程,直到整个事务执行完毕才停止。
方案2:自定义条件控制(更精细场景)
如果需要针对特定Transaction Controller做等待控制,而非所有采样器,可以按以下步骤操作:
- 在每个
Transaction Controller的末尾添加一个Test Action采样器,设置等待时间为1毫秒(仅作为占位,无实际等待作用)。 - 给线程组添加If Controller,使用JEXL3表达式判断对应事务是否已完成,示例表达式:
(把${__jexl3(${__jm__[你的事务控制器名称]__status} == null || ${__jm__[你的事务控制器名称]__status} != 'success',)}[你的事务控制器名称]替换成实际的控制器名,每个事务对应一个If Controller) - 将Test Action采样器放入对应的If Controller中,这样线程会一直等待,直到该事务控制器执行成功才会结束。
关键注意点
- 启用方案1后,测试实际结束时间会比设定的时长略长,具体取决于最后一批线程完成剩余事务的耗时。
- 确保线程组的循环次数、线程数等参数不会与时长设置冲突,避免出现无限循环的情况。
内容的提问来源于stack exchange,提问作者Pradeep Reddy
相关产品推荐
相关产品推荐

