Frage

Ich habe einen JMeter-Test mit 2 Themen Gruppen - die erste ist ein einzelner Thread (die einige Inventar erstellt) und die zweite hat mehrere Threads (die alle das Inventar kaufen). Ich benutze Beanshell Assertions und XPath Extraktoren den zurückgegebenen Wert zu analysieren (die XML ist) und speichern Variablen (wie die IDs der Elemente direkt zu bestellen).

Aber die Werte, die in der ersten Themen-Gruppe erstellt werden, ob in Standard ${jmeter} Typ Variablen extrahiert oder ${__BeanShell(vars.get("jmeter"))} Typ Vars, sind in der zweiten Thread-Gruppe nicht zur Verfügung. Gibt es trotzdem eine Variable in der ersten Fadengruppe zu erstellen und sie sichtbar auf den zweiten machen?

War es hilfreich?

Lösung

Ich war nicht in der Lage diese mit Variablen zu tun (da diese auf einzelne Fäden lokal sind). Aber ich war in der Lage, dieses Problem mit Eigenschaften zu lösen!

Auch hier mein erster Thread tut all das aufgebaut, und ich brauche einige Informationen von dieser Arbeit zu jedem der Themen in dem zweiten Thread zur Verfügung zu stehen. Ich habe eine Assertion in Beanshell ersten Thread mit dem folgenden:

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

Die $ {StoreID} wurde mit einem XPath-Extractor extrahiert. Die Assertion Beanshell hat andere Sachen, wie die Überprüfung, dass StoreID aus dem vorherigen Aufruf zurückgegeben wurde, etc.

Wie auch immer, in dem zweiten Thread ich den Wert der „StoreID“ Eigenschaft in Samplers mit dem folgenden verwenden:

${__property(storeid)}

Funktioniert wie ein Zauber!

Andere Tipps

Nach JMeter Dokumentation:

  

16,12 Teile Variablen zwischen Fäden und Fadengruppen

     

Variablen sind lokal für einen Faden ein variabler Satz in einem Thread kann nicht eingelesen werden   Ein weiterer. Das ist von Entwurf. Für Variablen, die bestimmt werden kann,   bevor ein Test beginnt, siehe Tests parametrieren (siehe oben). Wenn der Wert   wird erst in dem Testbeginn bekannt ist, gibt es verschiedene Möglichkeiten:

     
      
  1. Speichern Sie die Variable als Eigenschaft - Eigenschaften global sind die   JMeter Instanz
  2.   
  3. Variablen in eine Datei schreiben und lesen sie.
  4.   
  5. Verwenden Sie den bsh.shared Namespace - siehe 16.8.2 Freigabe Variablen
  6.   
  7. Schreiben Sie Ihre eigene Java-Klassen
  8.   

Eine weitere Möglichkeit, variable zwischen den Fäden zu passieren ist jmeter-Plug-in wie Andrey Botalov unten erwähnt zu verwenden.

Aber ich fand, dass es ein wenig verwirrend ist es erstmals zu verwenden, aber es gibt die volle Kontrolle von Variablen während von Thread vorbei einzufädeln. Folgen Sie meinem Beispiel mit Beanshell-Nutzung und Sie sehen, wie einfach es ist:

Projekt stucture Weiter unter Bezugnahme auf Abschnitte in Bild unten:

(1.1) Hier habe ich benutzerdefinierten Variablen in Benutzerdefinierte Variablen (oder Sie können es mit BSF proccessor tun - Behinderte in diesem Beispiel (1.2))

(2.1) (2.4) I erfolgreich eingesetzt Variable im ersten Thread - nichts Besonderes:)

(2.2) hinzugefügt und Beanshell Postprocessor angepasst meine Variable

(2.3) hinzugefügt, um es in der Warteschlange

(3.1) Im zweiten Thread - Variable aus der Warteschlange genommen wird - mit einem beliebigen Namen versehen. Aber Vorsicht, verwenden weise Timeout, weil dieser Thread bis vorherige Oberfläche wartet so kann es Variable (Experiment mit einigen langen Antwort) modifiziert bekommen

(3,2) (3,3) (3,4), daß die Schritte des Verwendens wiederholt und die Änderung von Variablen

(3.5) Variable wird wieder in neuer Warteschlange geschickt - so bietet neue Namen, um es

(4.1) (4.2) (4.3) Grabbed modifizierte Variable aus neuen Warteschlange funktioniert wie Charme

Warnung

  1. Wenn Sie mehr Threads fügen Sie dann einige Zähler hinzufügen Gruppe mit Variable Fädeln und diese Variable Name Namen Warteschlange - das gleiche tun in Thread-Gruppe, wo Sie versuchen Warteschlange zu fangen so Warteschlange eindeutigen Namen für jeden Thread haben (schreiben Sie einen Kommentar, wenn Sie etwas klarer explenation brauchen)

  2. Wenn Sie mehr als eine HTTP-Anforderung in einer Thread-Gruppe dann Thread-Kommunikation vor Prozessor als Kind des letzten hinzuzufügen (oder eine andere, wenn Sie einige benutzerdefinierte Sache erreichen wollen) http anfordern

Spiele, modifizieren, anzupassen beste Ergebnis zu bekommen :) mehr Threads Hinzufügen zu unerwünschten Verhalten führen kann, so dass Sie wachsam sein müssen.

Informationen über Projektstruktur

Ich fand, das ich glaube, dass der einfachste Weg, dies zu tun bekommen.

Mit

Bean Shell PostProcessor

, um die Variable zu setzen ( http://jmeter.apache.org/usermanual /best-practices.html#bsh_variables )

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

oder wenn Sie das Lesen von einer Variablen

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

Und dann von der anderen Thread-Gruppe, lesen Sie es über ( http: // jmeter. apache.org/usermanual/functions.html#__property )

${__property(PC_CREATED_PROMO_CODE)}

JMeter Plugins hat Inter-Thread Kommunikation für diesen Zweck.

Es gibt zwei Methoden, es zu benutzen:

  • Postprocessor / PreProcessor
  • Funktionen __fifoPut und __fifoPop

Meiner Meinung nach Postprocessor / PreProcessor ist einfacher zu benutzen.

Dies ist nicht möglich in JMeter, denn es ist nicht normal, das Kundenverhalten (Parameter zwischen Threads Sharing). Anstelle dieser Anwendung ein Thread-Gruppe mit Controller:

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

Nun, das ist eine Möglichkeit, es zu tun; Gehen Sie folgendermaßen vor und es wird funktionieren, später können Sie passen sie an Ihre Bedürfnisse! Variablen werden nicht zwischen Threads (JMeter nennt dies ein Feature wahrscheinlich :)) geteilt. Aber Eigenschaften sind! So stellen Sie Ihre Variable als propery etwa so:

1) Klicken Sie Ihren Testplan und ermöglicht ‚Run Thread-Gruppen nacheinander‘ -> das macht die Thread-Gruppen laufen bestellt und nicht zufällig. (Sie können es später einstellen, aber jetzt, um es zu arbeiten ..)

2) erstellen Thread 'Setup' zum Beispiel genannt; in dieser Fadengruppe einen Sampler Beanshell mit dem folgenden Code hinzuzufügen:

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

So, jetzt die Eigenschaft gesetzt wurde! Wenn der Wert, den Sie als propery speichern möchten allready eine Variable (User definded Variable oder reqex Variable zum Beispiel) Sie tun können:

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

3) eine Testgruppe ‚eigentlicher Test‘ beispielsweise mit einer Anzahl von Threads höher als 1 addieren;    einen Test hinzufügen und zu diesem Test Beanshell Preprocessor mit dem folgenden Code hinzu:

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

So, jetzt haben Sie eine Variable in diesem Thread genannt theNameOfYourNewProperty geschaffen, die den Wert Ihrer Systemeigenschaft theNameOfYourNewProperty hat. In Ihrem Test können Sie nun Zugriff auf sie wie:

${theNameOfYourNewProperty}

Und es wird für jeden Thread arbeiten, nicht nur nur der erste Thread ..

Lassen Sie uns geben Sie ein Thema ein zweites Leben :) Eine weitere Möglichkeit, Variablen zwischen Threads zu übertragen ist, zu schreiben / lesen einzureichen. Passing Variablen zwischen Threads

Eine andere Lösung ist die einfache Tabelle Server zu verwenden, um die Datenmenge zu verwalten. Diese Funktion war es, die 1,2 JMeter Plugins hinzufügen.

"Die Hauptidee ist es, einen kleinen HTTP-Server in JMeter Plugins zu verwenden, um die Daten-Set-Dateien mit einfachen Befehlen zu verwalten bekommt / hinzufügen Datenzeilen in Dateien"

Sehen Sie in der Dokumentation: http://jmeter-plugins.org/wiki/HttpSimpleTableServer/

Viele Grüße.

JMeter Bean Shell Assertion

Fügen Sie einfach eine Bean Shell Behauptung eine Eigenschaft Funktion den Wert einer Variablen (wie eine globale Variable) zugewiesen werden, die den Wert halten wird, auch wenn er zu einem anderen Thread geht.

  

Thread-Gruppe >> Hinzufügen >> Assertions >> Bean Shell Assertion

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

und dann in dem anderen Thread können Sie diese globale Variable nennen und kann es verwenden,

unten ist die Funktion, die Sie verwenden müssen, den gespeicherten Wert zu nennen:

${__property(global_variable_name)}

https://medium.com/@priyank .es / jmeter-passing-Variablen-zwischen-Gewinde-a4dc09903b59

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top