13

REST サービスの応答から取得した JSON 配列をループする必要があるコードのブロックがあります。(完全な要旨はこちらから入手できます。)

.exec(http("Request_1")
  .post("/endPoint")
  .headers(headers_1)
  .body(StringBody("""REQUEST_BODY""")).asJSON
  .check(jsonPath("$.result").is("SUCCESS"))
  .check(jsonPath("$.data[*]").findAll.saveAs("pList")))
.exec(session => {
  println(session)
  session
})
.foreach("${pList}", "player"){
 exec(session => {
    val playerId = JsonPath.query("$.playerId", "${player}")
    session.set("playerId", playerId)
  })
 .exec(http("Request_1")
    .post("/endPoint")
    .headers(headers_1)
    .body(StringBody("""{"playerId":"${playerId}"}""")).asJSON
    .check(jsonPath("$.result").is("SUCCESS")))

}

最初のリクエストのレスポンス形式は

{
  "result": "SUCCESS",
  "data": [
    {
      "playerId": 2
    },
    {
      "playerId": 3
    },
    {
      "playerId": 4
    }
  ]
}

そしてplayerId、セッションに次のように表示されます

pList -> Vector({playerId=2, score=200}, {playerId=3, score=200}

2番目のリクエストで、本文が表示されています

{"playerId":"Right(empty iterator)}

予想: 本文が次の 3 つのリクエスト

 {"playerId":1}
 {"playerId":2}
 {"playerId":3}

playerIds だけを保存すると、結果の配列を正常にループできます。

.check(jsonPath("$.data[*].playerId").findAll.saveAs("pList")))
4

1 に答える 1