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

时间:2019-04-15 08:29:38

标签: scala gatling scala-gatling gatling-jsonpath

我遇到了发送GET请求的情况,该请求有时可以返回404,并且我不想在最终报告中将其报告为错误。 另外,如果该请求成功,则需要从json响应中提取多个值。

通常,当我独立使用时,我想使用的那两个动作对我来说很好

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

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

  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
  }

我正在使用加特林3.0.3

1 个答案:

答案 0 :(得分:1)

您可以使用可选检查

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