Je suis nouveau à Gatling et Scala. Envoi de Get Request, le corps de la réponse est Array et je n'ai besoin d'extraire qu'un seul objet d'Array et de le publier dans Gatling. Quelqu'un peut-il m'expliquer comment le faire?
Voici mon exemple de code:
[{"id":"1","hairColor":"BROWN","age":24,"language":"English","birthDate":"1995-02-10"}, {"id":"2","hairColor":"YELLOW","age":30,"language":"Australian","birthDate":"1889-10-05"}, {"id":"3","hairColor":"BLACK","age":15,"language":"American","birthDate":"..."}, {"id":"4","hairColor":"RED","age":50,"language":"Russian","birthDate":"..."}]
Le résultat que j'obtiens est:
private val getUsers = exec( http("Get users") .get("/users") .check(status.is(200)) .check(bodyString.saveAs("Users")))
3 Réponses :
Vous pouvez facilement obtenir, mais vous devez définir quelle clé
Son exemple où j'ai utilisé 'id' par la clé
$. [*]. [? (@. id == '1')]
$. [*]
<= obtenir tous les éléments du tableau
. [? (@. id == '1')]
<= obtenir un élément dont l'id est égal à '1' (vous pouvez utiliser n'importe quelle valeur).
Ou n'importe quelle clé $. [*]. [? (@. hairColor == 'BROWN')]
Ensuite, ajoutez simplement
.check (jsonPath ("$. [*]. [? (@. id == '1')]"). saveAs ("myUser")
si vous passez à une vérification jsonPath, vous pouvez obtenir tous les objets utilisateur dans un vecteur qui a un bon support dans le Gatling EL
donc au lieu de
.body(StringBody("${Body.random().jsonStringify()}"))
vous pouvez utiliser
.body(StringBody("${Body(1).jsonStringify()}"))
puis lorsque vous venez passer vos appels ultérieurs, vous pouvez faire des choses comme
sélectionner le 1er utilisateur avec
.check(jsonPath("$..[?(@.id)]").findAll.saveAs("Users")))
sélectionnez un utilisateur aléatoire avec
.check(bodyString.saveAs("Users"))
Cette approche vous permettra également d'utiliser .forEach
pour interagir sur tous les enregistrements
J'ai trouvé une réponse par moi-même. Si je veux enregistrer n'importe quel objet du tableau, je peux le faire ->
private val getUsers = exec( http("Get users") .get("/users") .check(status.is(200)) .check(jsonPath("$[0]").find.saveAs("user")))
Bien sûr, je dois spécifier la valeur que je veux enregistrer mais dans mon exemple, je sauvegarde la première évaluer. Et plus tard, vous pouvez utiliser cette valeur pour d'autres demandes.
Avez-vous déjà essayé cela? stackoverflow.com/questions/42277962 /…
@jPO oui, je regardais cet exemple mais cela ne m'a pas aidé à résoudre mon problème. Mon exemple est différent.
quand vous dites «un utilisateur», voulez-vous juste l'id, ou avez-vous besoin de soumettre tout l'objet json pour un utilisateur?
@JamesWarr Je voudrais soumettre tout l'objet json pour l'utilisateur