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

Gatling发送携带GraphQL mutation的Post请求返回400如何解决?

400错误核心原因为GraphQL请求的JSON结构不符合服务端要求,常见错误包括:请求体漏外层JSON结构、query内容里的特殊字符未转义、变量格式非法。以下是正确实现方式:


方案1:使用ElFileBody(最推荐,无需手动处理转义)

该方案适合参数动态变化的场景,Gatling会自动处理占位符替换和格式转义,出错概率最低。

  1. 首先在src/gatling/resources/graphql目录下新建sample.json,严格按照以下结构编写:
{
  "query": "mutation 你的Mutation名($参数名: 参数类型!) {\n  调用的mutation方法(参数名: $参数名) {\n    返回字段1\n    返回字段2\n  }\n}",
  "variables": {
    "参数名": "${动态参数占位符}"
  },
  "operationName": "你的Mutation名"
}

注意:不要直接把mutation字符串放在文件里,必须套上外层包含query的JSON结构。

  1. Gatling代码写法:
val testAPIScenario = scenario("GraphQL Mutation测试")
  // 如果有动态参数可以接数据源,没有可删除下行
  .feed(csv("你的参数数据源.csv").circular)
  .exec(
    http("GraphQL接口调用")
      .post("https://demo.com/你的接口路径")
      // 路径直接写resources下的相对路径即可
      .body(ElFileBody("graphql/sample.json")).asJson
      .check(status.is(200))
  )

方案2:使用StringBody手动拼接

如果需要动态生成mutation内容,用Scala三引号避免手动转义双引号,同时补全JSON结构:

val testAPIScenario = scenario("GraphQL Mutation测试")
  .exec(
    http("GraphQL接口调用")
      .post("https://demo.com/你的接口路径")
      .body(StringBody(
        s"""{
          "query": "${getMutation().replace("\"", "\\\"").replace("\n", "\\n")}",
          "variables": ${getVariables()}
        }"""
      )).asJson
      .check(status.is(200))
  )

注意:必须对mutation内容里的双引号、换行做转义,getVariables()返回的必须是合法JSON字符串,不能有语法错误。


调试方法

如果仍返回400,添加日志打印实际请求和返回内容,根据服务端返回的具体错误提示调整:

val testAPIScenario = scenario("GraphQL Mutation测试")
  .exec(
    http("GraphQL接口调用")
      .post("https://demo.com/你的接口路径")
      .body(ElFileBody("graphql/sample.json")).asJson
      .check(status.saveAs("httpStatus"))
      .check(bodyString.saveAs("responseBody"))
  )
  .exec { session =>
    println(s"返回状态码:${session("httpStatus").as[Int]}")
    println(s"返回内容:${session("responseBody").as[String]}")
    session
  }

内容的提问来源于stack exchange,提问作者sourabh.gangoli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:12:02