如何正确使用 checkIf 和多个 jsonPath 提取

How to properly use checkIf with multiple jsonPath extractions

我有发送 GET 请求的情况,有时可能 return 404,我不想在最终报告中将其报告为错误。 此外,如果该请求成功,我需要从 json 响应中提取多个值。

通常,我想使用的这 2 个动作在独立使用时对我来说效果很好,即

  1. 从响应中提取多个 json 值:

    jsonPath("$..usrn").saveAs("usrn"),
    jsonPath("$..street_descriptor").saveAs("street_descriptor"),
    ....      
    )
    
    
  2. 处理 404:

  status.saveAs("responseStatus"),
  checkIf(session => session("responseStatus").as[Int] == 200) {
    substring(usualHeader).exists
  },
  checkIf(session => session("responseStatus").as[Int] == 404) {
    substring(errorHeader).exists
  }

但是,当我尝试将这两个操作结合起来时,我能够执行的操作(可以编译并实际提取数据)是以下代码。 但我觉得不用重复也可以做到

.check(
  status.saveAs("responseStatus"),
  checkIf(session => session("responseStatus").as[Int] == 200) {
    jsonPath("$..usrn").saveAs("usrn")
  },
  checkIf(session => session("responseStatus").as[Int] == 200) {
    jsonPath("$..street_descriptor").saveAs("street_descriptor")
  },
   ...
  checkIf(session => session("responseStatus").as[Int] == 404) {
    substring("404 error").exists
  }

我正在使用 Gatling 3.0.3

您可以使用可选检查

.check(
  status.in(200, 404),
  jsonPath("$..usrn").optional.saveAs("usrn"), 
  jsonPath("$..street_descriptor").optional.saveAs("street_descriptor")
)