JMeter中字符串数组变量传入GraphQL被转为字符串如何解决?
JMeter传递字符串数组到GraphQL的实现方法
问题根因
JMeter默认存储的字符串类型变量如果直接包含[]格式的数组内容,在GraphQL请求的变量结构中如果被双引号包裹,会被整体识别为字符串,无法解析为数组类型。
可行解决方案
方案1:存储标准JSON格式数组字符串,引用时省略外层引号
在Groovy PostProcessor中生成数组后,直接转成标准JSON格式再存储为JMeter变量:
import groovy.json.JsonBuilder // 此处替换为你自己生成字符串数组的业务逻辑 def targetStrArray = ["user101", "user102", "user103"] // 转成标准JSON数组字符串后存储 vars.put("graphql_input_array", new JsonBuilder(targetStrArray).toString())
在GraphQL请求的Variables面板中直接引用变量,不要给变量外层加双引号:
{ "queryInput": { "userIds": ${graphql_input_array} } }
JMeter替换变量后会直接生成标准JSON数组结构,GraphQL可正常识别为数组类型。
方案2:存储数组对象,请求时动态转JSON
如果数组需要在多个地方复用逻辑,可以直接将数组对象存入JMeter变量,请求时再动态转JSON:
- Groovy PostProcessor中存储对象:
def targetStrArray = ["user101", "user102", "user103"] vars.putObject("raw_array_obj", targetStrArray)
- GraphQL变量中通过
__groovy函数动态转JSON:
{ "queryInput": { "userIds": ${__groovy(new groovy.json.JsonBuilder(vars.getObject("raw_array_obj")).toString(),)} } }
方案3:已有数组格式字符串的快速适配
如果你已经生成了符合JSON规范的数组字符串(比如内容为["a","b","c"]的字符串变量),只需要在GraphQL变量中引用时去掉外层双引号即可,不要写成"${your_variable}",直接写${your_variable}即可正常识别。
注意事项
- 不要手动拼接JSON数组字符串,使用
JsonBuilder会自动处理特殊字符转义,避免引号、换行等字符破坏JSON结构 - 如果数组元素为数字、布尔等非字符串类型,上述方法同样适用,
JsonBuilder会自动保留对应数据类型 - 不要在数组变量外层包裹多余的双引号,否则会被GraphQL识别为普通字符串
内容的提问来源于stack exchange,提问作者SheWolf
相关产品推荐
相关产品推荐

