JMeter中如何逐行读取文本文件并作为REST API请求JSON体
解决JMeter逐行读取TXT文件并递增行号提交请求的问题
问题场景
需要读取每行都是JSON消息的TXT文件,将每行内容作为REST API请求的JSON体,实现每次请求自动取下一行提交,但当前JSR223预处理器固定行号为1,导致每次请求都只发送第1行内容。
解决方案
1. 修改JSR223预处理器代码
使用JMeter变量存储当前行号,每次请求后自动递增,替换原有代码为:
// 替换为你的TXT文件实际路径 def filePath = "/path/to/your/file.txt" def file = new File(filePath) def lines = file.readLines() // 获取当前行号,首次请求时默认从1开始 def currentLine = vars.get("currentLine") ?: "1" def lineNumber = currentLine as int if (lineNumber <= lines.size()) { // 读取对应行的JSON内容 def lineContent = lines[lineNumber - 1] vars.put("extractedLine", lineContent) // 递增行号并保存到JMeter变量中 vars.put("currentLine", (lineNumber + 1).toString()) } else { log.warn("已读取完文件所有行,文件共包含${lines.size()}行") // 可选:若需要循环读取文件,可取消下面注释重置行号 // vars.put("currentLine", "1") }
2. 配置线程组循环次数
- 若已知文件总行数,直接将线程组的循环次数设置为对应数值;
- 若不确定总行数,可先通过代码将行数存入变量,再结合
__P()函数或配置元件动态设置循环次数。
3. 保持HTTP请求体配置
HTTP请求的Body Data仍设置为 ${extractedLine},确保每次请求都会加载当前行的JSON内容。
内容的提问来源于stack exchange,提问作者NPAL
相关产品推荐
相关产品推荐

