解析Json的回应回到了Gatling

时间:2014-12-16 22:14:21

标签: json scala gatling

我正在尝试解析服务器返回给gatling的json响应。

我对服务器的回复是:

SessionAttribute(
  Session(
    GetServices,
    3491823964710285818-0,
    Map(
      gatling.http.cache.etagStore -> Map(https://api.xyz.com/services -> ), 
      gatling.http.cache.lastModifiedStore -> Map(https://api.xyz.com/services -> ),
      myresponse -> {
        "created":"2014-12-16T22:06:59.149+0000",
        "id":"x8utwb2unq8uey23vpj64t65",
        "name":"myservice",
        "updated":"2014-12-16T22:06:59.149+0000",
        "version":null
      }),
    1418767654142,622,
    OK,List(),<function1>),id)

我在我的剧本中这样做:

val scn = scenario("GetServices")
          .exec(http("Get all Services")
          .post("/services")
          .body(StringBody("""{ "name": "myservice" }""")).asJSON
          .headers(sentHeaders)
          .check(jsonPath("$")
          .saveAs("myresponse"))
).exec(session => {
  println(session.get("id"))
  session
})

仍在打印整个回复。如何才能检索"x8utwb2unq8uey23vpj64t65"

的ID

1 个答案:

答案 0 :(得分:21)

最简单的方法是使用jsonPath来提取所需的id,将 存储在自己的变量中供以后使用。 请记住,jsonPath仍然是CheckBuilder,因此您无法直接访问结果 - 它可能无法匹配。

将它转换为Option[String]似乎是合理的做法。

所以你的最后几行将成为:

    ...
    .check(
      jsonPath("$.id").saveAs("myresponseId")
    )
  )
).exec(session => {
  val maybeId = session.get("myresponseId").asOption[String]
  println(maybeId.getOrElse("COULD NOT FIND ID"))
  session
})