Gatling场景检查响应体的确切内容

Gatling scenario check the exact content of the response body

我正在发送如下请求,并希望响应正文为 ""(请参阅下面的检查):

  val runGraphScn = scenario("runGraph Scenario")
    .exec(http("POST runGraph")
      .post("/runGraph")
      .body(InputStreamBody(getClass.getResourceAsStream("/rungraph_req_body.json")))
      .check(
        status is 200,
        bodyString is ""
      )
    )

但是当我 运行 场景时,我发现它失败了 bodyString.find.is(), found ""

================================================================================
2020-07-24 17:09:20                                          55s elapsed
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=1      KO=2     )
> POST runGraph                                            (OK=0      KO=1     )
> GET getProject                                           (OK=1      KO=0     )
> POST /runGraphResult                                     (OK=0      KO=1     )
---- Errors --------------------------------------------------------------------
> bodyString.find.is(), found ""                                      1 (50.00%)
> status.find.is(200), but actually found 404                         1 (50.00%)

如何检查响应正文是否为空?

我无法重现(用 master 分支试过)所以我怀疑你实际上有一些不可打印的字符,无论是在你的响应正文中,还是在你的预期结果中。

请检查您的内容长度和模拟。

如果这不是问题,请提供 Short, Self Contained, Correct (Compilable), Example

关于 InputStreamBody(getClass.getResourceAsStream("/rungraph_req_body.json")) 的附注:过于复杂,您应该只使用 RawFileBody("rungraph_req_body.json")

您的回复正文确实是""。不是空的,而是字面上的两个引号。如果您的检查是 bodyString is "\"\"".

,则测试将通过

我的猜测是,在您编写的服务器代码中,您 returned "",一个空字符串。并且 HTTP 框架 json 对其进行了编码,并在响应中发送了两个双引号。

可以turn on logging for Gatling看得更清楚