While Controller执行完成后未执行后续Thread Group问题咨询
我来帮你分析这个问题——你遇到的情况其实是Stop thread on EOF: True这个配置导致的线程强制终止,打断了正常的测试流程。
问题根源
当你开启Stop thread on EOF: True时,JMeter会在CSV读取到末尾(无法获取下一行数据)的瞬间强制终止当前线程,这种终止是立即生效的:线程不会完成当前的While Loop迭代,也不会以"正常结束"的状态退出第一个Thread Group。JMeter在默认逻辑下,只有当前一个Thread Group的所有线程都正常完成时,才会触发下一个Thread Group的执行,而这种异常终止会让JMeter误以为第一个Thread Group的执行还没完全结束,所以第二个Thread Group(Submit Order)就被卡住了。
解决方案(推荐方法)
最可靠的做法是让线程正常退出循环,而不是强制终止,具体步骤如下:
调整CSV Data Set Config设置
打开你的CSV配置元件,把Stop thread on EOF: True改为False,保持Recycle on EOF: False不变。这样当读取到CSV末尾时,线程不会被强制停止,而是会把对应的变量置为空。修改While Loop的退出条件
找到你的While Loop Controller,将它的循环条件修改为:${__jexl3("${counter}" != "",)}这里的
${counter}替换成你CSV第一列实际对应的变量名(如果你的变量名不是这个的话)。这个条件的作用是:只要counter变量不为空,就继续循环;当读取到CSV末尾时,counter会变成空字符串,循环就会正常退出。验证效果
你可以添加一个Debug Sampler和View Results Tree元件,查看counter变量的变化:当读取到最后一行后,下一次迭代counter会为空,循环自动退出,线程正常结束第一个Thread Group,之后JMeter就会自动启动第二个Thread Group执行。
备选方案(仅当必须保留强制终止时使用)
如果你的测试场景一定要用Stop thread on EOF: True,可以尝试这个方法:
点击测试计划的根节点,勾选Run thread groups consecutively (i.e. one after another)选项。这个设置会强制JMeter严格按顺序执行Thread Group,不管前一个Thread Group的线程是正常还是异常终止,只要所有线程都停止了,就会执行下一个。不过这种方法可能带来未知的资源泄漏问题,所以优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者Vaibhav Jadia

