JMeter GraphQL压测:参数格式化错误致JSON请求体异常求助
解决JMeter GraphQL请求中参数引号未转义的问题
1. 修正JSR223预处理器的参数生成逻辑
不要直接将ArrayList存入listdata参数,而是把它序列化为合法的JSON数组字符串。Groovy自带JSON处理工具,示例代码如下:
import groovy.json.JsonBuilder // 读取CSV并构建ArrayList(替换为你的实际读取逻辑) def list = new ArrayList() // new File('你的CSV文件路径').eachLine { line -> list.add(line.trim()) } // 将ArrayList转为标准JSON数组字符串 def jsonArray = new JsonBuilder(list).toString() // 存入JMeter变量,必须用vars.put()存储字符串而非对象 vars.put("listdata", jsonArray)
注意:如果用
vars.putObject()存储ArrayList对象,JMeter替换参数时会调用对象的默认toString()方法,生成的格式不符合JSON规范,直接导致引号混乱。
2. 通过GraphQL变量传递参数
不要直接将${listdata}拼进Query字符串,改用GraphQL变量传递,让JMeter自动处理引号转义:
请求配置示例:
- Query字段:
query BatchOperation($itemList: [String!]!) { targetOperation(items: $itemList) { # 你的查询字段 } }
- Variables字段:
{ "itemList": ${listdata} }
这种方式下,listdata作为JSON数组直接嵌入variables结构,无需手动处理转义,JMeter会自动生成合法的请求体。
3. 验证与特殊字符处理
通过JMeter的View Results Tree组件检查请求体,合法格式应类似:
{ "query": "query BatchOperation($itemList: [String!]!) { targetOperation(items: $itemList) { ... } }", "variables": { "itemList": ["item1", "item2", "item3"] } }
如果CSV内容包含双引号、反斜杠等特殊字符,需要在读取时提前转义:
list.add(line.trim().replace("\\", "\\\\").replace("\"", "\\\""))
内容的提问来源于stack exchange,提问作者Gopirengaraj C
相关产品推荐
相关产品推荐

