如何在JMeter的POST请求中向JSON数组插入多个取值
问题根源
- 你最初的
__CSVRead函数用法不符合需求:__CSVRead(${companyId}.csv,next)仅会将文件读取指针移动到下一行,你写的表达式仅会读取1次ID值,不会循环读取CSV文件的所有行,因此只能拿到第一个ID。 - 后续修改CSV为单行带引号格式的操作引发了JSON格式错误:CSV读取出来的内容自带双引号,直接塞入JSON数组后会出现嵌套引号、逗号被识别为字符串内容的问题,接口无法将带多余符号的字符串转为
Int64类型,因此返回报错。
最优解决方案
直接使用JSR223预处理组件生成符合格式的ID数组,不需要修改原有CSV格式(保持每行一个ID的原始格式即可),操作步骤如下:
- 在发送POST请求的HTTP采样器前,新增JSR223预处理程序,语言选择
groovy - 填入以下代码:
// 读取对应用户的CSV文件 def csvFile = new File(vars.get("companyId") + ".csv") def idList = [] // 逐行读取ID,自动跳过空行 csvFile.eachLine { line -> def id = line.trim() if (id) { idList.add(id as Long) } } // 直接生成符合JSON格式的数组字符串存入变量 vars.put("idsArrayStr", new groovy.json.JsonBuilder(idList).toString())
- 修改HTTP请求的JSON请求体,直接引用生成好的变量即可:
{"Ids": ${idsArrayStr}, ......}
该方案会自动处理所有格式问题,不需要手动拼接逗号、引号,生成的数组完全符合JSON规范,不会出现类型转换错误。
内容的提问来源于stack exchange,提问作者simón
相关产品推荐
相关产品推荐

