Gatling post 请求在正文中发送 GraphQl 突变不起作用
Gatling post request sending GraphQl mutation in body not working
// 我尝试将突变发送为 json
val testAPIScenario = scenario("Sample test")
.exec(http("graph ql sample test")
.post("https://demo.com/")
.body(RawFileBody("./src/gatling/resources/graphql/sample.json")).asJson
.header("content-type",value = "application/json")
.check(status.is(200))
)
val testAPIScenario = scenario("Sample test")
.exec(http("graph ql sample test")
.post("https://demo.com/")
.body(StringBody("\"query\":\""+getMutation()+"\",\"variables\":"+getVariables()+"}")).asJson
.header("content-type",value = "application/json")
.check(status.is(200))
)
还尝试使用 ElFileBody 发送它,在文本文件中保留变异。
只需要知道是否有任何方法可以在 gatling body 中发送 graphQl 突变
我检查了日志,请求在 graphql 上正常进行,但它给了我 400,我认为存在一些格式问题请指导我
您的代码中有几处错误。
- 正文路径
RawFileBody("./src/gatling/resources/graphql/sample.json")
非常脆弱,因为它取决于您启动进程的位置,如果文件系统上没有展开的项目(例如 Gatling Enterprise),它会中断。
更喜欢RawFileBody("graphql/sample.json")
- 值参数而不是函数参数
来自documentation, StringBody
takes an Expression
,意思是可以传递一个值,或者一个函数。
在您的代码中,您传递的是前者,因此 getMutation()
和 getVariables()
在传递值时仅被调用一次。
相反,您想传递一个函数,以便每次虚拟用户尝试构建和发送此请求时调用它们:
StringBody(session => "\"query\":\""+getMutation()+"\",\"variables\":"+getVariables()+"}")
// 我尝试将突变发送为 json
val testAPIScenario = scenario("Sample test")
.exec(http("graph ql sample test")
.post("https://demo.com/")
.body(RawFileBody("./src/gatling/resources/graphql/sample.json")).asJson
.header("content-type",value = "application/json")
.check(status.is(200))
)
val testAPIScenario = scenario("Sample test")
.exec(http("graph ql sample test")
.post("https://demo.com/")
.body(StringBody("\"query\":\""+getMutation()+"\",\"variables\":"+getVariables()+"}")).asJson
.header("content-type",value = "application/json")
.check(status.is(200))
)
还尝试使用 ElFileBody 发送它,在文本文件中保留变异。
只需要知道是否有任何方法可以在 gatling body 中发送 graphQl 突变
我检查了日志,请求在 graphql 上正常进行,但它给了我 400,我认为存在一些格式问题请指导我
您的代码中有几处错误。
- 正文路径
RawFileBody("./src/gatling/resources/graphql/sample.json")
非常脆弱,因为它取决于您启动进程的位置,如果文件系统上没有展开的项目(例如 Gatling Enterprise),它会中断。
更喜欢RawFileBody("graphql/sample.json")
- 值参数而不是函数参数
来自documentation, StringBody
takes an Expression
,意思是可以传递一个值,或者一个函数。
在您的代码中,您传递的是前者,因此 getMutation()
和 getVariables()
在传递值时仅被调用一次。
相反,您想传递一个函数,以便每次虚拟用户尝试构建和发送此请求时调用它们:
StringBody(session => "\"query\":\""+getMutation()+"\",\"variables\":"+getVariables()+"}")