Jmeter的Ultimate Thread Group采样器执行次数不一致如何解决
Ultimate Thread Group 采样器执行次数不一致解决方案
核心原因
Ultimate Thread Group 为时间驱动型线程组,默认测试到达预设的结束时间后,会直接中断所有运行中的线程,无论当前线程执行到业务流的哪一步。位于业务流靠前位置的采样器被触发的概率更高,所以会出现越靠前的采样器执行次数越多的情况,和标准线程组的「次数驱动、等待全流程跑完再结束」逻辑有本质差异。
可落地解决方法
- 调整线程终止策略
打开 Ultimate Thread Group 配置页,勾选Wait for samples to finish on stop选项,测试到达结束时间后不会直接中断线程,会等待所有正在执行的线程跑完当前完整业务流(从登录到登出的所有采样器)再终止,从根源避免中途截断导致的次数差。 - 封装业务流为固定执行单元
将4个采样器全部放到同一个循环控制器下,根据测试需求设置循环次数:比如要求每个线程跑1次完整业务流,就设置循环次数为1,同时将 Ultimate Thread Group 的hold load for时长调整为大于所有线程跑完一轮全流程的总耗时,保证线程存活时间足够覆盖完整业务流执行。 - 固定单线程执行次数(适用于单线程仅跑一次业务流的场景)
在上述循环控制器外层再加一层仅一次控制器,保证每个线程只会执行一次完整的登录到登出流程,配合上文的终止策略调整,可100%保证所有采样器执行次数一致。 - 全局次数主动控制(适用于要求固定总业务流次数的压测场景)
新增全局计数器逻辑:用用户定义的变量初始化总执行次数字段,在登出采样器的后置处理器中新增逻辑,每跑完一次完整业务流就给计数器加1,当计数器值达到你预设的总目标次数时,调用ctx.getEngine().stopTest()主动停止测试,完全规避时间驱动的自动截断问题。
注意事项
如果采样器之间有上下文依赖(比如登录返回的token用于后续接口鉴权),不要使用全局变量存储上下文数据,使用线程级别的变量存储,避免多线程并发时出现数据串用的问题。
内容的提问来源于stack exchange,提问作者Beklevir
相关产品推荐
相关产品推荐

