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")))
私はあなたが探しているリクエストを送信することができました(まだ404を受け取っていますが、それはサーバーサイドであるか、Gistが送信しているリクエストに何かが欠けている可能性があります)。秘訣は、JsonPathを完全に諦めることでした。
_.exec(http("Request_10")
.get("gatling1")
.headers(headers_10)
.check(jsonPath("$.result").is("SUCCESS"),
jsonPath("$.data[*]").ofType[Map[String,Any]].findAll.saveAs("pList")))
.foreach("${pList}", "player") {
exec(session => {
val playerMap = session("player").as[Map[String,Any]]
val playerId = playerMap("playerId")
session.set("playerId", playerId)
})
_
ここで、jsonPath
チェックはJSONオブジェクトをマップとして自動的に保存し、キーでプレーヤーIDにアクセスできます。値のタイプはAny
である必要はありません。すべての値が数値の場合は、Int
またはLong
を使用できます。 JsonPath
の問題点について詳しく知りたい場合は、このまま読み進めてください。
最初の問題は、JsonPath.query()
が探している値を返すだけではないということです。 JsonPath readme から:
JsonPath.query( "$。a"、jsonSample)は、Right(空でないイテレータ)を提供します。これにより、クエリに対して考えられるすべてのソリューションを繰り返すことができます。
さて、それがRight(non-empty iterator)
と言うとき、私はそれがイテレータが空ではなかったことを意味すると思いました。ただし、これを試してみると:
_val playerId = JsonPath.query("$.playerId", session("player").as[String]).right.get
println(playerId)
_
...「空のイテレータ」を出力します。 JsonPath
、jsonPath
チェック、またはその間の使用法に問題があるかどうかはわかりませんが、掘り下げたいドキュメントが十分ではありません。