Variables de transmission JMeter entre les groupes de threads

Dans ce didacticiel JMeter, nous examinons comment nous pouvons partager et transmettre des variables entre des groupes de threads.

Lors du développement de scripts JMeter avancés, vous aurez très probablement plusieurs groupes de threads. Chaque groupe de threads exécutera des requêtes différentes.

Un bon exemple de ceci est lorsque nous devons authentifier les utilisateurs avec des jetons au porteur. Un groupe de threads effectue l'authentification et enregistre le jeton. Un autre groupe de threads doit accéder à ce jeton et l'utiliser dans une autre demande.


Par conséquent, nous avons besoin d'un mécanisme pour passer des variables entre les groupes de threads.



Passer des variables entre les groupes de threads dans JMeter

Pour cet exemple, notre plan de test aura deux groupes de threads. Le premier groupe de threads envoie une requête GET à un service Web. Nous utilisons ensuite le Extracteur JSON plugin pour analyser la réponse JSON.


À l'aide de JSONPath, nous extrayons la valeur d'une clé particulière et la sauvegardons en tant que variable JMeter.

Voici à quoi ressemble notre requête JMeter:

Le résultat de la demande ci-dessus produit la réponse suivante au format JSON:


et notre JSONPath pour extraire la première URL ressemble à ceci:

La valeur de la requête JSONPath est enregistrée sous first_url. Cette variable n'est accessible que dans le même groupe de threads et nous pouvons obtenir sa valeur en utilisant ${first_url}. Maintenant, comment allons-nous rendre cette variable accessible via d'autres groupes de threads?


La réponse est d'utiliser BeanShell Assertion pour enregistrer la variable en tant que propriété globale. De cette façon, nous pouvons passer des variables entre les groupes de threads.

Pour ajouter une assertion BeanShell, cliquez avec le bouton droit sur Plan de test> Ajouter> Assertion> Assertion BeanShell

Dans notre assertion BeanShell, nous pouvons entrer le code suivant

${__setProperty(first_url, ${first_url})};


Maintenant, dans le groupe de threads 2, nous pouvons accéder directement à cette variable en utilisant ${__property(first_url)} comme indiqué ci-dessous:

Ou, nous pouvons utiliser un BeanShell PreProcessor pour manipuler la variable:


Dans le préprocesseur BeanShell, nous pouvons accéder à la variable transmise depuis un autre groupe de threads, en utilisant props.get('name_of_variable'). Nous pouvons ensuite effectuer une manipulation de String et enregistrer le résultat en tant que nouvelle variable.

Dans l'exemple ci-dessus, nous supprimons le http:// à partir de la variable qui a été transmise par le Thread Group 1, et nous enregistrons le résultat sous la forme de variable host.

La variable host est maintenant local au Thread Group 2 et y accède directement en utilisant ${host} comme indiqué ci-dessous: