Question

J'ai un test JMeter avec 2 groupes de discussion - le premier est un fil unique (ce qui crée un certain inventaire) et le second a plusieurs threads (qui achètent tout l'inventaire). J'utilise Assertions BeanShell et XPath Extracteurs pour analyser la valeur retournée (qui est XML) et des variables de magasin (comme les IDs des articles à acheter).

Mais, les valeurs qui sont créés dans le premier groupe de discussion, que ce soit extrait dans les variables standard de type ${jmeter} ou vars de type ${__BeanShell(vars.get("jmeter"))}, ne sont pas disponibles dans le deuxième groupe de discussion. Y at-il de toute façon de créer une variable dans le premier groupe de discussion et de le rendre visible à la seconde?

Était-ce utile?

La solution

Je n'ai pas pu le faire avec des variables (puisque ce sont locales à fils individuels). Cependant, je suis en mesure de résoudre ce problème avec des propriétés!

Encore une fois, mon premier ThreadGroup fait tout le mettre en place, et j'ai besoin des informations de ce travail soient disponibles pour chacun des fils dans la deuxième ThreadGroup. J'ai un Assertion BeanShell dans la première ThreadGroup ce qui suit:

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

Le $ {} StoreID a été extrait avec un extracteur XPath. Le BeanShell Assertion fait d'autres choses, comme la vérification que StoreID a été renvoyé de l'appel précédent, etc.

Quoi qu'il en soit, dans le second ThreadGroup, je peux utiliser la valeur de la propriété « StoreID » dans échantillonneurs ce qui suit:

${__property(storeid)}

Fonctionne comme un charme!

Autres conseils

D'après la documentation JMeter:

  

16.12 variables de partage entre les fils et les groupes de threads

     

Les variables sont locales à un fil d'un ensemble variable dans un thread ne peut pas être lu   un autre. C'est par la conception. Pour les variables qui peuvent déterminer   avant un test commence, voir Tests Paramétrage (ci-dessus). Si la valeur   On ne sait pas jusqu'à ce que le test commence, il y a différentes options:

     
      
  1. Stocke la variable en tant que propriété - sont globales à la   par exemple JMeter
  2.   
  3. Ecrire des variables à un fichier et les relire.
  4.   
  5. Utilisez l'espace de noms bsh.shared - voir 16.8.2 Variables de partage
  6.   
  7. Ecrivez classes Java
  8.   

Une autre façon de passer variable entre les fils est d'utiliser des modules JMeter-que communiquée par Andrey Botalov ci-dessous .

Mais je trouve qu'il est un peu déroutant pour l'utiliser première fois, mais il donne un contrôle total de la variable pendant le passage du fil à fil. Suivez mon exemple avec l'utilisation BeanShell et vous voyez comment il est facile:

stucture du projet Suivant faisant référence aux articles dans l'image ci-dessous:

(1.1) Ici, je créé variable personnalisée dans les variables définies par l'utilisateur (ou vous pouvez le faire avec BSF Proccessor - désactivé dans cet exemple (1.2))

(2.1) (2.4) I variable utilisée avec succès dans le premier fil - rien de spécial:)

(2.2) Ajouté BeanShell PostProcessor et personnalisé ma variable

(2.3) ajouté à la file d'attente

(3.1) Dans la deuxième fil - variable est tirée de la file d'attente - avec un nom que vous voulez. Mais attention, utiliser à bon escient Délai d'attente, parce que ce fil va attendre jusqu'à la fin précédente de sorte qu'il peut obtenir variable modifiée (expérience avec une réponse longue)

(3,2) (3,3) (3,4) qui a répété les étapes de l'utilisation et la modification de la variable

(3,5) variable est envoyé une nouvelle fois dans la nouvelle file d'attente - afin de fournir le nouveau nom à lui

(4.1) (4.2) (4.3) variable modifiée attrapée par nouvelle file d'attente fonctionne comme charme

Avertissement

  1. Si vous ajoutez plus de fils, puis ajouter un peu de contre à Enfiler groupe avec variables et ajouter ce nom variable pour nom la file d'attente - faire la même chose dans le groupe de discussion où vous essayez d'attraper la file d'attente si la file d'attente aura nom unique pour chaque fil (écrire un commentaire si vous avez besoin explenation plus clair)

  2. Si vous avez plus d'un http demande dans un processeur groupe de threads puis ajouter de la communication de fil avant comme un enfant de la dernière (ou autre si vous voulez réaliser quelque chose personnalisée) http demande

Play, modifier, personnaliser pour obtenir le meilleur résultat :) Ajout plus de threads peut entraîner un comportement non désiré de sorte que vous devez être vigilant.

Informations sur la structure du projet

Je trouve que je crois est la façon la plus simple à réaliser ce but.

Utilisez

Bean Shell PostProcessor

pour définir la variable ( http://jmeter.apache.org/usermanual /best-practices.html#bsh_variables )

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", "value");

OU si vous lisez à partir d'une variable

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("PC_CREATED_PROMO_CODE", vars.get("Extracted_PC_CREATED_PROMO_CODE"));

Et puis de l'autre groupe de threads, lisez via ( http: // jmeter. apache.org/usermanual/functions.html#__property )

${__property(PC_CREATED_PROMO_CODE)}

Communication Inter-fil à cet effet.

Il existe 2 méthodes pour l'utiliser:

  • PostProcessor / PreProcessor
  • Fonctions __fifoPut et __fifoPop

Dans mon PostProcessor opinion / PreProcessor est plus facile à utiliser.

Ceci est impossible à JMeter, parce que ce n'est pas le comportement du client normal (partage de paramètres entre les threads). Au lieu de cette utilisation un thread-groupe avec les contrôleurs:

Thread Group
+ Create inventory
+ + XPath
+ Loop
+ + Purchase inventory

Eh bien, c'est une façon de le faire; procédez comme suit et il va fonctionner, vous pouvez ensuite l'adapter à vos besoins! Les variables ne sont pas partagées entre les threads (JMeter appelle cela une caractéristique probablement :)). Mais les propriétés sont! Donc, définissez votre variable en propery comme ceci:

1) Cliquez sur votre plan de test et activer « des groupes d'exécution de la discussion consécutivement » -> ce qui rend les groupes de discussion et non commandés courent au hasard. (Vous pouvez ensuite l'ajuster, mais pour l'instant pour le faire travailler ..)

2) créer un ThreadGroup appelé 'setup', par exemple; en ce que le groupe de fils ajouter un échantillonneur BeanShell avec le code suivant:

import org.apache.jmeter.util.JMeterUtils;
JMeterUtils.setProperty("theNameOfYourNewProperty", "theValueOfYourPropery");

Alors maintenant, la propriété a été fixé! Si la valeur que vous souhaitez enregistrer en tant que propery est une variable allready (Utilisateur definded variable Variable ou reqex par exemple), vous pouvez faire:

JMeterUtils.setProperty("theNameOfYourNewProperty", vars.get("theNameOfYourVariable"));

3) ajouter une testgroup « test réel », par exemple, avec un nombre de fils supérieurs à 1;    ajouter un test et à ce test ajouter un préprocesseur BeanShell avec le code suivant:

import org.apache.jmeter.util.JMeterUtils;
vars.put("theNameOfYourNewProperty", JMeterUtils.getProperty("theNameOfYourNewProperty"));

vous avez donc maintenant créé une variable dans ce thread appelé theNameOfYourNewProperty qui a la valeur de votre propriété système theNameOfYourNewProperty. vous pouvez désormais accéder à votre test comme:

${theNameOfYourNewProperty}

Et cela fonctionnera pour chaque thread, non seulement que le premier fil ..

Let » donner un sujet une seconde vie :) Une autre façon de transférer des variables entre les threads est d'écrire / lire le fichier. Passe variables entre les fils

Une autre solution consiste à utiliser le simple Tableau Server pour gérer l'ensemble de données. Cette fonctionnalité a été ajouter le 1.2 JMeter Plugins.

« L'idée principale est d'utiliser un petit serveur http dans JMeter Plugins pour gérer les fichiers de jeux de données avec des commandes simples à get / Ajouter lignes de données dans les fichiers »

Regardez la documentation: http://jmeter-plugins.org/wiki/HttpSimpleTableServer/

Cordialement.

JMeter Bean Shell Assertion

Il suffit d'ajouter une assertion shell bean utiliser une fonction de propriété pour affecter la valeur à une variable (comme une variable globale) qui tiendra la valeur même après qu'il va à un autre fil.

  

groupe de fil >> Ajouter >> >> Assertions Bean Shell Assertion

${__setProperty(Global_variable_Name,${Variable_name_whose_Value_to_be_Passed})}

puis dans l'autre thread, vous pouvez appeler cette variable globale et peut l'utiliser

ci-dessous est la fonction que vous devez utiliser pour appeler la valeur stockée:

${__property(global_variable_name)}

https://medium.com/@priyank .it / JMeter-passing-variables entre-fils-a4dc09903b59

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top