如何在JMeter中实现每次迭代读取不同CSV文件
实现JMeter每次迭代读取一个独立CSV文件
方案一:文件名有规律时(如test101.csv、test102.csv)
这种情况可以通过计数器+CSV Data Set Config组合实现,步骤如下:
添加「计数器」元件:
- 起始值设为
101(对应你的第一个文件编号) - 增量设为
1 - 最大值设为
103(对应你的最后一个文件编号) - 引用名称填
fileNumber(自定义变量名,后续会用到) - 勾选「每次迭代递增」
- 起始值设为
添加「CSV Data Set Config」元件:
- 文件名栏填写:
c://Testing/test${fileNumber}.csv,通过变量拼接出每次迭代要读取的文件路径 - 根据你的CSV内容配置变量名、分隔符、编码等参数
- 若每个CSV文件仅包含一组数据,保持「一次仅读取一行」默认勾选即可;若文件有多行数据,可根据需求调整读取策略
- 文件名栏填写:
方案二:文件名无规律时(需读取文件夹下所有CSV文件)
如果文件名没有统一编号规则,可通过JSR223 PreProcessor动态获取文件列表并按顺序读取:
添加「JSR223 PreProcessor」到线程组下:
- 脚本语言选择Groovy(性能最优)
- 粘贴以下脚本:
// 目标文件夹路径 def folder = new File("c://Testing") // 获取文件夹下所有CSV文件并按名称排序 def csvFiles = folder.listFiles({ file -> file.name.endsWith('.csv') } as FileFilter).sort() // 首次执行时将文件列表和索引存入JMeter属性 if (!props.containsKey('csvFiles')) { props.put('csvFiles', csvFiles) props.put('currentFileIndex', 0) } // 获取当前要读取的文件索引和路径 def currentIndex = props.get('currentFileIndex') as int // 若迭代次数超过文件数量,重置索引实现循环读取(可选) if (currentIndex >= csvFiles.size()) { currentIndex = 0 props.put('currentFileIndex', 0) } def currentFile = csvFiles[currentIndex] // 将当前文件路径存入JMeter变量 vars.put('currentCsvFile', currentFile.getAbsolutePath()) // 递增索引 props.put('currentFileIndex', currentIndex + 1)
添加「CSV Data Set Config」元件:
- 文件名栏填写:
${currentCsvFile},直接引用脚本生成的当前文件路径变量 - 其他配置(变量名、分隔符等)根据你的CSV内容设置
- 文件名栏填写:
注意事项
- 线程组的「迭代次数」需设置为与CSV文件数量一致(若不需要循环读取)
- 确保JMeter有目标文件夹的读取权限
- 若CSV文件编码特殊,需在CSV Data Set Config中指定对应编码(如UTF-8、GBK)
内容的提问来源于stack exchange,提问作者mahaveerr R
相关产品推荐
相关产品推荐

