2012-06-22 11 views
7

Ich habe einen JMeter-Testplan mit folgenden HTTP-Request-Sampler.jMeter Thread-Sequenz

  1. Anmeldung
  2. Rufen Sie einige Funktionen, die ein angemeldeter Benutzer muss
  3. Logout

Wenn ich den Testplan mit 5 parallelen Threads ausführen, sehe ich, dass der Sampler 2 vor dem Aufruf aufgerufen wird Sampler 1 für einige Threads, die dann die Antwort Assertions fehlschlägt.

Gibt es eine Möglichkeit, eine Sequenz von Samplern anzugeben, die ausgeführt werden?

+0

Woran denken Sie, dass Sampler 2 vor Sampler 1 ausgeführt wird? Anforderungen werden sequenziell ausgeführt, von oben nach unten, und dies ist sehr unwahrscheinlich. Daher gibt es möglicherweise ein Problem bei der Interpretation der Ergebnisse. –

+0

Weil ich in der Ansicht Ergebnisbaum sehe, dass, wenn ich mit 5 parallelen Threads starte, die Anmeldung viermal aufgerufen wird, dann die andere Seite, die die Behauptung nicht erfüllt, dass es eine Abmelde-Schaltfläche geben sollte. – rangalo

+0

"Ergebnisbaum anzeigen" spiegelt nicht die pro-Thread-Sequenz wider, es ist keine zuverlässige Quelle (weil ein Thread möglicherweise schneller ausgeführt wird als die anderen). –

Antwort

10

sollte sichergestellt werden, dass sie der Reihe nach ausgeführt werden:

enter image description here

der mit Thread-Gruppe Also lassen Sie beginnen.

Anzahl der Threads (Benutzer) ist 5.

So können Sie die Logik für Ihre Login-Sampler heraus haben nehmen. Fügen Sie einfach einen zusätzlichen Sampler hinzu. Klicken Sie also mit der rechten Maustaste auf dieses Beispiel Add > Post Processors > BSF PostProcessor, in diesem Postprozessor großen Skriptbereich schreiben ${__setProperty(ThreadValue,${__threadNum},)}.

Dies speichert die Thread-Nummer in Ihrer Eigenschaft namens ThreadValue. Stellen Sie sicher, dass Sie Ihre Sprache als beanshell in der Dropdown-Liste auswählen.

Dann nach dem Login-Sampler den if-Controller hinzufügen. Fügen Sie diese auf dem Bedingungsfeld (${JMeterThread.last_sample_ok}==true) && (${__property(ThreadValue,,)} == ${__threadNum})

Das bedeutet, dass -.> Nur in Sachen angemeldet haben, während die tatsächliche Anmeldung erfolgreich ist und wenn der Login-Thread den Faden Spiele sind Sie zur Zeit in

, dass es Ihnen Mach dein Login-Zeug nur innerhalb des if-Controllers. Wenn Sie sicher sein wollen, dass Sie sich abmelden, wird der richtige Benutzer zusätzlich platziert, wenn der Controller in der Nähe ist.

Prost

+0

kann ich validieren, ob der Login erfolgreich ist, basierend auf dem Antwortcode hier? – zillani

2

Was brauchen Sie ist zu berücksichtigen, dass jeder Thread eine separate Einheit ist, wie ein echter Benutzer, und dass es seine eigene Sitzung hat, aber das JMeter ist diese Threads asynchron, dh zur Ausführung ausgelegt. parallel zu. Der Listener "Listenergebnisse" zeigt alle Aktivitäten aller Threads so an, wie es geschieht unabhängig von der logischen Threadsequenz. Wenn Sie lieber 1 Thread 5 Iterationen machen möchten, dann ändern Sie einfach die Anzahl der Threads auf 1 und verwenden Sie eine Schleife von 5 und dies wird die Sequenz beibehalten (obwohl dies den Punkt der Verwendung eines Lasttest-Tools wie JMeter vereitelt!).

Wenn Sie die Anzahl der Threads auf 1 ändern, können Sie die wahre logische Abfolge der Ausführung in der Ergebnisstruktur sehen. Dies zeigt, dass jeder Sampler nacheinander von oben nach unten ausgeführt wird.

Nun, in Ihrem Fall vermute ich, dass Sie ein Problem haben, nicht weil Dinge aus der Reihe laufen, sondern weil der Server den Sitzungskontext zwischen Anfragen verliert. Dies ist sehr häufig und in den meisten Fällen können Sie das Problem mit einem HTTP Cookie Manager oder mit der Verwendung eines Regular Expression Extractor beheben.