You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:55:21