JMeter中JSR223预处理器生成列表时ForEach Controller未触发
问题分析与解决
核心原因
你通过vars.put("filelist", varList)将Groovy List对象存入JMeter变量,但For Each Controller无法直接识别Groovy List类型的变量,它仅支持遍历前缀_数字格式的JMeter变量序列(例如filelist_1、filelist_2)。
修复步骤
1. 修正JSR223读取文件代码
修改代码生成带索引的JMeter变量,同时保留列表用于调试:
import java.io.File // 注意路径转义:反斜杠需写双份,或改用正斜杠 File file = new File("D:\\testdata\\trunk\\version2\\Jmeter\\loadscript\\Files\\txt\\test") String[] arr = file.list() // 生成带索引的变量,供For Each Controller遍历 for (int i = 0; i < arr.length; i++) { vars.put("filelist_" + (i + 1), arr[i]) } // 可选:将列表存为对象,方便Debug查看完整内容 vars.putObject("filelist", arr)
2. 配置For Each Controller
- 输入变量前缀:填写
filelist - 勾选数字起始于1
- 输出变量名称:设置为
current_file(后续HTTP请求中用${current_file}引用当前文件名) - 确保控制器下的HTTP请求处于启用状态,且测试计划线程数至少为1
3. 额外优化(可选)
如果需要在HTTP请求中传入完整文件路径而非仅文件名,可修改循环内的赋值逻辑:
vars.put("filelist_" + (i + 1), file.getAbsolutePath() + File.separator + arr[i])
内容的提问来源于stack exchange,提问作者Mani Maran
相关产品推荐
相关产品推荐

