JMeter ModuleController无选中控制器致测试终止问题咨询
问题根因
抛出ModuleController has no selected Controller报错的核心原因是脚本结构不符合JMeter组件的加载规则,导致Module Controller的引用路径断裂:
Include Controller加载外部JMX文件时,默认仅读取子文件中Test Fragment层级下的内容,会自动过滤子文件内的独立线程组、测试计划根节点等外层结构- 当前子JMX(Sub1.jmx、Sub2.jmx)内独立创建了线程组,再在线程组下通过Module Controller引用同文件的Test Fragment,主脚本加载子文件时,子文件的线程组节点被丢弃,Module Controller预先存储的目标Test Fragment路径直接失效,无法定位到对应组件。
修复操作
按以下步骤调整脚本结构即可恢复正常调用:
- 调整所有子JMX结构
删除子JMX内所有独立线程组,将原线程组下存放执行逻辑的Simple Controller、关联的Module Controller整体迁移到独立的Test Fragment下,和被调用的业务Test Fragment同级,均直接挂在子JMX的测试计划节点下。
标准子JMX结构参考:测试计划 ├─ Test Fragment: [TF]-Subscriptions (原线程组下的执行逻辑入口) │ └─ Simple Controller │ └─ Module Controller: [MC]-2. Login to portal/mobile (指向同文件内登录步骤片段) └─ Test Fragment: [TF]-Login to portal/mobile (被调用的登录业务片段) - 调整主JMX配置
主脚本Main.JMX内的线程组下保留原有Include Controller,直接指向对应子JMX的顶层执行逻辑Test Fragment即可,不要重复定义子脚本已有的流程逻辑。 - 重新关联引用
结构调整完成后,逐个打开子JMX内的所有Module Controller,在下拉选择列表中重新选中对应的目标Test Fragment,依次保存所有子JMX和主JMX文件。 - 验证修复效果
先单独在GUI模式下运行子JMX的Test Fragment,确认无路径报错后,再打开主JMX全量运行验证。
避坑提示
- 被Include Controller引用的子JMX内,不要放置独立线程组类组件,否则必然出现路径丢失、组件重复加载问题
- 所有Test Fragment、逻辑控制器不要使用重名,重名会导致Module Controller路径匹配失败
- JMeter 5.4.1版本存在Module Controller跨片段引用的已知缺陷,若完成以上调整后仍偶发报错,直接升级到5.5及以上稳定版本即可,无需额外修改脚本逻辑。
内容的提问来源于stack exchange,提问作者Chary Chelloji
相关产品推荐
相关产品推荐

