如何用Groovy脚本读取CSV构建JMeter请求体?
解决JMeter中用Groovy从CSV构建JSON数组请求体的问题
你需要修改Groovy脚本,将CSV中的对象名转换为JSON数组格式的字符串并存储到变量中,以下是修正后的代码:
// 默认分隔符(如果CSV是一行多个值用逗号分隔则保留,否则可忽略) char SEPARATOR = ','; String csvFile = props.get("csvPathAndName") log.info('__________________________________________________________________________________________________________________________________________________________') log.info(csvFile) // 读取CSV文件并构建JSON数组字符串的方法 def readLines(String csvFile) { File file = new File(csvFile); // 读取文件所有行,去除每行首尾空格并过滤空行 List<String> objectNames = file.readLines().collect { it.trim() }.findAll { !it.isEmpty() } // 如果你的CSV是**单行多值**(比如一行是objectName1,objectName2,...),请替换上面的行为: // List<String> objectNames = file.text.split(SEPARATOR).collect { it.trim() }.findAll { !it.isEmpty() } // 将每个对象名包裹双引号,并用逗号连接成JSON数组元素格式 String jsonElements = objectNames.collect { "\"$it\"" }.join(', ') // 将结果存入JMeter变量listOfObjects vars.put("listOfObjects", jsonElements) } readLines(csvFile)
关键修改说明:
- 处理CSV内容:通过
collect { it.trim() }去除每个对象名的首尾空格,findAll { !it.isEmpty() }过滤空行/空值,避免生成无效的JSON元素。 - 构建JSON格式:用
collect { "\"$it\"" }给每个对象名添加双引号,再通过join(', ')将所有元素拼接成"obj1", "obj2", "obj3"的格式。 - 存储变量:将拼接好的字符串存入
listOfObjects变量,之后在HTTP请求的请求体中直接引用即可:{ [ ${listOfObjects} ] }
注意事项:
- 确保
csvPathAndName属性配置的是CSV文件的绝对路径,或者是相对于JMeter启动目录的相对路径。 - 如果CSV文件有表头,需要在读取时跳过第一行,可在
readLines后添加objectNames.remove(0)。
内容的提问来源于stack exchange,提问作者Breno Araripe
相关产品推荐
相关产品推荐

