Gatling - Boucle dans tableau JSON
J'ai un bloc de code qui doit parcourir un tableau JSON qui est obtenu de réponse d'un service REST. (Plein de gist disponible ici.)
.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")))
}
Le format de la réponse de la première demande a été
{
"result": "SUCCESS",
"data": [
{
"playerId": 2
},
{
"playerId": 3
},
{
"playerId": 4
}
]
}
Et playerId
montre jusqu'à la session en
pList -> Vector({playerId=2, score=200}, {playerId=3, score=200}
Je vois dans la deuxième demande, l'organisme est
{"playerId":"Right(empty iterator)}
Prévu : 3 demandes avec le corps comme
{"playerId":1}
{"playerId":2}
{"playerId":3}
Je peux en boucle sur le tableau résultant de succès si je n'enregistrer que le playerIds:
.check(jsonPath("$.data[*].playerId").findAll.saveAs("pList")))
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à récupérer les requêtes que vous cherchez envoyé (même si encore une erreur 404, mais qui pourrait être côté serveur, ou à la demande de votre gist est l'envoi peut être raté quelque chose). L'astuce a été de renoncer à JsonPath entièrement:
Ici, le
jsonPath
case permet d'enregistrer automatiquement votre objet JSON comme une carte, et vous pourrez alors accéder à l'ID du joueur par clé. Le type de valeur ne doit pas êtreAny
, vous pouvez utiliserInt
ouLong
si toutes les valeurs sont des nombres. Si vous voulez plus d'info sur ce qui s'est passé avecJsonPath
, lire sur.Votre premier problème, c'est que
JsonPath.query()
n'est pas juste de retour de la valeur que vous recherchez. À partir de la JsonPath readme:Maintenant, quand il dit
Right(non-empty iterator)
, j'ai supposé que cela signifiait que l'itérateur n'était pas vide. Toutefois, si vous essayez ceci:...il imprime vide "itérateur". Je ne suis pas sûr de savoir si c'est un problème avec
JsonPath
, lejsonPath
vérifier, ou l'utilisation à quelque part entre les deux, mais il n'y a pas assez de documentation pour moi l'envie de creuser en elle.ofType
et/ouofType[Map]
peut être nouvelle dans la RC1 ou RC2.jsonPath
vérifier. Je pense que votre meilleur pari serait de poster une nouvelle question sur le groupe Google en ce qui concerne spécifiquementjsonPath().ofType[]
et s'il peut gérer imbriquée cartes/comment faire.