2013-05-22 10 views
6

Ich habe eine Jmeter Thread-Gruppe, die die Variable Uuid mehrmals überall verwendet.Jmeter Zufallsvariable in mehreren Threads

UUID mit 12345678-1234-4444-a123-${__Random(111111111111,999999999999)}

Mit anderen Worten definiert wird, beginnt es mit einer festen Reihe 12345678-1234-4444-a123- und randomisiert dann die letzten zwölf Zeichen.

Ich möchte mehrere Threads zur gleichen Zeit ausführen, das gibt das folgende Problem: Wenn ich UUID als benutzerdefinierte Variable innerhalb der Thread-Gruppe definieren, wird es einmal zufällig und dann verwendet diesen Wert für alle meine Threads. Wenn ich es global setze, passiert das Gleiche.

Ich werde Tausende von Threads zur gleichen Zeit ausgeführt werden, wenn ich fertig bin, so kann ich keine manuellen Lösungen oder lesen/schreiben auf die Festplatte.

Hat jemand da draußen Erfahrung damit? Ich habe die Dokumentation und Google eine ganze Weile durchgelesen, kann aber keine Lösung finden.

Kurz gesagt: Ich muss eine Variable randomisieren, diese Variable in der gesamten Thread-Gruppe verwenden und diese Thread-Gruppe in mehreren simultanen Threads ausführen. Die Variable sollte unterschiedliche Randomisierungswerte in jedem einzelnen Thread haben.

Antwort

18

Angenommen, Sie einfach Random Variable Konfigurationselement stattdessen verwenden können:

Variable Name:  uuid 
Output Format:  12345678-1234-4444-a123-000000000000 
Minimum Value:  111111111111 
Maximum Value:  999999999999 
Per Thread (User): True 

generiert Wert

  • als ${uuid} zugegriffen werden kann;
  • einzigartig für jeden Thread;
  • zwischen verschiedenen Probenehmern erhalten ruft den Fluss von jedem Thread (nicht bei jeder Referenz regeneriert);
  • generiert während jeder Iteration der Thread-Gruppe.
Test Plan 
    Thread Group 
     Random Variable 
     ... 
     Sampler 1 
     Sampler 2 
     ... 

z.B.


iteration: 1 
    thread: 1 
     sampler 1: VALUE_1-1 
     sampler 2: VALUE_1-1 
     ... 
    thread: 2 
     sampler 1: VALUE_2-1 
     sampler 2: VALUE_2-1 
     ... 
    ... 
iteration: 2 
    thread: 1 
     sampler 1: VALUE_1-2 
     sampler 2: VALUE_1-2 
     ... 
    thread: 2 
     sampler 1: VALUE_2-2 
     sampler 2: VALUE_2-2 
     ... 
    ... 

Beispielskript für Schema implementiert oben gegeben: rnd-var.jmx


Wie pro Random Seed Feldbeschreibung von Random Variable:

Standard die aktuelle Zeit in Millisekunden. Wenn Sie denselben Seed-Wert mit Pro Thread auf True verwenden, erhalten Sie den gleichen Wert für EARCH Thread wie Random-Klasse.

Wenn zwei Instanzen von Random mit dem gleichen Seed erstellt werden und die gleiche Sequenz von Methodenaufrufen für jede erstellt wird, generieren sie und geben identische Folgen von Zahlen zurück.

Denken Sie daran, Szenarien mit hoher Parallelität zu implementieren (wie unten in Kommentaren erwähnt). Um dieses Problem zu umgehen, können Sie Zufallssamen mit z. ${__Random(MIN,MAX)} als Wert von Seed for Random function Feld.

+1

Brilliant @ Alies Belik ... aber ich verwende einen Loop-Controller und nicht verschiedene Sampler. Der Ablauf ist: 1. Thread-Gruppe 1.1 Schleifenzähler 1.1.1 SOAP-Anfrage Wo platziere ich die Zufallsvariable? –

+1

Sie können auch die Zufallsvariable verwenden, um eine Zeichenfolge aus einer vordefinierten Liste pro Thread (Benutzer) auszuwählen. Ich habe es verwendet, um ein Suchwort für jeden virtuellen Benutzer nach dem Zufallsprinzip auszuwählen. Ich habe eine Variable mit einer durch Kommas getrennten Liste von Schlüsselwörtern erstellt und dann eine Zufallsvariable innerhalb einer Thread-Gruppe mit dem Minimalwert 0 und dem Maximalwert '$ {__ javaScript ('$ {search.keywords}' .split ('\,')) erstellt -1;)} 'und speichere es in Variable keyword.index. Dann, wo ich das zufällig ausgewählte Schlüsselwort verwenden möchte, verwende ich '$ {__ javaScript ('$ {search.keywords}'. Split ('\,') [$ {keyword.index}];)}' – Cvuorinen

+1

Ich habe benutze dies, aber nur mitgeteilt, dass einige Threads immer noch den gleichen Wert erhalten. Ich nehme an, es liegt daran, dass die Threads zur selben Zeit gestartet werden, so dass zufällige Werte zur selben Millisekunde generiert werden, was dazu führt, dass Threads den gleichen Wert bekommen wie zufällige Basen in Millisekunden. Irgendwelche Tipps dazu? –

Verwandte Themen