web-dev-qa-db-ja.com

ガトリングに返されたjson応答の解析

サーバーからガトリングに返された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を取得するにはどうすればよいですか?

12
user1075958

もう少し 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
})
24
millhouse