it-swarm.com.de

Session-/Cookie-Verwaltung in Apache JMeter

Wir haben einen einfachen Performance-Testablauf in einer Anwendung.

  1. Wir melden uns an
  2. Suche anhand einiger Kriterien
  3. wiederholen Sie die Suche nach verschiedenen Parametern. 

Wir verwenden Jmeter, um Leistungstests durchzuführen. Wir müssen mehrere Threads ausführen, um dies skalierbar zu testen.

Die Art und Weise, wie wir diese Anordnung derzeit haben, ist

-Test Plan
  - Thread Group
      - Cookie Manager
      - Login To application
      - Search on param 1
      - Search on param 2
  - results summary table
  - Summary report

Grundsätzlich haben wir eine Übersichtstabelle und einen Bericht auf Planebene vorhanden, während der Cookie-Manager auf Threadgruppenebene vorhanden ist. 

Wenn ich für einen Thread laufe, läuft es gut und wird gut abgeschlossen. Wenn ich es auf mehrere Threads skaliere, wird die Sitzung für den letzten Thread ungültig, sobald der nächste Thread startet. Dies verursacht Fehler für alle bereits laufenden Threads aufgrund eines neu erzeugten Threads.

Dieses Ergebnis erreichte ich mit der Beobachtung:
1. Wenn ich mehrere Threads ausführte, hat nur der letzte Thread gültige Antworten in der Ergebniszusammenfassungsstruktur
2. Wenn ich mit 2 Threads mit einer Hochlaufzeit von 10 Sekunden laufe, was bedeutet, dass jeder Thread Zeit hat, sich selbst zu beenden, werden beide erfolgreich ausgeführt. 

Soweit ich weiß, dass jeder Thread sich in der Anwendung anmeldet und der Cookie-Manager auf Thread-Ebene ist, werden die Werte für die Sitzungs-ID für jeden Thread jeweils beibehalten. Was bewirkt jedoch das Überschreiben des Sitzungs-ID-Werts zwischen Threads?

Jede Hilfe wird sehr geschätzt. 

48
Priyank

Aus Jmeter-Dokumentation kopiert:

Das letzte Element ist ein HTTP-Cookie Manager . Ein Cookie Manager sollte .__ sein. zu allen Webtests hinzugefügt - ansonsten JMeter ignoriert Cookies. Beim Hinzufügen es auf der Ebene der Thread-Gruppe, wir Stellen Sie sicher, dass alle HTTP-Anforderungen Teilen Sie die gleichen Cookies.

Ab Kapitel "4.2.2 Logic Controller" in http://jmeter.Apache.org/usermanual/test_plan.html .

EDIT: Ich denke, Sie sollten http://jmeter.Apache.org/usermanual/component_reference.html#Simple_Controller verwenden, um Ihre Anforderungen zusammen mit Cookie Manager zu gruppieren.

46

Ich denke, dass Andys Antwort nicht helfen kann. Er zitiert, dass jede Anfrage die gleichen Cookies verwendet, aber laut Jmeter-Handbuch:

Jeder JMeter-Thread hat einen eigenen "Cookie-Speicherbereich".

Soweit ich die Frage verstehe, soll jeder Thread das gleiche Session-ID-Cookie verwenden. Es scheint mir so, als müssten Sie zwei Thread-Gruppen haben und diese nacheinander ausführen. Die erste Thread-Gruppe (mit einem einzigen Thread, der nur einmal ausgeführt wird) sollte sich anmelden und den Sitzungs-Cookie-Wert in einem globalen Parameter speichern (möglicherweise müssen Sie die Scripting-Funktionen von Jmeter verwenden) .. _. Setzen Sie dieses Cookie anschließend im Cookie-Manager der zweiten Fadengruppe.

Hoffentlich hilft das.

6
akostadinov

Versuchen Sie, die Hochlaufzeit zu erhöhen. Ich bin auf das gleiche Problem gestoßen, bei dem die Hochlaufzeit etwa 1 Sekunde betrug. Dann erhöhte ich sie auf 3 Sekunden pro Thread und es lief gut. 

1
Isaac

Ändern Sie zunächst Ihren Code in: 

jmeter.properties
CookieManager.save.cookies=true
CookieManager.name.prefix=mycookie_

Fügen Sie anschließend einen HTTP-Cookie-Manager in derselben Thread-Gruppe wie Ihr Java-Sampler hinzu. 

Dann fügen Sie in Ihrem Java-Sampler Folgendes hinzu:

JMeterVariables jmv = JMeterContextService.getContext().getVariables();
Iterator<Map.Entry<String,Object>> it = jmv.getIterator();
while(it.hasNext()){
    Map.Entry<String,Object> v = it.next();
    System.out.println("name: " + v.getKey() + " value: " + v.getValue());
}
0
user2522062

Versuche dies:

Öffnen Sie die im Bin-Ordner von JMeter vorhandenen user.properties

Bearbeiten Sie es und fügen Sie die folgende Zeile hinzu:

CookieManager.check.cookies=false

Speichern Sie es und führen Sie das Skript aus. Ich hoffe, es wird dein Problem lösen.

0
Jigish Chawda