1
votes

Gatling: Comment extraire un objet d'un tableau?

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")))


4 commentaires

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


3 Réponses :


1
votes

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")


0 commentaires

2
votes

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


0 commentaires

1
votes

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.


0 commentaires