18 Einführung

Mehrere Testelemente verwenden JMeter-Eigenschaften, um ihr Verhalten zu steuern. Diese Eigenschaften werden normalerweise aufgelöst, wenn die Klasse geladen wird. Dies geschieht im Allgemeinen vor dem Start des Testplans, sodass es nicht möglich ist, die Einstellungen mithilfe der Funktion __setProperty() zu ändern .

18.1 Sampler

Sampler führen die eigentliche Arbeit von JMeter aus. Jeder Sampler (außer Flow Control Action ) generiert ein oder mehrere Sample-Ergebnisse. Die Beispielergebnisse haben verschiedene Attribute (Erfolg/Fehler, verstrichene Zeit, Datengröße usw.) und können in den verschiedenen Listenern angezeigt werden.

FTP-Anfrage

Mit diesem Controller können Sie eine FTP-Anfrage "Datei abrufen" oder "Datei hochladen" an einen FTP-Server senden. Wenn Sie mehrere Anforderungen an denselben FTP-Server senden möchten, sollten Sie ein FTP-Anforderungs -Standardkonfigurationselement verwenden, damit Sie nicht für jeden generativen Controller für FTP-Anforderungen dieselben Informationen eingeben müssen. Beim Herunterladen einer Datei kann diese auf der Festplatte (Lokale Datei) oder in den Antwortdaten oder beidem gespeichert werden.

Die Latenz wird auf die Zeit eingestellt, die für die Anmeldung benötigt wird.

Screenshot für das Control-Panel der FTP-Anfrage
Screenshot des Control-Panels der FTP-Anfrage

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Servername oder IP
Domänenname oder IP-Adresse des FTP-Servers.
Ja
Hafen
Zu verwendender Port. Wenn dies >0 ist, wird dieser spezifische Port verwendet, ansonsten verwendet JMeter den Standard-FTP-Port.
Nein
Remote-Datei:
Abzurufende Datei oder Name der hochzuladenden Zieldatei.
Ja
Lokale Datei:
Hochzuladende Datei oder Ziel für Downloads (standardmäßig Remote-Dateiname).
Ja, beim Hochladen (*)
Lokaler Dateiinhalt:
Stellt den Inhalt für den Upload bereit und überschreibt die Eigenschaft Lokale Datei.
Ja, beim Hochladen (*)
hole(RETR) / put(STOR)
Ob eine Datei abgerufen oder hochgeladen werden soll.
Ja
Binärmodus verwenden?
Aktivieren Sie dies, um den Binärmodus zu verwenden (Standard ASCII)
Ja
Als Antwort Datei speichern?
Ob der Inhalt der abgerufenen Datei in den Antwortdaten gespeichert werden soll. Wenn der Modus ASCII ist, dann wird der Inhalt in der Ergebnisstruktur anzeigen angezeigt .
Ja, wenn Sie herunterladen
Nutzername
Benutzername des FTP-Kontos.
Normalerweise
Passwort
Passwort für das FTP-Konto. Hinweis: Dies wird im Testplan sichtbar sein.
Normalerweise
^

HTTP-Anfrage

Mit diesem Sampler können Sie eine HTTP/HTTPS-Anfrage an einen Webserver senden. Außerdem können Sie steuern, ob JMeter HTML-Dateien nach Bildern und anderen eingebetteten Ressourcen parst und HTTP-Anforderungen sendet, um sie abzurufen. Die folgenden Arten von eingebetteten Ressourcen werden abgerufen:

  • Bilder
  • Applets
  • Stylesheets (CSS) und Ressourcen, auf die von diesen Dateien verwiesen wird
  • externe Skripte
  • Frames, IFrames
  • Hintergrundbilder (Körper, Tabelle, TD, TR)
  • Hintergrundgeräusch

Der Standardparser ist org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser . Dies kann mit der Eigenschaft " htmlparser.className " geändert werden - siehe jmeter.properties für Details.

Wenn Sie mehrere Anfragen an denselben Webserver senden, sollten Sie die Verwendung eines HTTP-Anforderungsstandard - Konfigurationselements in Betracht ziehen, damit Sie nicht für jede HTTP-Anforderung dieselben Informationen eingeben müssen.

Anstatt HTTP-Anforderungen manuell hinzuzufügen, können Sie sie auch mit dem HTTP(S) Test Script Recorder von JMeter erstellen. Dies kann Ihnen Zeit sparen, wenn Sie viele HTTP-Anforderungen oder Anforderungen mit vielen Parametern haben.

Zur Definition der Probenehmer werden drei verschiedene Testelemente verwendet:

AJP/1.3-Sampler
verwendet das Tomcat-mod_jk-Protokoll (ermöglicht das Testen von Tomcat im AJP-Modus, ohne Apache httpd zu benötigen) Der AJP-Sampler unterstützt das Hochladen mehrerer Dateien nicht; nur die erste Datei wird verwendet.
HTTP-Anfrage
Dies hat ein Implementierungs-Dropdown-Feld, das die zu verwendende HTTP-Protokollimplementierung auswählt:
Java
verwendet die von der JVM bereitgestellte HTTP-Implementierung. Dies hat einige Einschränkungen im Vergleich zu den HttpClient-Implementierungen - siehe unten.
HTTPClient4
verwendet Apache HttpComponents HttpClient 4.x.
Leerer Wert
legt die Implementierung nicht auf HTTP-Samplern fest, verlässt sich also auf HTTP-Anforderungsstandards, falls vorhanden, oder auf die jmeter.httpsampler- Eigenschaft, die in jmeter.properties definiert ist
GraphQL-HTTP-Anfrage
Dies ist eine GUI-Variante der HTTP-Anforderung , um bequemere UI-Elemente zum Anzeigen oder Bearbeiten von GraphQL-Abfragen , Variablen und Vorgangsnamen bereitzustellen , während sie automatisch unter der Haube mit demselben Sampler in HTTP-Argumente konvertiert werden. Dadurch werden die folgenden UI-Elemente ausgeblendet oder angepasst, da sie für GraphQL-über-HTTP/HTTPS-Anforderungen weniger bequem oder irrelevant sind:
  • Methode : Es sind nur POST- und GET-Methoden verfügbar, die der GraphQL-over-HTTP-Spezifikation entsprechen. Die POST-Methode ist standardmäßig ausgewählt.
  • Registerkarten „ Parameter “ und „ Post Body “: Sie können den Parameterinhalt stattdessen über die UI-Elemente „Query“, „Variables“ und „Operation Name“ anzeigen oder bearbeiten.
  • Registerkarte Datei-Upload : irrelevant für GraphQL-Abfragen.
  • Abschnitt „Eingebettete Ressourcen aus HTML-Dateien “ auf der Registerkarte „Erweitert“: irrelevant in GraphQL-JSON-Antworten.

Die Java-HTTP-Implementierung weist einige Einschränkungen auf:

  • Es gibt keine Kontrolle darüber, wie Verbindungen wiederverwendet werden. Wenn eine Verbindung von JMeter freigegeben wird, kann sie von demselben Thread wiederverwendet werden oder nicht.
  • Die API eignet sich am besten für die Single-Thread-Nutzung – verschiedene Einstellungen werden über Systemeigenschaften definiert und gelten daher für alle Verbindungen.
  • Keine Unterstützung der Kerberos-Authentifizierung
  • Clientbasierte Zertifikatstests mit Keystore Config werden nicht unterstützt.
  • Bessere Kontrolle des Wiederholungsmechanismus
  • Es unterstützt keine virtuellen Hosts.
  • Es unterstützt nur die folgenden Methoden: GET , POST , HEAD , OPTIONS , PUT , DELETE und TRACE
  • Bessere Kontrolle über das DNS-Caching mit dem DNS-Cache-Manager
Hinweis: Das FILE -Protokoll ist nur für Testzwecke vorgesehen. Es wird von demselben Code verarbeitet, unabhängig davon, welcher HTTP-Sampler verwendet wird.

Wenn die Anforderung eine Server- oder Proxy-Anmeldeautorisierung erfordert (dh wenn ein Browser ein Popup-Dialogfeld erstellen würde), müssen Sie auch ein HTTP-Autorisierungs-Manager - Konfigurationselement hinzufügen. Für normale Anmeldungen (dh wenn der Benutzer Anmeldeinformationen in ein Formular eingibt) müssen Sie herausfinden, was die Schaltfläche zum Absenden des Formulars bewirkt, und eine HTTP-Anfrage mit der entsprechenden Methode (normalerweise POST ) und den entsprechenden Parametern aus der Formulardefinition erstellen . Wenn die Seite HTTP verwendet, können Sie den JMeter-Proxy verwenden, um die Anmeldesequenz zu erfassen.

Für jeden Thread wird ein separater SSL-Kontext verwendet. Wenn Sie einen einzelnen SSL-Kontext verwenden möchten (nicht das Standardverhalten von Browsern), legen Sie die JMeter-Eigenschaft fest:

https.sessioncontext.shared=true
Seit Version 5.0 wird der SSL-Kontext standardmäßig während einer Thread-Gruppen-Iteration beibehalten und für jede Test-Iteration zurückgesetzt. Wenn in Ihrem Testplan derselbe Benutzer mehrmals iteriert, sollten Sie dies auf „false“ setzen.
httpclient.reset_state_on_thread_group_iteration=true
Hinweis: Dies gilt nicht für die Java-HTTP-Implementierung.
JMeter verwendet standardmäßig die SSL-Protokollebene TLS. Wenn der Server eine andere Stufe benötigt, z. B. SSLv3 , ändern Sie die Eigenschaft JMeter, z. B.:
https.default.protocol=SSLv3

JMeter ermöglicht es auch, zusätzliche Protokolle zu aktivieren, indem die Eigenschaft https.socket.protocols geändert wird .

Wenn die Anfrage Cookies verwendet, benötigen Sie auch einen HTTP-Cookie-Manager . Sie können eines dieser Elemente der Thread-Gruppe oder der HTTP-Anforderung hinzufügen. Wenn Sie mehr als eine HTTP-Anforderung haben, die Autorisierungen oder Cookies benötigt, fügen Sie die Elemente der Thread-Gruppe hinzu. Auf diese Weise nutzen alle HTTP-Request-Controller die gleichen Authorization Manager- und Cookie Manager-Elemente.

Wenn die Anfrage eine Technik namens „URL-Umschreibung“ verwendet, um Sitzungen aufrechtzuerhalten, finden Sie weitere Konfigurationsschritte in Abschnitt 6.1 „Handhabung von Benutzersitzungen mit URL-Umschreibung “.

Screenshot für das Control-Panel der HTTP-Anfrage
Screenshot des Control-Panels der HTTP-Anfrage
Erweiterte Konfigurationsfelder für HTTP-Anfragen
Erweiterte Konfigurationsfelder für HTTP-Anfragen
Screenshot des Control-Panels der GraphQL-HTTP-Anfrage
Screenshot des Control-Panels der GraphQL-HTTP-Anfrage
Variablenfeld für GraphQL-HTTP-Anfrage
Variablenfeld für GraphQL-HTTP-Anfrage

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Server
Domainname oder IP-Adresse des Webservers, zB www.example.com . [Schließen Sie das http://- Präfix nicht ein.] Hinweis: Wenn der „ Host “-Header in einem Header-Manager definiert ist, wird dieser als virtueller Hostname verwendet.
Server ist erforderlich, es sei denn:
Nein
Hafen
Port, auf dem der Webserver lauscht. Standard: 80
Nein
Verbindungs ​​Timeout
Verbindungszeitüberschreitung. Anzahl der Millisekunden, die auf das Öffnen einer Verbindung gewartet wird.
Nein
Reaktionszeitüberschreitung
Reaktionszeitüberschreitung. Anzahl der Millisekunden, die auf eine Antwort gewartet wird. Beachten Sie, dass dies für jedes Warten auf eine Antwort gilt. Wenn die Serverantwort in mehreren Blöcken gesendet wird, kann die verstrichene Gesamtzeit länger als das Zeitlimit sein.

Eine Daueraussage kann verwendet werden, um Antworten zu erkennen, deren Ausführung zu lange dauert.

Nein
Server (Proxy)
Hostname oder IP-Adresse eines Proxy-Servers zum Durchführen der Anfrage. [Fügen Sie das Präfix http:// nicht ein.]
Nein
Hafen
Port, auf dem der Proxy-Server lauscht.
Nein, es sei denn, der Proxy-Hostname ist angegeben
Nutzername
(Optional) Benutzername für Proxy-Server.
Nein
Passwort
(Optional) Passwort für Proxy-Server. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Nein
Implementierung
Java , HttpClient4 . Wenn nicht angegeben (und nicht durch HTTP-Anforderungsstandards definiert), hängt der Standardwert vom Wert der JMeter-Eigenschaft jmeter.httpsampler ab , andernfalls wird die HttpClient4-Implementierung verwendet.
Nein
Protokoll
HTTP , HTTPS oder DATEI . Standard: HTTP
Nein
Methode
GET , POST , HEAD , TRACE , OPTIONS , PUT , DELETE , PATCH (wird für die JAVA - Implementierung nicht unterstützt). Mit HttpClient4 sind auch die folgenden Methoden im Zusammenhang mit WebDav erlaubt: COPY , LOCK , MKCOL , MOVE , PROPFIND , PROPPATCH , UNLOCK , REPORT , MKCALENDAR , SEARCH .

Weitere Methoden können für den HttpClient4 vordefiniert werden, indem die JMeter-Eigenschaft httpsampler.user_defined_methods verwendet wird .

Ja
Inhaltscodierung
Zu verwendende Inhaltscodierung (für POST , PUT , PATCH und FILE ). Dies ist die zu verwendende Zeichencodierung und steht in keinem Zusammenhang mit dem Content-Encoding-HTTP-Header.
Nein
Automatisch umleiten
Legt den zugrunde liegenden HTTP-Protokoll-Handler so fest, dass er Umleitungen automatisch folgt, sodass sie von JMeter nicht gesehen werden und daher nicht als Beispiele erscheinen. Sollte nur für GET- und HEAD- Anforderungen verwendet werden. Der HttpClient-Sampler lehnt Versuche ab, ihn für POST oder PUT zu verwenden .
Warnung: Informationen zur Handhabung von Cookies und Headern finden Sie weiter unten.
Nein
Weiterleitungen folgen
Dies hat nur Auswirkungen, wenn „ Automatisch umleiten “ nicht aktiviert ist. Wenn gesetzt, prüft der JMeter-Sampler, ob es sich bei der Antwort um eine Weiterleitung handelt, und folgt ihr, wenn dies der Fall ist. Die anfängliche Weiterleitung und weitere Antworten werden als zusätzliche Beispiele angezeigt. Die URL- und Datenfelder des übergeordneten Beispiels werden aus dem letzten (nicht umgeleiteten) Beispiel entnommen, aber die Anzahl der übergeordneten Bytes und die verstrichene Zeit umfassen alle Beispiele. Die Latenz wird aus der anfänglichen Antwort genommen. Beachten Sie, dass der HttpClient-Sampler möglicherweise die folgende Meldung protokolliert:
"Umleitung angefordert, aber followRedirects ist deaktiviert"
Dies kann ignoriert werden.
JMeter reduziert Pfade der Form „ /../segment “ sowohl in absoluten als auch in relativen Umleitungs-URLs. Beispielsweise wird http://host/one/../two in http://host/two reduziert . Bei Bedarf kann dieses Verhalten durch Setzen der JMeter-Property httpsampler.redirect.removeslashdotdot=false unterdrückt werden
Nein
Verwenden Sie KeepAlive
JMeter setzt den Connection: Keep-Alive- Header. Dies funktioniert mit der Standard-HTTP-Implementierung nicht ordnungsgemäß, da die Wiederverwendung von Verbindungen nicht unter der Kontrolle des Benutzers steht. Es funktioniert mit den HttpClient-Implementierungen von Apache HttpComponents.
Nein
Verwenden Sie multipart/form-data für HTTP POST
Verwenden Sie eine multipart/form -data- oder application/x-www-form-urlencoded- Post-Anfrage
Nein
Browserkompatible Header
Bei Verwendung von multipart/form-data unterdrückt dies die Header Content-Type und Content-Transfer-Encoding ; nur der Content-Disposition- Header wird gesendet.
Nein
Weg
Der Pfad zur Ressource (z. B. /servlets/myServlet ). Wenn die Ressource Abfragezeichenfolgenparameter erfordert, fügen Sie diese unten im Abschnitt „Parameter mit der Anfrage senden“ hinzu.
Beginnt der Pfad als Sonderfall mit „ http:// “ oder „ https:// “, so wird dies als vollständige URL verwendet.
In diesem Fall werden die Server-, Port- und Protokollfelder ignoriert; Parameter werden auch für GET- und DELETE- Methoden ignoriert. Bitte beachten Sie auch, dass der Pfad nicht kodiert ist – abgesehen davon, dass Leerzeichen durch %20 ersetzt werden – daher müssen möglicherweise unsichere Zeichen kodiert werden, um Fehler wie URISyntaxException zu vermeiden .
Nein
Parameter mit der Anfrage senden
Die Abfragezeichenfolge wird aus der Liste der von Ihnen bereitgestellten Parameter generiert. Jeder Parameter hat einen Namen und einen Wert , die Optionen zum Codieren des Parameters und eine Option zum Einschließen oder Ausschließen eines Gleichheitszeichens (einige Anwendungen erwarten kein Gleichheitszeichen, wenn der Wert eine leere Zeichenfolge ist). Die Abfragezeichenfolge wird in der richtigen Weise generiert, abhängig von der von Ihnen getroffenen Auswahl der "Methode" (d. h. wenn Sie GET oder DELETE gewählt haben, wird die Abfragezeichenfolge an die URL angehängt, wenn POST oder PUT, dann wird es separat verschickt). Auch wenn Sie eine Datei mit einem mehrteiligen Formular senden, wird die Abfragezeichenfolge mit den Spezifikationen des mehrteiligen Formulars erstellt. Nachfolgend finden Sie einige weitere Informationen zur Parameterbehandlung.

Außerdem können Sie angeben, ob jeder Parameter URL-codiert sein soll. Wenn Sie sich nicht sicher sind, was dies bedeutet, ist es wahrscheinlich am besten, es auszuwählen. Wenn Ihre Werte Zeichen wie die folgenden enthalten, ist normalerweise eine Codierung erforderlich.:

  • ASCII-Steuerzeichen
  • Nicht-ASCII-Zeichen
  • Reservierte Zeichen: URLs verwenden einige Zeichen zur besonderen Verwendung bei der Definition ihrer Syntax. Wenn diese Zeichen nicht in ihrer besonderen Rolle innerhalb einer URL verwendet werden, müssen sie codiert werden, Beispiel: ' $ ', ' & ', ' + ', ' , ' , ' / ', ' : ', ' ; ', ' = ', ' ? ', ' @ '
  • Unsichere Zeichen: Einige Zeichen können aus verschiedenen Gründen innerhalb von URLs missverstanden werden. Auch diese Zeichen sollten immer codiert werden, Beispiel: ' ', ' < ', ' > ', ' # ', ' % ', …
Nein
Dateipfad:
Name der zu sendenden Datei. Wenn das Feld leer gelassen wird, sendet JMeter keine Datei. Wenn es ausgefüllt ist, sendet JMeter die Anfrage automatisch als mehrteilige Formularanfrage.

Wenn es sich um eine POST-, PUT- oder PATCH - Anforderung handelt und es eine einzelne Datei gibt, deren Attribut „Parametername“ (unten) weggelassen wird, wird die Datei als gesamter Anforderungstext gesendet, dh es werden keine Wrapper hinzugefügt. Damit können beliebige Bodys versendet werden. Diese Funktionalität ist für POST- Anforderungen und auch für PUT- Anforderungen vorhanden. Nachfolgend finden Sie einige weitere Informationen zur Parameterbehandlung.

Nein
Parametername:
Wert des Webanforderungsparameters " name ".
Nein
Mime Typ
MIME-Typ (z. B. text/plain ). Wenn es sich um eine POST-, PUT- oder PATCH - Anforderung handelt und entweder das Attribut „ name “ (unten) weggelassen wird oder der Anforderungstext nur aus Parameterwerten besteht, wird der Wert dieses Felds als Wert der Inhaltstypanforderung verwendet Header.
Nein
Rufen Sie alle eingebetteten Ressourcen aus HTML-Dateien ab
Weisen Sie JMeter an, die HTML-Datei zu parsen und HTTP/HTTPS-Anforderungen für alle Bilder, Java-Applets, JavaScript-Dateien, CSSs usw. zu senden, auf die in der Datei verwiesen wird. Siehe unten für weitere Details.
Nein
Antwort als MD5-Hash speichern?
Wenn dies ausgewählt ist, wird die Antwort nicht im Probenergebnis gespeichert. Stattdessen wird der 32 Zeichen lange MD5-Hash der Daten berechnet und gespeichert. Dies ist zum Testen großer Datenmengen gedacht.
Nein
URLs müssen übereinstimmen:
Falls vorhanden, muss es sich um einen regulären Ausdruck handeln, der zum Abgleich mit allen gefundenen eingebetteten URLs verwendet wird. Wenn Sie also nur eingebettete Ressourcen von http://example.invalid/ herunterladen möchten , verwenden Sie den Ausdruck: http://example\.invalid/.*
Nein
URLs dürfen nicht übereinstimmen:
Falls vorhanden, muss es sich um einen regulären Ausdruck handeln, der verwendet wird, um alle gefundenen eingebetteten URLs herauszufiltern. Wenn Sie also keine PNG- oder SVG-Dateien aus irgendeiner Quelle herunterladen möchten, verwenden Sie den Ausdruck: .*\.(?i:svg|png)
Nein
Gleichzeitigen Pool verwenden
Verwenden Sie einen Pool gleichzeitiger Verbindungen, um eingebettete Ressourcen zu erhalten.
Nein
Größe
Poolgröße für gleichzeitige Verbindungen, die zum Abrufen eingebetteter Ressourcen verwendet werden.
Nein
Typ der Quelladresse
[Nur für HTTP-Anfrage mit HTTPClient-Implementierung]
Um den Wert der Quelladresse zu unterscheiden, wählen Sie den Typ davon aus:
  • Wählen Sie IP/Hostname , um eine bestimmte IP-Adresse oder einen (lokalen) Hostnamen zu verwenden
  • Wählen Sie Gerät aus, um die erste verfügbare Adresse für diese Schnittstelle auszuwählen, die entweder IPv4 oder IPv6 sein kann
  • Wählen Sie Geräte-IPv4 aus, um die IPv4-Adresse des Gerätenamens auszuwählen ( z. B. eth0 , lo , em0 usw.)
  • Wählen Sie Geräte-IPv6 aus, um die IPv6-Adresse des Gerätenamens auszuwählen (wie eth0 , lo , em0 usw.)
Nein
Feld Quelladresse
[Nur für HTTP-Anfrage mit HTTPClient-Implementierung]
Diese Eigenschaft wird verwendet, um IP-Spoofing zu aktivieren. Sie überschreibt die standardmäßige lokale IP-Adresse für dieses Beispiel. Der JMeter-Host muss mehrere IP-Adressen haben (dh IP-Aliase, Netzwerkschnittstellen, Geräte). Der Wert kann ein Hostname, eine IP-Adresse oder ein Netzwerkschnittstellengerät wie „ eth0 “, „ lo “ oder „ wlan0 “ sein.
Wenn die Eigenschaft httpclient.localaddress definiert ist, wird diese für alle HttpClient-Anfragen verwendet.
Nein

Die folgenden Parameter sind nur für GraphQL-HTTP-Anfragen verfügbar :

Parameter

Attribut
Beschreibung
Erforderlich
Anfrage
GraphQL-Abfrage- (oder Mutations-)Anweisung.
Ja
Variablen
GraphQL-Abfrage- (oder Mutations-) Variablen in einer gültigen JSON-Zeichenfolge. Hinweis : Wenn die Eingabezeichenfolge keine gültige JSON-Zeichenfolge ist, wird dies mit einem ERROR-Protokoll ignoriert.
Nein
Vorgangsname
Optionaler Name des GraphQL-Vorgangs, wenn Dokumente für mehrere Vorgänge angefordert werden.
Nein
Bei Verwendung der automatischen Umleitung werden Cookies nur für die ursprüngliche URL gesendet. Dies kann bei Websites, die auf einen lokalen Server umleiten, zu unerwartetem Verhalten führen. ZB wenn www.example.com auf www.example.co.uk umleitet . In diesem Fall wird der Server wahrscheinlich Cookies für beide URLs zurückgeben, aber JMeter sieht nur die Cookies für den letzten Host, dh www.example.co.uk . Wenn die nächste Anforderung im Testplan www.example.com anstelle von www.example.co.uk verwendet, werden nicht die richtigen Cookies abgerufen. Ebenso werden Header für die ursprüngliche Anfrage gesendet und nicht für die Umleitung. Dies ist im Allgemeinen nur bei manuell erstellten Testplänen ein Problem, da ein mit einem Rekorder erstellter Testplan von der umgeleiteten URL fortgesetzt würde.

Parameterbehandlung:
Wenn für die POST- und PUT -Methode keine zu sendende Datei vorhanden ist und die Namen der Parameter weggelassen werden, wird der Hauptteil durch Verketten aller Werte der Parameter erstellt. Beachten Sie, dass die Werte verkettet werden, ohne dass Zeilenendezeichen hinzugefügt werden. Diese können mit der Funktion __char() in den Wertfeldern hinzugefügt werden. Damit können beliebige Bodys versendet werden. Die Werte werden codiert, wenn das Codierungs-Flag gesetzt ist. Siehe auch MIME-Typ oben, wie Sie den gesendeten Anforderungsheader für den Inhaltstyp steuern können.
Wenn bei anderen Methoden der Name des Parameters fehlt, wird der Parameter ignoriert. Dies ermöglicht die Verwendung von optionalen Parametern, die durch Variablen definiert werden.


Sie haben die Möglichkeit, zur Registerkarte Körperdaten zu wechseln, wenn eine Anfrage nur unbenannte Parameter (oder überhaupt keine Parameter) enthält. Diese Option ist (unter anderem) in folgenden Fällen nützlich:

  • GWT-RPC-HTTP-Anforderung
  • JSON-REST-HTTP-Anfrage
  • XML-REST-HTTP-Anfrage
  • SOAP-HTTP-Anfrage
Beachten Sie, dass Sie nach dem Verlassen des Baumknotens nicht mehr zur Parameter-Registerkarte zurückkehren können, es sei denn, Sie löschen die Körperdaten- Registerkarte aus ihren Daten.

Im Körperdatenmodus wird jede Zeile mit angehängtem CRLF gesendet , mit Ausnahme der letzten Zeile. Um ein CRLF nach der letzten Datenzeile zu senden , stellen Sie einfach sicher, dass darauf eine leere Zeile folgt. (Dies kann nicht gesehen werden, außer indem festgestellt wird, ob der Cursor auf die nachfolgende Zeile platziert werden kann.)

Abbildung 1 – HTTP-Anforderung mit einem unbenannten Parameter
Abbildung 1 – HTTP-Anforderung mit einem unbenannten Parameter
Abbildung 2 – Bestätigungsdialog zum Wechseln
Abbildung 2 – Bestätigungsdialog zum Wechseln
Abbildung 3 – HTTP-Anforderung mit Körperdaten
Abbildung 3 – HTTP-Anforderung mit Körperdaten

Methodenhandhabung:
Die Anforderungsmethoden GET , DELETE , POST , PUT und PATCH funktionieren ähnlich, außer dass ab 3.1 nur die POST -Methode mehrteilige Anforderungen oder das Hochladen von Dateien unterstützt. Der Hauptteil der PUT- und PATCH- Methode muss als einer der folgenden bereitgestellt werden:

  • Definieren Sie den Körper als Datei mit leerem Feld für den Parameternamen. in diesem Fall wird der MIME-Typ als Inhaltstyp verwendet
  • Definieren Sie den Körper als Parameterwert(e) ohne Namen
  • Verwenden Sie die Registerkarte Körperdaten

Die Methoden GET , DELETE und POST haben eine zusätzliche Möglichkeit, Parameter über die Registerkarte Parameter zu übergeben. GET , DELETE , PUT und PATCH erfordern einen Content-Type. Wenn Sie keine Datei verwenden, hängen Sie einen Header-Manager an den Sampler an und definieren Sie dort den Content-Type.

JMeter-Scanantworten von eingebetteten Ressourcen. Es verwendet die Eigenschaft HTTPResponse.parsers , die eine Liste von Parser-IDs ist, zB htmlParser , cssParser und wmlParser . Für jede gefundene ID überprüft JMeter zwei weitere Eigenschaften:

  • id.types – eine Liste von Inhaltstypen
  • id.className – der Parser, der verwendet werden soll, um die eingebetteten Ressourcen zu extrahieren

Einzelheiten zu den Einstellungen finden Sie in der Datei jmeter.properties . Wenn die Eigenschaft HTTPResponse.parser nicht gesetzt ist, kehrt JMeter zum vorherigen Verhalten zurück, dh es werden nur Text-/HTML- Antworten gescannt

Langsame Verbindungen emulieren:

HttpClient4 und Java Sampler unterstützen die Emulation langsamer Verbindungen; siehe die folgenden Einträge in jmeter.properties :

# Zeichen pro Sekunde > 0 definieren, um langsame Verbindungen zu emulieren
#httpclient.socket.http.cps=0
#httpclient.socket.https.cps=0
Der Java -Sampler unterstützt jedoch nur langsame HTTPS-Verbindungen.

Berechnung der Antwortgröße

Die Java- Implementierung enthält keinen Transport-Overhead wie etwa Chunk-Header in der Größe des Antworttexts.
Die HttpClient4- Implementierung enthält den Overhead in der Größe des Antworttexts, sodass der Wert möglicherweise größer als die Anzahl der Bytes im Antwortinhalt ist.

Handhabung
von Wiederholungen Standardmäßig wurde die Wiederholung sowohl für HttpClient4- als auch für Java-Implementierungen auf 0 gesetzt, was bedeutet, dass keine Wiederholung versucht wird.
Für HttpClient4 kann die Anzahl der Wiederholungen überschrieben werden, indem die relevante JMeter-Eigenschaft festgelegt wird, zum Beispiel:

httpclient4.retrycount=3
Bei der HC4-Implementierung wird die Wiederholung standardmäßig auf idempotenten Http-Methoden durchgeführt. Wenn Sie es für alle Methoden wiederholen möchten, legen Sie die Eigenschaft fest
httpclient4.request_sent_retry_enabled=true
Beachten Sie, dass die Java-Implementierung standardmäßig auch keine Wiederholungen durchführt, Sie können dies durch Einstellung ändern
http.java.sampler.retries=3

Hinweis: Zertifikate entsprechen nicht den Algorithmuseinschränkungen
. Möglicherweise tritt der folgende Fehler auf: java.security.cert.CertificateException: Zertifikate entsprechen nicht den Algorithmuseinschränkungen, wenn Sie eine HTTPS-Anforderung auf einer Website mit einem SSL-Zertifikat (selbst oder einem der SSL-Zertifikate in seiner Vertrauenskette) mit einem Signaturalgorithmus, der MD2 verwendet (wie md2WithRSAEncryption ) oder mit einem SSL-Zertifikat mit einer Größe von weniger als 1024 Bit.

Dieser Fehler hängt mit der erhöhten Sicherheit in Java 8 zusammen.

Damit Sie Ihre HTTPS-Anforderung ausführen können, können Sie die Sicherheit Ihrer Java-Installation herabstufen, indem Sie die Java -Eigenschaft jdk.certpath.disabledAlgorithms bearbeiten . Entfernen Sie je nach Fall den MD2-Wert oder die Größenbeschränkung.

Diese Eigenschaft befindet sich in dieser Datei:

JAVA_HOME/jre/lib/security/java.security

Siehe Fehler 56357 für Details.

^

JDBC-Anfrage

Mit diesem Sampler können Sie eine JDBC-Anforderung (eine SQL-Abfrage) an eine Datenbank senden.

Bevor Sie dies verwenden, müssen Sie ein Konfigurationselement für die JDBC-Verbindungskonfiguration einrichten

Wenn die Liste „Variablennamen“ bereitgestellt wird, werden die Variablen für jede von einer Select-Anweisung zurückgegebene Zeile mit dem Wert der entsprechenden Spalte eingerichtet (falls ein Variablenname bereitgestellt wird), und die Anzahl der Zeilen wird ebenfalls eingerichtet. Wenn die Select-Anweisung beispielsweise 2 Zeilen mit 3 Spalten zurückgibt und die Variablenliste A,,C ist, werden die folgenden Variablen eingerichtet:

A_#=2 (Anzahl Zeilen)
A_1=Spalte 1, Zeile 1
A_2=Spalte 1, Zeile 2
C_#=2 (Anzahl Zeilen)
C_1=Spalte 3, Zeile 1
C_2=Spalte 3, Zeile 2

Wenn die Select-Anweisung null Zeilen zurückgibt, werden die Variablen A_# und C_# auf 0 gesetzt , und es werden keine anderen Variablen gesetzt.

Alte Variablen werden bei Bedarf gelöscht. Wenn beispielsweise die erste Auswahl sechs Zeilen abruft und eine zweite Auswahl nur drei Zeilen zurückgibt, werden die zusätzlichen Variablen für die Zeilen vier, fünf und sechs entfernt.

Die Latenzzeit wird ab der Zeit eingestellt, die zum Herstellen einer Verbindung benötigt wurde.
Screenshot für das Control-Panel von JDBC Request
Screenshot des Control-Panels von JDBC Request

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Variablenname des in der JDBC-Verbindungskonfiguration deklarierten Pools
Name der JMeter-Variablen, an die der Verbindungspool gebunden ist. Dieser muss mit dem Feld „ Variablenname “ einer JDBC-Verbindungskonfiguration übereinstimmen .
Ja
Abfragetyp
Stellen Sie dies entsprechend dem Anweisungstyp ein:
  • Aussage auswählen
  • Update-Anweisung - verwenden Sie diese auch für Einfügungen und Löschungen
  • Abrufbare Anweisung
  • Vorbereitete Select-Anweisung
  • Vorbereitete Aktualisierungsanweisung - verwenden Sie diese auch für Einfügungen und Löschungen
  • Verpflichten
  • Zurücksetzen
  • Autocommit (falsch)
  • Autocommit (wahr)
  • Bearbeiten - Dies sollte eine Variablenreferenz sein, die eine der oben genannten Werte ergibt
Die Typen Commit , Rollback , Autocommit(false) und Autocommit(true) sind etwas Besonderes, da sie die angegebenen SQL-Anweisungen ignorieren und nur den Zustand der Verbindung ändern.
Ja
SQL-Abfrage
SQL-Abfrage.
Geben Sie kein abschließendes Semikolon ein.
Es besteht im Allgemeinen keine Notwendigkeit, { und } zu verwenden, um aufrufbare Anweisungen einzuschließen; Sie können jedoch verwendet werden, wenn die Datenbank eine nicht standardmäßige Syntax verwendet.
Der JDBC-Treiber konvertiert die Anweisung bei Bedarf automatisch, wenn sie in {} eingeschlossen ist .
Zum Beispiel:
  • select * from t_customers where id=23
  • CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE (null, ?, ?, null, null, null)
    • Parameterwerte: Tabellenname , Dateiname
    • Parametertypen: VARCHAR , VARCHAR
Das zweite Beispiel geht davon aus, dass Sie Apache Derby verwenden.
Ja
Parameterwerte
Durch Kommas getrennte Liste von Parameterwerten. Verwenden Sie ]NULL[ , um einen NULL- Parameter anzugeben. (Bei Bedarf kann der Null-String geändert werden, indem die Eigenschaft " jdbcsampler.nullmarker " definiert wird.)
Die Liste muss in doppelte Anführungszeichen eingeschlossen werden, wenn einer der Werte ein Komma oder doppelte Anführungszeichen enthält, und alle eingebetteten doppelten Anführungszeichen müssen dies tun verdoppelt werden, zum Beispiel:
"Dbl-Zitat: "" und Komma: ,"
Es müssen so viele Werte wie Platzhalter in der Anweisung vorhanden sein, auch wenn Ihre Parameter OUT -Parameter sind . Stellen Sie sicher, dass Sie einen Wert festlegen, auch wenn der Wert nicht verwendet wird (z. B. in einem CallableStatement).
Ja, wenn eine vorbereitete oder aufrufbare Anweisung Parameter hat
Parametertypen
Kommagetrennte Liste von SQL-Parametertypen (z. B. INTEGER , DATE , VARCHAR , DOUBLE ) oder ganzzahligen Werten von Konstanten. Diese ganzzahligen Werte können verwendet werden, wenn Sie benutzerdefinierte Datenbanktypen verwenden, die vom Treiber vorgeschlagen werden (z. B. könnte OracleTypes.CURSOR durch seinen ganzzahligen Wert -10 dargestellt werden ).
Diese sind als Felder in der Klasse java.sql.Types definiert , siehe zum Beispiel:
Javadoc für java.sql.Types .
Hinweis: JMeter verwendet alle Typen, die von der Laufzeit-JVM definiert werden. Wenn Sie also eine andere JVM ausführen, lesen Sie unbedingt die entsprechende Dokumentation
Wenn die aufrufbare Anweisung INOUT- oder OUT - Parameter hat, müssen diese durch Voranstellen der entsprechenden Parametertypen gekennzeichnet werden, z. B. anstelle von " INTEGER ", verwenden Sie " INOUT INTEGER ".
Wenn nicht angegeben, wird " IN " angenommen, dh " DATE " ist dasselbe wie " IN DATE ".
Wenn der Typ nicht eines der Felder ist, die in java.sql.Types gefunden werden , akzeptiert JMeter auch die entsprechende Ganzzahl, z. B. da OracleTypes.CURSOR == -10 , können Sie " INOUT -10 " verwenden.
Es müssen so viele Typen vorhanden sein, wie es Platzhalter in der Anweisung gibt.
Ja, wenn eine vorbereitete oder aufrufbare Anweisung Parameter hat
Variablennamen
Durch Kommas getrennte Liste von Variablennamen zum Speichern von Werten, die von Select-Anweisungen, vorbereiteten Select-Anweisungen oder CallableStatement zurückgegeben werden. Beachten Sie, dass bei Verwendung mit CallableStatement die Liste der Variablen in der gleichen Reihenfolge wie die vom Aufruf zurückgegebenen OUT -Parameter sein muss. Wenn es weniger Variablennamen als OUT -Parameter gibt, sollen nur so viele Ergebnisse in den Thread-Kontextvariablen gespeichert werden, wie Variablennamen geliefert wurden. Wenn mehr Variablennamen als OUT- Parameter vorhanden sind, werden die zusätzlichen Variablen ignoriert
Nein
Name der Ergebnisvariablen
Wenn angegeben, wird dadurch eine Objektvariable erstellt, die eine Liste von Zeilenzuordnungen enthält. Jede Zuordnung enthält den Spaltennamen als Schlüssel und die Spaltendaten als Wert. Verwendungszweck:
columnValue = vars.getObject("resultObject").get(0).get("Spaltenname");
Nein
Abfrage-Timeout(s)
Legen Sie eine Zeitüberschreitung in Sekunden für die Abfrage fest, ein leerer Wert bedeutet 0, was unendlich ist. -1 bedeutet, dass keine Abfragezeitüberschreitung festgelegt wird, die für den Anwendungsfall erforderlich sein könnte oder wenn bestimmte Treiber keine Zeitüberschreitung unterstützen. Standardmäßig 0.
Nein
Ergebnismenge begrenzen
Begrenzt die Anzahl der Zeilen, die durch das ResultSet iteriert werden. Leerer Wert bedeutet -1 , z. B. keine Begrenzung, was auch der Standardwert ist. Dies kann helfen, die Datenmenge zu reduzieren, die über den JDBC-Treiber aus der Datenbank abgerufen werden muss, wirkt sich jedoch auf alle möglichen Optionen von Handle ResultSet aus – zB unvollständiges ResultSet und eine Datensatzanzahl ≤ dem Limit.
Nein
ResultSet behandeln
Definiert, wie ResultSet, das von aufrufbaren Anweisungen zurückgegeben wird, gehandhabt wird:
  • Als Zeichenfolge speichern (Standardeinstellung) – Alle Variablen in der Liste „Variablennamen“ werden als Zeichenfolgen gespeichert und durchlaufen keine Ergebnismenge , wenn sie in der Liste vorhanden ist. CLOB s werden in Strings umgewandelt. BLOB s werden in Strings konvertiert, als wären sie ein UTF-8-codiertes Byte-Array. Sowohl CLOB s als auch BLOB s werden nach jdbcsampler.max_retain_result_size Bytes abgeschnitten.
  • Als Objekt speichern – Variablen vom Typ ResultSet in der Liste der Variablennamen werden als Objekt gespeichert und können in nachfolgenden Tests/Skripten aufgerufen und iteriert werden, iterieren nicht durch das ResultSet . CLOB s werden so behandelt, als ob Store As String ausgewählt wurde. BLOBs werden als Byte-Array gespeichert. Sowohl CLOB s als auch BLOB s werden nach jdbcsampler.max_retain_result_size Bytes abgeschnitten.
  • Count Records - Variablen vom ResultSet- Typ werden iteriert, indem die Anzahl der Datensätze als Ergebnis angezeigt wird. Variablen werden als Strings gespeichert. Bei BLOBs wird die Größe des Objekts gespeichert.
Nein
Aktuelle Versionen von JMeter verwenden UTF-8 als Zeichenkodierung. Zuvor wurde der Plattformstandard verwendet.
Stellen Sie sicher, dass der Variablenname im gesamten Testplan eindeutig ist.
^

Java-Anfrage

Mit diesem Sampler können Sie eine Java-Klasse steuern, die die Schnittstelle org.apache.jmeter.protocol.java.sampler.JavaSamplerClient implementiert. Indem Sie Ihre eigene Implementierung dieser Schnittstelle schreiben, können Sie JMeter verwenden, um mehrere Threads, Eingabeparametersteuerung und Datenerfassung zu nutzen.

Das Pulldown-Menü enthält die Liste aller solcher Implementierungen, die JMeter in seinem Klassenpfad gefunden hat. Die Parameter können dann in der folgenden Tabelle angegeben werden - wie von Ihrer Implementierung definiert. Zwei einfache Beispiele ( JavaTest und SleepTest ) werden bereitgestellt.

Der Beispiel-Sampler JavaTest kann zum Überprüfen von Testplänen nützlich sein, da er es ermöglicht, Werte in fast allen Feldern festzulegen. Diese können dann von Assertions usw. verwendet werden. Die Felder ermöglichen die Verwendung von Variablen, sodass deren Werte leicht ersichtlich sind.

Screenshot für das Control-Panel von Java Request
Screenshot des Control-Panels von Java Request
Wenn die Methode teardownTest nicht von einer Unterklasse von AbstractJavaSamplerClient überschrieben wird, wird ihre Methode teardownTest nicht aufgerufen. Dies reduziert die Speicheranforderungen von JMeter. Dies hat keine Auswirkungen auf bestehende Testpläne.
Die Schaltflächen Hinzufügen/Löschen haben derzeit keinen Zweck.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Klassenname
Die spezifische Implementierung der zu testenden JavaSamplerClient-Schnittstelle.
Ja
Parameter mit Anfrage senden
Eine Liste von Argumenten, die an die Stichprobenklasse übergeben werden. Alle Argumente werden als Strings gesendet. Siehe unten für spezifische Einstellungen.
Nein

Die folgenden Parameter gelten für die SleepTest- und JavaTest- Implementierungen:

Parameter

Attribut
Beschreibung
Erforderlich
Schlafenszeit
Wie lange schlafen (ms)
Ja
Schlafmaske
Wie viel "Zufälligkeit" hinzufügen:
Die Schlafzeit wird wie folgt berechnet:
totalSleepTime = SleepTime + (System.currentTimeMillis() % SleepMask)
Ja

Für die JavaTest- Implementierung gelten zusätzlich folgende Parameter :

Parameter

Attribut
Beschreibung
Erforderlich
Etikett
Die zu verwendende Bezeichnung. Falls angegeben, überschreibt Name
Nein
Antwortcode
Legt, falls angegeben, den SampleResult ResponseCode fest.
Nein
Antwortnachricht
Legt, falls angegeben, die SampleResult ResponseMessage fest.
Nein
Status
Legt, falls angegeben, den SampleResult-Status fest. Wenn dies gleich " OK " ist (Groß-/Kleinschreibung ignorieren), wird der Status auf Erfolg gesetzt, andernfalls wird die Probe als fehlgeschlagen markiert.
Nein
SamplerData
Legt, falls angegeben, SampleResult SamplerData fest.
Nein
Ergebnisdaten
Legt, falls angegeben, die SampleResult ResultData fest.
Nein
^

LDAP-Anfrage

Mit diesem Sampler können Sie eine andere LDAP-Anfrage ( Hinzufügen , Ändern , Löschen und Suchen ) an einen LDAP-Server senden.

Wenn Sie mehrere Anfragen an denselben LDAP-Server senden, sollten Sie die Verwendung eines Standardkonfigurationselements für LDAP-Anfragen in Betracht ziehen, damit Sie nicht für jede LDAP-Anfrage dieselben Informationen eingeben müssen.

Auf die gleiche Weise wird das Login Config Element auch für Login und Passwort verwendet.
Screenshot für das Control-Panel der LDAP-Anfrage
Screenshot des Control-Panels der LDAP-Anfrage

Es gibt zwei Möglichkeiten, Testfälle zum Testen eines LDAP-Servers zu erstellen.

  1. Eingebaute Testfälle.
  2. Benutzerdefinierte Testfälle.

Es gibt vier Testszenarien zum Testen von LDAP. Die Tests sind unten angegeben:

  1. Prüfung hinzufügen
    1. Eingebauter Test:

      Dadurch wird ein vordefinierter Eintrag im LDAP-Server hinzugefügt und die Ausführungszeit berechnet. Nach Durchführung des Tests wird der erstellte Eintrag vom LDAP-Server gelöscht.

    2. Benutzerdefinierter Test:

      Dadurch wird der Eintrag im LDAP-Server hinzugefügt. Der Benutzer muss alle Attribute in die Tabelle eingeben. Die Einträge werden aus der hinzuzufügenden Tabelle gesammelt. Die Ausführungszeit wird berechnet. Der erstellte Eintrag wird nach dem Test nicht gelöscht.

  2. Test ändern
    1. Eingebauter Test:

      Dadurch wird zuerst ein vordefinierter Eintrag erstellt, dann der erstellte Eintrag im LDAP-Server geändert und die Ausführungszeit berechnet. Nach Durchführung des Tests wird der erstellte Eintrag vom LDAP-Server gelöscht.

    2. Benutzerdefinierter Test:

      Dadurch wird der Eintrag im LDAP-Server geändert. Der Benutzer muss alle Attribute in die Tabelle eingeben. Die Einträge werden aus der zu modifizierenden Tabelle gesammelt. Die Ausführungszeit wird berechnet. Der Eintrag wird nicht vom LDAP-Server gelöscht.

  3. Suchtest
    1. Eingebauter Test:

      Dadurch wird zuerst der Eintrag erstellt und dann gesucht, ob die Attribute verfügbar sind. Es berechnet die Ausführungszeit der Suchanfrage. Am Ende der Ausführung wird der erstellte Eintrag vom LDAP-Server gelöscht.

    2. Benutzerdefinierter Test:

      Dadurch wird der benutzerdefinierte Eintrag (Suchfilter) in der Suchbasis (wieder vom Benutzer definiert) durchsucht. Die Einträge sollten im LDAP-Server verfügbar sein. Die Ausführungszeit wird berechnet.

  4. Prüfung löschen
    1. Eingebauter Test:

      Dadurch wird zunächst ein vordefinierter Eintrag erstellt, der dann vom LDAP-Server gelöscht wird. Die Ausführungszeit wird berechnet.

    2. Benutzerdefinierter Test:

      Dadurch wird der benutzerdefinierte Eintrag im LDAP-Server gelöscht. Die Einträge sollten im LDAP-Server verfügbar sein. Die Ausführungszeit wird berechnet.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Servername oder IP
Domänenname oder IP-Adresse des LDAP-Servers. JMeter geht davon aus, dass der LDAP-Server den Standardport ( 389 ) überwacht.
Ja
Hafen
Port, zu dem eine Verbindung hergestellt werden soll (Standard ist 389 ).
Ja
Stamm-DN
Für LDAP-Operationen zu verwendender Basis-DN
Ja
Nutzername
Benutzername des LDAP-Servers.
Normalerweise
Passwort
Kennwort des LDAP-Servers. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Normalerweise
Eintrags-DN
der Name des zu erstellenden oder zu ändernden Kontexts; darf nicht leer sein.
Sie müssen die richtigen Attribute des Objekts selbst festlegen. Wenn Sie also cn=apache,ou=test hinzufügen möchten, müssen Sie den Tabellennamen und -wert zu cn und apache hinzufügen .
Ja, wenn Benutzerdefinierter Test und Test hinzufügen oder Test ändern ausgewählt ist
Löschen
der Name des zu löschenden Kontexts; darf nicht leer sein
Ja, wenn Benutzerdefinierter Test und Test löschen ausgewählt ist
Suchbasis
der Name des zu durchsuchenden Kontexts oder Objekts
Ja, wenn Benutzerdefinierter Test und Suchtest ausgewählt ist
Suchfilter
der für die Suche zu verwendende Filterausdruck; darf nicht null sein
Ja, wenn Benutzerdefinierter Test und Suchtest ausgewählt ist
Prüfung hinzufügen
Verwenden Sie diese Name - Wert -Paare für die Erstellung des neuen Objekts im gegebenen Kontext
Ja, wenn Benutzerdefinierter Test und Test hinzufügen ausgewählt ist
Prüfung modifizieren
Verwenden Sie diese Name - Wert -Paare zur Änderung des angegebenen Kontextobjekts
Ja, wenn Benutzerdefinierter Test und Test ändern ausgewählt sind
^

Erweiterte LDAP-Anfrage

Dieser Sampler kann alle 8 verschiedenen LDAP-Anfragen an einen LDAP-Server senden. Es ist eine erweiterte Version des LDAP-Samplers, daher ist es schwieriger zu konfigurieren, kann aber einer echten LDAP-Sitzung viel ähnlicher gemacht werden.

Wenn Sie mehrere Anfragen an denselben LDAP-Server senden möchten, sollten Sie ein LDAP Extended Request Defaults Configuration Element verwenden, damit Sie nicht für jede LDAP-Anfrage dieselben Informationen eingeben müssen.

Screenshot für das Control-Panel von LDAP Extended Request
Screenshot des Control-Panels von LDAP Extended Request

Es sind neun Testoperationen definiert. Diese Operationen sind unten angegeben:

Fadenbindung

Jede LDAP-Anforderung ist Teil einer LDAP-Sitzung, daher sollte als Erstes eine Sitzung mit dem LDAP-Server gestartet werden. Zum Starten dieser Sitzung wird ein Thread-Bind verwendet, das der LDAP- Bind - Operation entspricht. Der Benutzer wird aufgefordert, einen Benutzernamen (Distinguished Name) und ein Passwort anzugeben , die zum Initiieren einer Sitzung verwendet werden. Wenn kein oder ein falsches Passwort angegeben wird, wird eine anonyme Sitzung gestartet. Seien Sie vorsichtig, das Weglassen des Passworts wird diesen Test nicht bestehen, ein falsches Passwort wird es tun. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Servername
Der Name (oder die IP-Adresse) des LDAP-Servers.
Ja
Hafen
Die Portnummer, die der LDAP-Server überwacht. Wenn dies weggelassen wird, geht JMeter davon aus, dass der LDAP-Server auf dem Standardport (389) lauscht.
Nein
DN
Der Distinguished Name des Basisobjekts, das für alle nachfolgenden Vorgänge verwendet wird. Es kann als Ausgangspunkt für alle Operationen verwendet werden. Sie können keine Operation auf einer höheren Ebene als diesem DN starten!
Nein
Nutzername
Vollständiger Distinguished Name des Benutzers, als den Sie eine Bindung herstellen möchten.
Nein
Passwort
Passwort für den oben genannten Benutzer. Wenn es weggelassen wird, führt dies zu einer anonymen Bindung. Wenn es falsch ist, gibt der Sampler einen Fehler zurück und kehrt zu einer anonymen Bindung zurück. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Nein
Verbindungstimeout (in Millisekunden)
Timeout für Verbindung, bei Überschreitung wird die Verbindung abgebrochen
Nein
Verwenden Sie das sichere LDAP-Protokoll
Verwenden Sie das Schema ldaps:// anstelle von ldap://
Nein
Allen Zertifikaten vertrauen
Allen Zertifikaten vertrauen, wird nur verwendet, wenn Use Secure LDAP Protocol aktiviert ist
Nein
Faden lösen

Dies ist einfach der Vorgang zum Beenden einer Sitzung. Dies ist gleich der LDAP-Operation „ unbind “.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Einzelne Bindung/Unbind

Dies ist eine Kombination der LDAP-Operationen „ Bind “ und „ Unbind “. Es kann für eine Authentifizierungsanfrage/Passwortprüfung für jeden Benutzer verwendet werden. Es öffnet eine neue Sitzung, nur um die Gültigkeit der Kombination aus Benutzer und Passwort zu überprüfen, und beendet die Sitzung erneut.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Nutzername
Vollständiger Distinguished Name des Benutzers, als den Sie eine Bindung herstellen möchten.
Ja
Passwort
Passwort für den oben genannten Benutzer. Wenn es weggelassen wird, führt dies zu einer anonymen Bindung. Wenn es falsch ist, gibt der Sampler einen Fehler zurück. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Nein
Eintrag umbenennen

Dies ist die LDAP-Operation „ moddn “. Es kann zum Umbenennen eines Eintrags verwendet werden, aber auch zum Verschieben eines Eintrags oder eines kompletten Teilbaums an eine andere Stelle im LDAP-Baum.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Alter Eintragsname
Der aktuelle Distinguished Name des Objekts, das Sie umbenennen oder verschieben möchten, relativ zum angegebenen DN in der Thread-Bindeoperation.
Ja
Neuer bekannter Name
Der neue Distinguished Name des Objekts, das Sie umbenennen oder verschieben möchten, relativ zum angegebenen DN in der Thread-Bindeoperation.
Ja
Prüfung hinzufügen

Dies ist die LDAP-Operation „ Hinzufügen “. Es kann verwendet werden, um beliebige Objekte zum LDAP-Server hinzuzufügen.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Eintrags-DN
Distinguished Name des Objekts, das Sie hinzufügen möchten, relativ zum angegebenen DN in der Thread-Bindeoperation.
Ja
Prüfung hinzufügen
Eine Liste mit Attributen und ihren Werten, die Sie für das Objekt verwenden möchten. Wenn Sie ein Attribut mit mehreren Werten hinzufügen müssen, müssen Sie dasselbe Attribut mit den entsprechenden Werten mehrmals zur Liste hinzufügen.
Ja
Prüfung löschen

Dies ist die LDAP - Löschoperation , sie kann verwendet werden, um ein Objekt aus dem LDAP-Baum zu löschen

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Löschen
Distinguished Name des Objekts, das Sie löschen möchten, relativ zum angegebenen DN in der Thread-Bindeoperation.
Ja
Suchtest

Dies ist die LDAP -Suchoperation und wird zum Definieren von Suchen verwendet.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Suchbasis
Distinguished Name der Unterstruktur, in der Sie suchen möchten, relativ zum angegebenen DN in der Thread-Bindeoperation.
Nein
Suchfilter
searchfilter, muss in LDAP-Syntax angegeben werden.
Ja
Zielfernrohr
Verwenden Sie 0 für Basisobjekt-, 1 für eine Ebene- und 2 für eine Teilbaumsuche. (Standard = 0 )
Nein
Größenbeschränkung
Geben Sie die maximale Anzahl an Ergebnissen an, die Sie vom Server zurückgeben möchten. (Standard = 0 , was keine Begrenzung bedeutet.) Wenn der Sampler die maximale Anzahl von Ergebnissen erreicht, schlägt er mit Fehlercode 4 fehl
Nein
Zeitlimit
Geben Sie die maximale (CPU-)Zeit (in Millisekunden) an, die der Server für Ihre Suche aufwenden kann. Achtung, das sagt nichts über die Reaktionszeit aus. (Standard ist 0 , was keine Begrenzung bedeutet)
Nein
Attribute
Geben Sie die Attribute an, die Sie zurückgegeben haben möchten, getrennt durch ein Semikolon. Ein leeres Feld gibt alle Attribute zurück
Nein
Objekt zurückgeben
Ob das Objekt zurückgegeben wird ( true ) oder nicht ( false ). Standard = falsch
Nein
Aliase dereferenzieren
Wenn true , werden Aliase dereferenziert, wenn false , werden sie ihnen nicht folgen (Standard = false )
Nein
Die Suchergebnisse parsen?
Bei true werden die Suchergebnisse zu den Antwortdaten hinzugefügt. Bei false wird den Antwortdaten eine Markierung hinzugefügt, ob Ergebnisse gefunden wurden oder nicht.
Nein
Modifikationstest

Dies ist die LDAP- Änderungsoperation . Es kann verwendet werden, um ein Objekt zu ändern. Es kann verwendet werden, um Werte eines Attributs hinzuzufügen, zu löschen oder zu ersetzen.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Eintragsname
Distinguished Name des Objekts, das Sie ändern möchten, relativ zum angegebenen DN in der Thread-Bindeoperation
Ja
Modifikationstest
Der Attributwert-opCode verdreifacht.
Der opCode kann ein beliebiger gültiger LDAP-Operationscode sein ( add , delete , remove oder replace ). Wenn Sie bei einer Löschoperation
keinen Wert angeben , werden alle Werte des angegebenen Attributs gelöscht. Wenn Sie in einem Löschvorgang einen Wert angeben , wird nur der angegebene Wert gelöscht. Wenn dieser Wert nicht vorhanden ist, besteht der Probenehmer den Test nicht.

Ja
Vergleichen

Dies ist die LDAP- Vergleichsoperation . Es kann verwendet werden, um den Wert eines bestimmten Attributs mit einem bereits bekannten Wert zu vergleichen. In Wirklichkeit wird dies hauptsächlich verwendet, um zu überprüfen, ob eine bestimmte Person Mitglied einer Gruppe ist. In einem solchen Fall können Sie den DN des Benutzers als vorgegebenen Wert mit den Werten im Attribut „ member “ eines Objekts vom Typ groupOfNames vergleichen . Wenn der Vergleichsvorgang fehlschlägt, schlägt dieser Test mit dem Fehlercode 49 fehl .

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Eintrags-DN
Der aktuelle Distinguished Name des Objekts, dessen Attribut Sie vergleichen möchten, relativ zum angegebenen DN in der Thread-Bindeoperation.
Ja
Filter vergleichen
In der Form " Attribut=Wert "
Ja
^

Zugriffsprotokoll-Sampler

AccessLogSampler wurde entwickelt, um Zugriffsprotokolle zu lesen und HTTP-Anforderungen zu generieren. Für diejenigen, die mit dem Zugriffsprotokoll nicht vertraut sind, es ist das Protokoll, das der Webserver über jede akzeptierte Anfrage führt. Das heißt jedes Bild, CSS-Datei, JavaScript-Datei, HTML-Datei, …

Tomcat verwendet das gängige Format für Zugriffsprotokolle. Dies bedeutet, dass jeder Webserver, der das allgemeine Protokollformat verwendet, den AccessLogSampler verwenden kann. Zu den Servern, die ein gängiges Protokollformat verwenden, gehören: Tomcat, Resin, Weblogic und SunOne. Das übliche Protokollformat sieht folgendermaßen aus:

127.0.0.1 - - [21/Oct/2003:05:37:21 -0500] "GET /index.jsp?%2Findex.jsp= HTTP/1.1" 200 8343
Die aktuelle Implementierung des Parsers betrachtet nur den Text innerhalb der Anführungszeichen, der eine der HTTP-Protokollmethoden enthält ( GET , PUT , POST , DELETE , …). Alles andere wird ausgeblendet und ignoriert. Beispielsweise wird der Antwortcode vom Parser vollständig ignoriert.

Für die Zukunft könnte es sinnvoll sein, Einträge herauszufiltern, die keinen Antwortcode von 200 haben . Das Erweitern des Samplers sollte ziemlich einfach sein. Es gibt zwei Schnittstellen, die Sie implementieren müssen:

  • org.apache.jmeter.protocol.http.util.accesslog.LogParser
  • org.apache.jmeter.protocol.http.util.accesslog.Generator

Die aktuelle Implementierung von AccessLogSampler verwendet den Generator, um einen neuen HTTPSampler zu erstellen. Servername, Port und Get-Images werden von AccessLogSampler festgelegt. Als nächstes wird der Parser mit der Ganzzahl 1 aufgerufen und weist ihn an, einen Eintrag zu analysieren. Danach wird HTTPSampler.sample() aufgerufen, um die Anfrage zu stellen.

samp = (HTTPSampler) GENERATOR.generateRequest();
samp.setDomain(this.getDomain());
samp.setPort (this.getPort());
samp.setImageParser (this.isImageParser());
PARSER.parse(1);
res = sample.sample();
res.setSampleLabel(samp.toString());
Die erforderlichen Methoden in LogParser sind:
  • setGenerator(Generator)
  • analysieren (int)

Klassen, die die Generator -Schnittstelle implementieren, sollten eine konkrete Implementierung für alle Methoden bereitstellen. Ein Beispiel für die Implementierung einer der beiden Schnittstellen finden Sie unter StandardGenerator und TCLogParser .

Screenshot für das Control-Panel von Access Log Sampler
Screenshot der Systemsteuerung von Access Log Sampler

(Beta-Code)

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Server
Domänenname oder IP-Adresse des Webservers.
Ja
Protokoll
Planen
Nein (standardmäßig http
Hafen
Port, auf dem der Webserver lauscht.
Nein (standardmäßig 80)
Log-Parser-Klasse
Die Log-Parser-Klasse ist für das Parsen der Protokolle verantwortlich.
Ja (Standard bereitgestellt)
Filter
Die Filterklasse wird verwendet, um bestimmte Zeilen herauszufiltern.
Nein
Speicherort der Protokolldatei
Der Speicherort der Zugriffsprotokolldatei.
Ja

Der TCLogParser verarbeitet das Zugriffsprotokoll unabhängig für jeden Thread. SharedTCLogParser und OrderPreservingLogParser teilen sich den Zugriff auf die Datei, dh jeder Thread bekommt den nächsten Eintrag im Log.

Der SessionFilter soll Cookies über Threads hinweg handhaben. Es filtert keine Einträge heraus, sondern modifiziert den Cookie-Manager so, dass die Cookies für eine bestimmte IP jeweils von einem einzigen Thread verarbeitet werden. Wenn zwei Threads versuchen, Proben von derselben Client-IP-Adresse zu verarbeiten, muss einer warten, bis der andere fertig ist.

Der LogFilter soll das Filtern von Zugriffsprotokolleinträgen nach Dateinamen und Regex sowie das Ersetzen von Dateierweiterungen ermöglichen. Allerdings ist dies derzeit nicht über die GUI konfigurierbar, also nicht wirklich nutzbar.

^

BeanShell-Sampler

Mit diesem Sampler können Sie einen Sampler mit der Skriptsprache BeanShell schreiben.

Ausführliche Informationen zur Verwendung von BeanShell finden Sie auf der BeanShell-Website.

Die Migration zu JSR223 Sampler + Groovy wird aufgrund der Leistung, der Unterstützung neuer Java-Funktionen und der eingeschränkten Wartung der BeanShell-Bibliothek dringend empfohlen.

Das Testelement unterstützt die Schnittstellenmethoden ThreadListener und TestListener . Diese müssen in der Initialisierungsdatei definiert werden. Beispieldefinitionen finden Sie in der Datei BeanShellListeners.bshrc .

Der BeanShell-Sampler unterstützt auch die Interruptible -Schnittstelle. Die Methode interrupt() kann im Skript oder in der Init-Datei definiert werden.

Screenshot für das Control-Panel von BeanShell Sampler
Screenshot des Control-Panels von BeanShell Sampler

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird. Der Name wird in der Script-Variablen Label gespeichert
Nein
bsh.Interpreter vor jedem Aufruf zurücksetzen
Wenn diese Option ausgewählt ist, wird der Interpreter für jede Probe neu erstellt. Dies kann für einige lang laufende Skripte erforderlich sein. Weitere Informationen finden Sie unter Best Practices – BeanShell-Skripting .
Ja
Parameter
An das BeanShell-Skript zu übergebende Parameter. Dies ist für die Verwendung mit Skriptdateien vorgesehen; Für Skripte, die in der GUI definiert sind, können Sie beliebige Variablen- und Funktionsreferenzen verwenden, die Sie innerhalb des Skripts selbst benötigen. Die Parameter werden in folgenden Variablen gespeichert:
Parameter
Zeichenfolge, die die Parameter als einzelne Variable enthält
bsh.args
String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende BeanShell-Skript enthält. Der Dateiname wird in der Script-Variablen FileName gespeichert
Nein
Skript
Das auszuführende BeanShell-Skript. Der Rückgabewert (wenn nicht null ) wird als Sampler-Ergebnis gespeichert.
Ja (sofern keine Skriptdatei bereitgestellt wird)
Hinweis: Jede Sampler-Instanz hat ihren eigenen BeanShell-Interpreter, und Sampler werden nur von einem einzigen Thread aufgerufen

Wenn die Eigenschaft „ beanshell.sampler.init “ definiert ist, wird sie als Name einer Quelldatei an den Interpreter übergeben. Dies kann verwendet werden, um allgemeine Methoden und Variablen zu definieren. Im Verzeichnis bin befindet sich eine Beispiel-Init-Datei: BeanShellSampler.bshrc .

Wenn eine Skriptdatei bereitgestellt wird, wird diese verwendet, ansonsten wird das Skript verwendet.

JMeter verarbeitet Funktions- und Variablenreferenzen, bevor es das Skriptfeld an den Interpreter weitergibt, sodass die Referenzen nur einmal aufgelöst werden. Variablen- und Funktionsreferenzen in Skriptdateien werden wörtlich an den Interpreter weitergegeben, was wahrscheinlich einen Syntaxfehler verursacht. Um Laufzeitvariablen zu verwenden, verwenden Sie bitte die entsprechenden Props-Methoden, zB props.get("START.HMS"); props.put("PROP1","1234");
BeanShell unterstützt derzeit keine Java 5-Syntax wie Generika und die erweiterte for-Schleife.

Vor dem Aufruf des Skripts werden einige Variablen im BeanShell-Interpreter eingerichtet:

Der Inhalt des Parameterfeldes wird in die Variable „ Parameters “ geschrieben. Die Zeichenfolge wird auch in separate Token aufgeteilt, wobei ein einzelnes Leerzeichen als Trennzeichen verwendet wird, und die resultierende Liste wird im Zeichenfolgen-Array bsh.args gespeichert .

Die vollständige Liste der eingerichteten BeanShell-Variablen lautet wie folgt:

  • log - der Logger
  • Label - das Sampler-Label
  • FileName – der Dateiname, falls vorhanden
  • Parameter - Text aus dem Feld Parameter
  • bsh.args - die Parameter, aufgeteilt wie oben beschrieben
  • SampleResult – Zeiger auf das aktuelle SampleResult
  • ResponseCode ist standardmäßig 200
  • ResponseMessage ist standardmäßig " OK "
  • IsSuccess ist standardmäßig wahr
  • ctx - JMeterContext
  • vars - JMeterVariables - zB
    vars.get("VAR1");
    vars.put("VAR2","Wert");
    vars.remove("VAR3");
    vars.putObject("OBJ1",neues Objekt());
  • Requisiten - JMeterProperties (Klasse java.util.Properties ) - zB
    props.get("START.HMS");
    props.put("PROP1","1234");

Wenn das Skript abgeschlossen ist, wird die Kontrolle an den Sampler zurückgegeben und kopiert den Inhalt der folgenden Skriptvariablen in die entsprechenden Variablen in SampleResult :

  • ResponseCode - zum Beispiel 200
  • Antwortnachricht – zum Beispiel „ OK
  • IsSuccesswahr oder falsch

Das SampleResult ResponseData wird aus dem Rückgabewert des Skripts festgelegt. Wenn das Skript null zurückgibt, kann es die Antwort direkt festlegen, indem es die Methode SampleResult.setResponseData(data) verwendet , wobei data entweder ein String oder ein Byte-Array ist. Der Datentyp ist standardmäßig „ Text “, kann aber mithilfe der Methode SampleResult.setDataType(SampleResult.BINARY) auf Binär gesetzt werden .

Die Variable SampleResult gibt dem Skript vollen Zugriff auf alle Felder und Methoden in SampleResult . Das Skript hat beispielsweise Zugriff auf die Methoden setStopThread(boolean) und setStopTest(boolean) . Hier ist ein einfaches (nicht sehr nützliches!) Beispielskript:

if (bsh.args[0].equalsIgnoreCase("StopThread")) {
    log.info("Stopp-Thread erkannt!");
    SampleResult.setStopThread(true);
}
return "Daten aus Probe mit Label "+Label;
//oder
SampleResult.setResponseData("Meine Daten");
gib null zurück;

Ein weiteres Beispiel: Stellen Sie
sicher, dass die Eigenschaft beanshell.sampler.init=BeanShellSampler.bshrc in jmeter.properties definiert ist . Das folgende Skript zeigt die Werte aller Variablen im ResponseData -Feld:

getVariables zurückgeben ();

Einzelheiten zu den für die verschiedenen Klassen verfügbaren Methoden ( JMeterVariables , SampleResult usw.) finden Sie im Javadoc oder im Quellcode. Beachten Sie jedoch, dass der Missbrauch jeglicher Methoden subtile Fehler verursachen kann, die möglicherweise schwer zu finden sind.

^

JSR223-Sampler

Der JSR223-Sampler ermöglicht die Verwendung von JSR223-Skriptcode zur Durchführung eines Beispiels oder einiger Berechnungen, die zum Erstellen/Aktualisieren von Variablen erforderlich sind.

Wenn Sie beim Ausführen dieses Samplers kein SampleResult generieren möchten , rufen Sie die folgende Methode auf:
SampleResult.setIgnore();
Dieser Aufruf hat folgende Auswirkungen:
  • SampleResult wird nicht an SampleListener wie View Results Tree, Summariser ... geliefert.
  • SampleResult wird weder in Assertions noch in PostProcessors ausgewertet
  • SampleResult wird ausgewertet, um den Status des letzten Samples (${JMeterThread.last_sample_ok}) und ThreadGroup „Action to be take after a Sampler error“ (seit JMeter 5.4) zu berechnen.

Die JSR223-Testelemente verfügen über ein Feature (Kompilierung), das die Leistung erheblich steigern kann. So profitieren Sie von dieser Funktion:

  • Verwenden Sie Skriptdateien, anstatt sie einzubetten. Dadurch wird JMeter sie kompilieren, wenn diese Funktion in ScriptEngine verfügbar ist, und sie zwischenspeichern.
  • Oder Verwenden Sie Skripttext und aktivieren Sie die Eigenschaft Kompiliertes Skript zwischenspeichern, falls verfügbar .
    Stellen Sie bei Verwendung dieser Funktion sicher, dass Ihr Skriptcode keine JMeter-Variablen oder JMeter-Funktionsaufrufe direkt im Skriptcode verwendet, da beim Caching nur die erste Ersetzung zwischengespeichert würde. Verwenden Sie stattdessen Skriptparameter.
    Um vom Caching und der Kompilierung zu profitieren, muss die für die Skripterstellung verwendete Sprach-Engine die JSR223 Compilable- Schnittstelle implementieren (Groovy ist eine davon, Java, Beanshell und Javascript sind es nicht).
    Wenn Sie Groovy als Skriptsprache verwenden und Compiliertes Skript zwischenspeichern, falls verfügbar , nicht aktivieren (obwohl Caching empfohlen wird), sollten Sie diese JVM-Eigenschaft -Dgroovy.use.classvalue=true aufgrund eines Groovy-Speicherlecks ab Version 2.4.6 setzen, siehe:
Die Cache-Größe wird durch die folgende JMeter-Eigenschaft ( jmeter.properties ) gesteuert:
jsr223.compiled_scripts_cache_size=100
Anders als beim BeanShell Sampler wird der Interpreter zwischen den Aufrufen nicht gespeichert.
JSR223-Testelemente, die Skriptdatei oder Skripttext verwenden + aktiviertes Cache-kompiliertes Skript, falls verfügbar, werden jetzt kompiliert, wenn ScriptEngine diese Funktion unterstützt, dies ermöglicht große Leistungsverbesserungen.
Screenshot für das Control-Panel von JSR223 Sampler
Screenshot des Control-Panels von JSR223 Sampler
JMeter verarbeitet Funktions- und Variablenreferenzen, bevor es das Skriptfeld an den Interpreter weitergibt, sodass die Referenzen nur einmal aufgelöst werden. Variablen- und Funktionsreferenzen in Skriptdateien werden wörtlich an den Interpreter weitergegeben, was wahrscheinlich einen Syntaxfehler verursacht. Um Laufzeitvariablen zu verwenden, verwenden Sie bitte die entsprechenden Props-Methoden, z
props.get("START.HMS");
props.put("PROP1","1234");

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Skriptsprache
Name der zu verwendenden JSR223-Skriptsprache.
Es werden andere Sprachen als die in der Dropdown-Liste angezeigten unterstützt. Andere sind möglicherweise verfügbar, wenn die entsprechende JAR-Datei im Verzeichnis JMeter lib installiert ist.
Beachten Sie, dass einige Sprachen wie Velocity möglicherweise eine andere Syntax für JSR223-Variablen verwenden, z
$log.debug("Hallo" + $vars.get("a"));
für Geschwindigkeit.
Ja
Skriptdatei
Name einer Datei, die als JSR223-Skript verwendet werden soll. Wenn ein relativer Dateipfad verwendet wird, ist er relativ zu dem Verzeichnis, auf das durch die Systemeigenschaft " user.dir " verwiesen wird
Nein
Parameter
Liste der Parameter, die an die Skriptdatei oder das Skript übergeben werden sollen.
Nein
Zwischenspeichern des kompilierten Skripts, falls verfügbar
Wenn diese Option aktiviert (empfohlen) ist und die verwendete Sprache eine kompilierbare Schnittstelle unterstützt ( Groovy ist eine davon, Java, Beanshell und Javascript sind es nicht), kompiliert JMeter das Skript und speichert es mit seinem MD5-Hash als eindeutigen Cache-Schlüssel
Nein
Skript
Skript, das an die JSR223-Sprache übergeben werden soll
Ja (sofern keine Skriptdatei bereitgestellt wird)

Wenn eine Skriptdatei bereitgestellt wird, wird diese verwendet, ansonsten wird das Skript verwendet.

Vor dem Aufruf des Skripts werden einige Variablen eingerichtet. Beachten Sie, dass dies JSR223-Variablen sind - dh sie können direkt im Skript verwendet werden.

  • log - der Logger
  • Label - das Sampler-Label
  • FileName – der Dateiname, falls vorhanden
  • Parameter - Text aus dem Feld Parameter
  • args - die Parameter, aufgeteilt wie oben beschrieben
  • SampleResult – Zeiger auf das aktuelle SampleResult
  • sampler - ( Sampler ) - Zeiger auf aktuellen Sampler
  • ctx - JMeterContext
  • vars - JMeterVariables - zB
    vars.get("VAR1");
    vars.put("VAR2","Wert");
    vars.remove("VAR3");
    vars.putObject("OBJ1",neues Objekt());
  • Requisiten - JMeterProperties (Klasse java.util.Properties ) - zB
    props.get("START.HMS");
    props.put("PROP1","1234");
  • OUT - System.out - zB OUT.println("Nachricht")

Das SampleResult ResponseData wird aus dem Rückgabewert des Skripts festgelegt. Wenn das Skript null zurückgibt , kann es die Antwort direkt festlegen, indem es die Methode SampleResult.setResponseData(data) verwendet , wobei data entweder ein String oder ein Byte-Array ist. Der Datentyp ist standardmäßig „ Text “, kann aber mithilfe der Methode SampleResult.setDataType(SampleResult.BINARY) auf Binär gesetzt werden .

Die SampleResult-Variable gibt dem Skript vollen Zugriff auf alle Felder und Methoden in SampleResult. Das Skript hat beispielsweise Zugriff auf die Methoden setStopThread(boolean) und setStopTest(boolean) .

Im Gegensatz zum BeanShell-Sampler setzt der JSR223-Sampler den ResponseCode , die ResponseMessage und den Sample-Status nicht über Skriptvariablen. Derzeit ist die einzige Möglichkeit, diese zu ändern, über die SampleResult- Methoden:

  • SampleResult.setSuccessful(true/false)
  • SampleResult.setResponseCode("Code")
  • SampleResult.setResponseMessage("Nachricht")
^

TCP-Sampler

Der TCP-Sampler öffnet eine TCP/IP-Verbindung zum angegebenen Server. Es sendet dann den Text und wartet auf eine Antwort.

Wenn „ Verbindung wiederverwenden“ ausgewählt ist, werden Verbindungen zwischen Samplern im selben Thread geteilt, vorausgesetzt, dass genau dieselbe Hostnamenzeichenfolge und derselbe Port verwendet werden. Unterschiedliche Hosts/Port-Kombinationen verwenden unterschiedliche Verbindungen, ebenso wie unterschiedliche Threads. Wenn sowohl „ Verbindung wiederverwenden “ als auch „ Verbindung schließen “ ausgewählt sind, wird der Socket nach dem Ausführen des Samplers geschlossen. Beim nächsten Sampler wird ein weiterer Socket erstellt. Möglicherweise möchten Sie am Ende jeder Fadenschleife einen Sockel schließen.

Wenn ein Fehler erkannt wird – oder „ Reuse Connection “ nicht ausgewählt ist – wird der Socket geschlossen. Beim nächsten Sample wird ein weiterer Socket wieder geöffnet.

Die folgenden Eigenschaften können verwendet werden, um seinen Betrieb zu steuern:

tcp.status.präfix
Text, der einer Statusnummer vorangestellt ist
tcp.status.suffix
Text, der einer Statusnummer folgt
tcp.status.properties
Name der Eigenschaftsdatei, um Statuscodes in Meldungen umzuwandeln
tcp.handler
Name der TCP-Handler-Klasse (Standard TCPClientImpl ) – wird nur verwendet, wenn nicht auf der GUI angegeben
Die Klasse, die die Verbindung handhabt, wird von der GUI definiert, andernfalls die Eigenschaft tcp.handler . Falls nicht gefunden, wird die Klasse dann im Paket org.apache.jmeter.protocol.tcp.sampler gesucht .

Benutzer können ihre eigene Implementierung bereitstellen. Die Klasse muss org.apache.jmeter.protocol.tcp.sampler.TCPClient erweitern .

Die folgenden Implementierungen werden derzeit bereitgestellt.

  • TCPClientImpl
  • BinaryTCPClientImpl
  • LengthPrefixedBinaryTCPClientImpl
Die Implementierungen verhalten sich wie folgt:
TCPClientImpl
Diese Implementierung ist ziemlich einfach. Beim Lesen der Antwort wird bis zum Ende des Zeilenbytes gelesen, wenn dies durch Setzen der Eigenschaft tcp.eolByte definiert ist , ansonsten bis zum Ende des Eingabestroms. Sie können die Zeichensatzcodierung steuern, indem Sie tcp.charset festlegen , das standardmäßig die Standardcodierung der Plattform ist.
BinaryTCPClientImpl
Diese Implementierung wandelt die GUI-Eingabe, die eine Hex-codierte Zeichenfolge sein muss, in eine Binärdatei um und führt beim Lesen der Antwort das Gegenteil aus. Beim Lesen der Antwort wird bis zum Ende des Nachrichtenbytes gelesen, wenn dies durch Setzen der Eigenschaft tcp.BinaryTCPClient.eomByte definiert ist , ansonsten bis zum Ende des Eingabestroms.
LengthPrefixedBinaryTCPClientImpl
Diese Implementierung erweitert BinaryTCPClientImpl, indem den binären Nachrichtendaten ein Byte mit binärer Länge vorangestellt wird. Das Längenpräfix beträgt standardmäßig 2 Byte. Dies kann durch Setzen der Eigenschaft tcp.binarylength.prefix.length geändert werden .
Behandlung von Zeitüberschreitungen
Wenn das Timeout gesetzt ist, wird der Lesevorgang beendet, wenn dieses abgelaufen ist. Wenn Sie also ein eolByte / eomByte verwenden , achten Sie darauf, dass das Timeout ausreichend lang ist, da sonst der Lesevorgang vorzeitig abgebrochen wird.
Antwortbehandlung
Wenn tcp.status.prefix definiert ist, wird die Antwortnachricht nach dem darauffolgenden Text bis zum Suffix durchsucht. Wenn ein solcher Text gefunden wird, wird er verwendet, um den Antwortcode festzulegen. Die Antwortnachricht wird dann aus der Eigenschaftsdatei (falls vorhanden) abgerufen.
Verwendung von Prä- und Suffix
Wenn beispielsweise das Präfix = " [ " und das Suffix = " ] " ist, dann die folgende Antwort:
[J28] XI123,23,GBP,CR
hätte den Antwortcode J28 .
Response Codes im Bereich „ 400 “ – „ 499 “ und „ 500 “ – „ 599 “ gelten derzeit als Fehler; alle anderen sind erfolgreich. [Dies muss konfigurierbar gemacht werden!]
Anmeldename/Passwort werden von den mitgelieferten TCP-Implementierungen nicht verwendet.

Steckdosen werden am Ende eines Testlaufs getrennt.
Screenshot für das Control-Panel von TCP Sampler
Screenshot des Control-Panels von TCP Sampler

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
TCPClient-Klassenname
Name der TCPClient-Klasse. Standardmäßig die Eigenschaft tcp.handler , andernfalls TCPClientImpl .
Nein
Servername oder IP
Name oder IP des TCP-Servers
Ja
Port-Nummer
Zu verwendender Port
Ja
Verbindung wiederverwenden
Wenn ausgewählt, wird die Verbindung offen gehalten. Andernfalls wird es geschlossen, wenn die Daten gelesen wurden.
Ja
Verbindung schließen
Wenn diese Option ausgewählt ist, wird die Verbindung nach dem Ausführen des Samplers geschlossen.
Ja
SO_LINGER
Aktiviert/deaktiviert SO_LINGER mit der angegebenen Verweilzeit in Sekunden, wenn ein Socket erstellt wird. Wenn Sie den Wert " SO_LINGER " auf 0 setzen , können Sie verhindern, dass eine große Anzahl von Sockets mit einem TIME_WAIT- Status herumsitzen.
Nein
Bytewert für Zeilenende (EOL).
Byte-Wert für Zeilenende, setzen Sie diesen Wert auf einen Wert außerhalb des Bereichs von -128 bis +127 , um die EOL- Prüfung zu überspringen . Sie können dies auch in der Datei jmeter.properties mit der Eigenschaft eolByte festlegen . Wenn Sie dies gleichzeitig in der TCP-Sampler-Konfiguration und in der Datei jmeter.properties festlegen , wird der Einstellungswert in der TCP-Sampler-Konfiguration verwendet.
Nein
Verbindungs ​​Timeout
Connect Timeout (Millisekunden, 0 deaktiviert).
Nein
Reaktionszeitüberschreitung
Antwort-Timeout (Millisekunden, 0 deaktiviert).
Nein
NoDelay einstellen
Siehe java.net.Socket.setTcpNoDelay() . Wenn diese Option ausgewählt ist, wird der Algorithmus von Nagle deaktiviert, andernfalls wird der Algorithmus von Nagle verwendet.
Ja
Text zum Senden
Zu sendender Text
Ja
Login-Benutzer
Benutzername – wird von der Standardimplementierung nicht verwendet
Nein
Passwort
Passwort - wird von der Standardimplementierung nicht verwendet (NB, dies wird unverschlüsselt im Testplan gespeichert)
Nein
^

JMS-Publisher

JMS Publisher veröffentlicht Nachrichten an einem bestimmten Ziel (Thema/Warteschlange). Für diejenigen, die mit JMS nicht vertraut sind: Es ist die J2EE-Spezifikation für Messaging. Es gibt zahlreiche JMS-Server auf dem Markt und mehrere Open-Source-Optionen.


JMeter enthält kein JMS-Implementierungs-JAR; diese muss vom JMS-Provider heruntergeladen und im lib-Verzeichnis abgelegt werden
Screenshot für das Control-Panel von JMS Publisher
Screenshot des Control-Panels von JMS Publisher

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Verwenden Sie die JNDI-Eigenschaftendatei
Verwenden Sie jndi.properties . Beachten Sie, dass sich die Datei im Klassenpfad befinden muss – zB durch Aktualisieren der user.classpath JMeter-Eigenschaft. Wenn diese Option nicht ausgewählt ist, verwendet JMeter die Felder „ JNDI Initial Context Factory “ und „ Provider URL “, um die Verbindung herzustellen.
Ja
JNDI Initial Context Factory
Name der Kontextfactory
Nein
Anbieter-URL
Die URL für den JMS-Provider
Ja, es sei denn, Sie verwenden jndi.properties
Ziel
Das Nachrichtenziel (Thema oder Warteschlangenname)
Ja
Konfiguration
Der Setup-Typ des Ziels. Bei Beim Start ist der Zielname statisch (d. h. immer gleicher Name während des Tests), bei Jede Probe ist der Zielname dynamisch und wird bei jeder Probe ausgewertet (d. h. der Zielname kann eine Variable sein).
Ja
Authentifizierung
Authentifizierungsanforderung für den JMS-Provider
Ja
Benutzer
Nutzername
Nein
Passwort
Passwort (Achtung: dieses wird unverschlüsselt im Prüfplan gespeichert)
Nein
Ablauf
Die Ablaufzeit (in Millisekunden) der Nachricht, bevor sie veraltet ist. Wenn Sie keine Ablaufzeit angeben, ist der Standardwert 0 (läuft nie ab).
Nein
Priorität
Die Prioritätsstufe der Nachricht. Es gibt zehn Prioritätsstufen von 0 (niedrigste) bis 9 (höchste). Wenn Sie keine Prioritätsstufe angeben, ist die Standardstufe 4 .
Nein
Bei Fehlercodes erneut verbinden (regex)
Regulärer Ausdruck für JMSException-Fehlercodes, die eine erneute Verbindung erzwingen. Wenn leer, wird keine Wiederverbindung durchgeführt
Nein
Anzahl der zu aggregierenden Proben
Anzahl der zu aggregierenden Proben
Ja
Nachrichtenquelle
Wo Sie die Nachricht erhalten:
Aus Datei
bedeutet, dass die referenzierte Datei von allen Beispielen gelesen und wiederverwendet wird. Wenn sich der Dateiname ändert, wird er seit JMeter 3.0 neu geladen
Zufällige Datei aus dem unten angegebenen Ordner
bedeutet, dass eine zufällige Datei aus dem unten angegebenen Ordner ausgewählt wird, dieser Ordner muss entweder Dateien mit der Erweiterung .dat für Bytes-Nachrichten oder Dateien mit der Erweiterung .txt oder .obj für Objekt- oder Textnachrichten enthalten
Textbereich
Die Nachricht, die entweder für Text- oder Objektnachrichten verwendet werden soll
Ja
Nachrichtentyp
Text-, Karten-, Objektnachricht oder Bytes-Nachricht
Ja
Inhaltscodierung
Geben Sie die Codierung zum Lesen der Nachrichtenquelldatei an:
ROH :
Keine Variablenunterstützung aus der Datei und Laden mit Standard-Systemzeichensatz.
STANDARD :
Datei mit Standard-Systemcodierung laden, mit Ausnahme von XML, das auf dem XML-Prolog basiert. Wenn die Datei Variablen enthält, werden diese verarbeitet.
Standardzeichensätze :
Die angegebene Codierung (gültig oder nicht) wird zum Lesen der Datei und zum Verarbeiten von Variablen verwendet
Ja
Verwenden Sie den nicht persistenten Übermittlungsmodus?
Ob DeliveryMode.NON_PERSISTENT festgelegt werden soll (standardmäßig false )
Nein
JMS-Eigenschaften
Die JMS-Eigenschaften sind spezifische Eigenschaften für das zugrunde liegende Messaging-System. Sie können den Namen, den Wert und die Klasse (Typ) des Werts festlegen. Der Standardtyp ist String . Beispiel: Für WebSphere 5.1-Webdienste müssen Sie die JMS-Eigenschaft targetService festlegen, um Webdienste über JMS zu testen.
Nein

Für den MapMessage-Typ liest JMeter die Quelle als Textzeilen. Jede Zeile muss 3 Felder haben, die durch Kommas getrennt sind. Die Felder sind:

  • Name des Eintrags
  • Name der Objektklasse, z. B. „ String “ (setzt java.lang -Paket voraus, wenn nicht angegeben)
  • Wert der Objektzeichenfolge
WertVon(String)
name,String,Beispiel
Größe, Ganzzahl, 1234
Die Objektnachricht ist implementiert und funktioniert wie folgt:
  • Legen Sie das JAR, das Ihr Objekt und seine Abhängigkeiten enthält, im Ordner jmeter_home/lib/ ab
  • Serialisieren Sie Ihr Objekt als XML mit XStream
  • Geben Sie das Ergebnis entweder in eine Datei mit der Endung .txt oder .obj ein oder legen Sie den XML-Inhalt direkt im Textbereich ab
Beachten Sie, dass, wenn sich die Nachricht in einer Datei befindet, die Eigenschaften nicht ersetzt werden, während dies der Fall ist, wenn Sie den Textbereich verwenden.

Die folgende Tabelle zeigt einige Werte, die bei der Konfiguration von JMS hilfreich sein können:

Apache ActiveMQ Werte) Kommentar
Kontextfabrikorg.apache.activemq.jndi.ActiveMQInitialContextFactory.
Anbieter-URLvm://localhost
Anbieter-URLvm:(broker:(vm://localhost)?persistent=false)Persistenz deaktivieren
WarteschlangenreferenzdynamicQueues/QUEUENAME Definieren Sie den QUEUENAME dynamisch für JNDI
Themenreferenzdynamische Themen/TOPICNAME Definieren Sie TOPICNAME dynamisch für JNDI
^

JMS-Abonnent

Der JMS-Abonnent abonniert Nachrichten in einem bestimmten Ziel (Thema oder Warteschlange). Für diejenigen, die mit JMS nicht vertraut sind: Es ist die J2EE-Spezifikation für Messaging. Es gibt zahlreiche JMS-Server auf dem Markt und mehrere Open-Source-Optionen.


JMeter enthält kein JMS-Implementierungs-JAR; diese muss vom JMS-Provider heruntergeladen und im lib-Verzeichnis abgelegt werden
Screenshot für das Control-Panel des JMS-Abonnenten
Screenshot des Control-Panels des JMS-Abonnenten

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Verwenden Sie die JNDI-Eigenschaftendatei
Verwenden Sie jndi.properties . Beachten Sie, dass sich die Datei im Klassenpfad befinden muss – zB durch Aktualisieren der user.classpath JMeter-Eigenschaft. Wenn diese Option nicht ausgewählt ist, verwendet JMeter die Felder „ JNDI Initial Context Factory “ und „ Provider URL “, um die Verbindung herzustellen.
Ja
JNDI Initial Context Factory
Name der Kontextfactory
Nein
Anbieter-URL
Die URL für den JMS-Provider
Nein
Ziel
das Nachrichtenziel (Themen- oder Warteschlangenname)
Ja
Dauerhafte Abonnement-ID
Die ID, die für ein dauerhaftes Abonnement verwendet werden soll. Bei der ersten Verwendung wird die entsprechende Queue automatisch vom JMS-Provider generiert, falls sie noch nicht existiert.
Nein
Kunden ID
Die zu verwendende Client-ID, wenn Sie ein dauerhaftes Abonnement verwenden. Achten Sie darauf, eine Variable wie ${__threadNum} hinzuzufügen , wenn Sie mehr als einen Thread haben.
Nein
JMS-Selektor
Message Selector, wie in der JMS-Spezifikation definiert, um nur Nachrichten zu extrahieren, die die Selector-Bedingung erfüllen. Die Syntax verwendet einen Teil von SQL 92.
Nein
Konfiguration
Der Setup-Typ des Ziels. Bei Beim Start ist der Zielname statisch (d. h. immer gleicher Name während des Tests), bei Jede Probe ist der Zielname dynamisch und wird bei jeder Probe ausgewertet (d. h. der Zielname kann eine Variable sein)
Ja
Authentifizierung
Authentifizierungsanforderung für den JMS-Provider
Ja
Benutzer
Nutzername
Nein
Passwort
Passwort (Achtung: dieses wird unverschlüsselt im Prüfplan gespeichert)
Nein
Anzahl der zu aggregierenden Proben
Anzahl der zu aggregierenden Proben
Ja
Antwort speichern
soll der Sampler die Antwort speichern. Wenn nicht, wird nur die Antwortlänge zurückgegeben.
Ja
Auszeit
Geben Sie das anzuwendende Timeout in Millisekunden an. 0 = keine. Dies ist das gesamte aggregierte Timeout, nicht pro Sample.
Ja
Klient
Welche Clientimplementierung verwendet werden soll. Beide erstellen Verbindungen, die Nachrichten lesen können. Sie verwenden jedoch eine andere Strategie, wie unten beschrieben:
MessageConsumer.receive()
ruft Receive() für jede angeforderte Nachricht auf. Behält die Verbindung zwischen Samples bei, ruft aber keine Nachrichten ab, es sei denn, der Sampler ist aktiv. Dies ist am besten für Warteschlangenabonnements geeignet.
MessageListener.onMessage()
richtet einen Listener ein, der alle eingehenden Nachrichten in einer Warteschlange speichert. Der Listener bleibt aktiv, nachdem der Sampler abgeschlossen ist. Dies ist am besten für Themenabonnements geeignet.
Ja
Stoppen Sie zwischen den Proben?
Wenn diese Option ausgewählt ist, ruft JMeter Connection.stop() am Ende jedes Samples auf (und ruft start() vor jedem Sample auf). Dies kann in einigen Fällen nützlich sein, in denen mehrere Samples/Threads Verbindungen zu derselben Warteschlange haben. Wenn nicht ausgewählt, ruft JMeter Connection.start() am Anfang des Threads auf und ruft stop() erst am Ende des Threads auf.
Ja
Separator
Trennzeichen, das zum Trennen von Nachrichten verwendet wird, wenn mehr als eine vorhanden ist (bezogen auf die Einstellung Anzahl der zu aggregierenden Stichproben). Beachten Sie, dass \n , \r , \t akzeptiert werden.
Nein
Bei Fehlercodes erneut verbinden (regex)
Regulärer Ausdruck für JMSException-Fehlercodes, die eine erneute Verbindung erzwingen. Wenn leer, wird keine Wiederverbindung durchgeführt
Nein
Pause zwischen Fehlern (ms)
Pause in Millisekunden, die der Abonnent macht, wenn ein Fehler auftritt
Nein
^

JMS Punkt-zu-Punkt

Dieser Sampler sendet und empfängt optional JMS-Nachrichten über Punkt-zu-Punkt-Verbindungen (Warteschlangen). Es unterscheidet sich von Pub/Sub-Nachrichten und wird im Allgemeinen zur Abwicklung von Transaktionen verwendet.

request_only wird normalerweise verwendet, um ein JMS-System zu belasten.
request_reply wird verwendet, wenn Sie die Antwortzeit eines JMS-Dienstes testen möchten, der Nachrichten verarbeitet, die an die Anforderungswarteschlange gesendet werden, da dieser Modus auf die Antwort in der von diesem Dienst gesendeten Antwortwarteschlange wartet.
browse gibt die aktuelle Warteschlangentiefe zurück, dh die Anzahl der Nachrichten in der Warteschlange.
read liest eine Nachricht aus der Warteschlange (falls vorhanden).
clear löscht die Warteschlange, dh entfernt alle Nachrichten aus der Warteschlange.

JMeter verwendet die Eigenschaften java.naming.security.[principal|credentials] – falls vorhanden – beim Erstellen der Warteschlangenverbindung. Wenn dieses Verhalten nicht erwünscht ist, setzen Sie die JMeter-Eigenschaft JMSSampler.useSecurity.properties=false


JMeter enthält kein JMS-Implementierungs-JAR; diese muss vom JMS-Provider heruntergeladen und im lib-Verzeichnis abgelegt werden
Screenshot für das Control-Panel von JMS Point-to-Point
Screenshot des Control-Panels von JMS Point-to-Point

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
QueueConnection-Factory
Der JNDI-Name der Warteschlangenverbindungsfactory, die für die Verbindung zum Messagingsystem verwendet werden soll.
Ja
JNDI-Namensanforderungswarteschlange
Dies ist der JNDI-Name der Warteschlange, an die die Nachrichten gesendet werden.
Ja
JNDI-Namensantwortwarteschlange
Der JNDI-Name der Empfangswarteschlange. Wenn hier ein Wert angegeben wird und der Kommunikationsstil Request Response ist , wird diese Warteschlange auf Antworten auf die gesendeten Anfragen überwacht.
Nein
Anzahl der zu aggregierenden Proben
Anzahl der zu aggregierenden Proben. Gilt nur für den Kommunikationsstil Lesen.
Ja
JMS-Selektor
Message Selector, wie in der JMS-Spezifikation definiert, um nur Nachrichten zu extrahieren, die die Selector-Bedingung erfüllen. Die Syntax verwendet einen Teil von SQL 92.
Nein
Art zu Kommunizieren
Der Kommunikationsstil kann Request Only (auch bekannt als Fire and Forget), Request Response , Read , Browse , Clear :
Nur Anfrage
sendet nur Nachrichten und überwacht keine Antworten. Als solches kann es verwendet werden, um ein System zu belasten.
Antwort anfordern
sendet Nachrichten und überwacht die empfangenen Antworten. Das Verhalten hängt vom Wert der JNDI-Namensantwortwarteschlange ab. Wenn JNDI Name Reply Queue einen Wert hat, wird diese Warteschlange verwendet, um die Ergebnisse zu überwachen. Der Abgleich von Anforderung und Antwort erfolgt mit der Nachrichten-ID der Anforderung und der Korrelations-ID der Antwort. Wenn die JNDI-Namensantwortwarteschlange leer ist, werden temporäre Warteschlangen für die Kommunikation zwischen dem Anforderer und dem Server verwendet. Dies unterscheidet sich stark von der festen Antwortwarteschlange. Bei temporären Warteschlangen blockiert der sendende Thread, bis die Antwortnachricht empfangen wurde. Im Request-Response- Modus benötigen Sie einen Server, der Nachrichten abhört, die an die Request-Warteschlange gesendet werden, und Antworten an die Warteschlange sendet, auf die durch message.getJMSReplyTo() verwiesen wird .
Lesen
liest eine Nachricht aus einer ausgehenden Warteschlange, an die keine Listener angeschlossen sind. Dies kann für Testzwecke praktisch sein. Diese Methode kann verwendet werden, wenn Sie Warteschlangen ohne Bindungsdatei verarbeiten müssen (falls die jmeter-jms-skip-jndi-Bibliothek verwendet wird), die nur mit dem JMS-Point-to-Point-Sampler funktioniert. Falls Bindungsdateien verwendet werden, kann man auch den JMS Subscriber Sampler zum Lesen aus einer Warteschlange verwenden.
Durchsuche
bestimmt die aktuelle Warteschlangentiefe, ohne Nachrichten aus der Warteschlange zu entfernen, und gibt die Anzahl der Nachrichten in der Warteschlange zurück.
Klar
löscht die Warteschlange, dh entfernt alle Nachrichten aus der Warteschlange.
Ja
Verwenden Sie alternative Felder für die Nachrichtenkorrelation
Diese Kontrollkästchen wählen die Felder aus, die für den Abgleich der Antwortnachricht mit der ursprünglichen Anfrage verwendet werden.
Verwenden Sie die Anforderungsnachrichten-ID
Wenn diese Option ausgewählt ist, wird die Anfrage-JMSMessageID verwendet, andernfalls wird die Anfrage-JMSCorrelationID verwendet. Im letzteren Fall muss die Korrelations-ID in der Anfrage angegeben werden.
Verwenden Sie die Antwortnachrichten-ID
Wenn diese Option ausgewählt ist, wird die Antwort JMSMessageID verwendet, andernfalls wird die Antwort JMSCorrelationID verwendet.
Es gibt zwei häufig verwendete JMS-Korrelationsmuster:
JMS-Korrelations-ID-Muster
dh Anforderung und Antwort auf ihre Korrelations-IDs abgleichen => beide Kontrollkästchen deaktivieren und eine Korrelations-ID angeben.
JMS-Nachrichten-ID-Muster
dh Anforderungsnachrichten-ID mit Antwortkorrelations-ID abgleichen => nur "Anforderungsnachrichten-ID verwenden" auswählen.
In beiden Fällen ist die JMS-Anwendung für das Auffüllen der Korrelations-ID nach Bedarf verantwortlich.
Wenn dieselbe Warteschlange zum Senden und Empfangen von Nachrichten verwendet wird, ist die Antwortnachricht dieselbe wie die Anforderungsnachricht. Geben Sie in diesem Fall entweder eine Korrelations-ID an und deaktivieren Sie beide Kontrollkästchen. oder aktivieren Sie beide Kontrollkästchen, um die Nachrichten-ID für die Korrelation zu verwenden. Dies kann nützlich sein, um den rohen JMS-Durchsatz zu überprüfen.
Ja
Auszeit
Der Timeout in Millisekunden für die Antwortnachrichten. Wenn innerhalb der angegebenen Zeit keine Antwort empfangen wurde, schlägt der spezifische Testfall fehl und die nach dem Timeout empfangene spezifische Antwortnachricht wird verworfen. Der Standardwert ist 2000 ms. 0 bedeutet kein Timeout.
Ja
Ablauf
Die Ablaufzeit (in Millisekunden) der Nachricht, bevor sie veraltet ist. Wenn Sie keine Ablaufzeit angeben, ist der Standardwert 0 (läuft nie ab).
Nein
Priorität
Die Prioritätsstufe der Nachricht. Es gibt zehn Prioritätsstufen von 0 (niedrigste) bis 9 (höchste). Wenn Sie keine Prioritätsstufe angeben, ist die Standardstufe 4 .
Nein
Verwenden Sie den nicht persistenten Übermittlungsmodus?
Ob DeliveryMode.NON_PERSISTENT festgelegt werden soll .
Ja
Inhalt
Der Inhalt der Nachricht.
Nein
JMS-Eigenschaften
Die JMS-Eigenschaften sind spezifische Eigenschaften für das zugrunde liegende Messaging-System. Sie können den Namen, den Wert und die Klasse (Typ) des Werts festlegen. Der Standardtyp ist String . Beispiel: Für WebSphere 5.1-Webdienste müssen Sie die JMS-Eigenschaft targetService festlegen, um Webdienste über JMS zu testen.
Nein
Anfangskontext-Factory
Die Ausgangskontext-Factory ist die Factory, die zum Suchen der JMS-Ressourcen verwendet wird.
Nein
JNDI-Eigenschaften
Die JNDI-Eigenschaften sind die spezifischen Eigenschaften für die zugrunde liegende JNDI-Implementierung.
Nein
Anbieter-URL
Die URL für den JMS-Provider.
Nein
^

JUnit-Anfrage

Die aktuelle Implementierung unterstützt standardmäßige JUnit-Konventionen und -Erweiterungen. Es enthält auch Erweiterungen wie oneTimeSetUp und oneTimeTearDown . Der Sampler funktioniert wie der Java Request mit einigen Unterschieden.
  • Anstatt die Testschnittstelle von JMeter zu verwenden, durchsucht es die JAR-Dateien nach Klassen, die die TestCase - Klasse von JUnit erweitern. Das schließt jede Klasse oder Unterklasse ein.
  • JUnit-Test-JAR-Dateien sollten im Verzeichnis „ jmeter/lib/junit “ statt im Verzeichnis „/ lib “ abgelegt werden . Sie können auch die Eigenschaft " user.classpath " verwenden, um anzugeben, wo nach Testfallklassen gesucht werden soll .
  • Der JUnit-Sampler verwendet keine Name/Wert-Paare für die Konfiguration wie die Java-Anfrage . Der Sampler geht davon aus, dass setUp und tearDown den Test korrekt konfigurieren.
  • Der Sampler misst die verstrichene Zeit nur für die Testmethode und beinhaltet nicht setUp und tearDown .
  • Jedes Mal, wenn die Testmethode aufgerufen wird, übergibt JMeter das Ergebnis an die Listener.
  • Die Unterstützung für oneTimeSetUp und oneTimeTearDown erfolgt als Methode. Da JMeter multithreaded ist, können wir oneTimeSetUp / oneTimeTearDown nicht so aufrufen , wie es Maven tut.
  • Der Sampler meldet unerwartete Ausnahmen als Fehler. Es gibt einige wichtige Unterschiede zwischen standardmäßigen JUnit-Testläufern und der Implementierung von JMeter. Anstatt für jeden Test eine neue Instanz der Klasse zu erstellen, erstellt JMeter 1 Instanz pro Sampler und verwendet sie wieder. Dies kann mit der Checkbox „ Create a new instance per sample “ geändert werden.
Die aktuelle Implementierung des Samplers versucht zuerst, eine Instanz mit dem String-Konstruktor zu erstellen. Wenn die Testklasse keinen String-Konstruktor deklariert, sucht der Sampler nach einem leeren Konstruktor. Beispiel unten:
JUnit-Konstruktoren
Leerer Konstruktor:
öffentliche Klasse meinTestfall {
  öffentlich meinTestfall() {}
}
String-Konstruktor:
öffentliche Klasse meinTestfall {
  öffentlich meinTestfall(Stringtext) {
    super(text);
  }
}
Standardmäßig stellt JMeter einige Standardwerte für den Erfolgs-/Fehlercode und die Meldung bereit. Benutzer sollten eine Reihe eindeutiger Erfolgs- und Fehlercodes definieren und diese einheitlich für alle Tests verwenden.

Generelle Richtlinien

Wenn Sie setUp und tearDown verwenden , stellen Sie sicher, dass die Methoden öffentlich deklariert sind. Andernfalls wird der Test möglicherweise nicht ordnungsgemäß ausgeführt.
Hier sind einige allgemeine Richtlinien zum Schreiben von JUnit-Tests, damit sie gut mit JMeter funktionieren. Da JMeter multithreaded läuft, ist es wichtig, bestimmte Dinge im Auge zu behalten.
  • Schreiben Sie die Methoden setUp und tearDown so, dass sie Thread-sicher sind. Dies bedeutet im Allgemeinen, dass Sie die Verwendung statischer Member vermeiden.
  • Machen Sie die Testmethoden zu diskreten Arbeitseinheiten und nicht zu langen Abfolgen von Aktionen. Indem das Testverfahren auf einem diskreten Vorgang gehalten wird, wird es einfacher, Testverfahren zu kombinieren, um neue Testpläne zu erstellen.
  • Vermeiden Sie es, Testmethoden voneinander abhängig zu machen. Da JMeter eine beliebige Reihenfolge von Testmethoden zulässt, unterscheidet sich das Laufzeitverhalten vom standardmäßigen JUnit-Verhalten.
  • Wenn eine Testmethode konfigurierbar ist, achten Sie darauf, wo die Eigenschaften gespeichert werden. Es wird empfohlen, die Eigenschaften aus der Jar-Datei zu lesen.
  • Jeder Sampler erstellt eine Instanz der Testklasse, also schreiben Sie Ihren Test so, dass die Einrichtung in oneTimeSetUp und oneTimeTearDown erfolgt .
Screenshot für das Control-Panel von JUnit Request
Screenshot des Control-Panels von JUnit Request

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Suchen Sie nach JUnit4-Anmerkungen
Wählen Sie dies aus, um nach JUnit4 -Tests zu suchen ( @Test- Anmerkungen)
Ja
Paketfilter
Kommagetrennte Liste der anzuzeigenden Pakete. Beispiel: org.apache.jmeter , junit.framework .
Klassenname
Vollqualifizierter Name der JUnit-Testklasse.
Ja
Konstruktor-String
String-Übergabe an den String-Konstruktor. Wenn eine Zeichenfolge festgelegt ist, verwendet der Sampler den Zeichenfolgenkonstruktor anstelle des leeren Konstruktors.
Testmethode
Die zu testende Methode.
Ja
Erfolgsmeldung
Eine beschreibende Nachricht, die angibt, was Erfolg bedeutet.
Erfolgscode
Ein eindeutiger Code, der anzeigt, dass der Test erfolgreich war.
Fehlermeldung
Eine beschreibende Meldung, die angibt, was ein Fehler bedeutet.
Fehlercode
Ein eindeutiger Code, der anzeigt, dass der Test fehlgeschlagen ist.
Fehlermeldung
Eine Beschreibung für Fehler.
Fehlercode
Etwas Code für Fehler. Muss nicht eindeutig sein.
Rufen Sie nicht setUp und tearDown auf
Stellen Sie den Sampler so ein, dass er setUp und tearDown nicht aufruft . Standardmäßig sollten setUp und tearDown aufgerufen werden. Das Nichtaufrufen dieser Methoden könnte den Test beeinträchtigen und ihn ungenau machen. Diese Option sollte nur beim Aufrufen von oneTimeSetUp und oneTimeTearDown verwendet werden . Wenn die ausgewählte Methode oneTimeSetUp oder oneTimeTearDown ist, sollte diese Option aktiviert werden.
Ja
Assertionsfehler anhängen
Ob Behauptungsfehler an die Antwortnachricht angehängt werden sollen oder nicht.
Ja
Laufzeitausnahmen anhängen
Ob Laufzeitausnahmen an die Antwortnachricht angehängt werden sollen oder nicht. Gilt nur, wenn „ Assertionsfehler anhängen “ nicht ausgewählt ist.
Ja
Erstellen Sie eine neue Instanz pro Probe
Ob für jedes Beispiel eine neue JUnit-Instanz erstellt werden soll oder nicht. Standardmäßig falsch, was bedeutet, dass JUnit TestCase einmal erstellt und wiederverwendet wird.
Ja

Die folgenden JUnit4-Anmerkungen werden erkannt:

@Prüfen
Wird verwendet, um Testmethoden und Klassen zu finden. Die Attribute „ erwartet “ und „ Zeitüberschreitung “ werden unterstützt.
@Vor
wird in JUnit3 genauso behandelt wie setUp()
@Nach
wird in JUnit3 genauso behandelt wie tearDown()
@VorKlasse , @NachKlasse
als Testmethoden behandelt, sodass sie bei Bedarf unabhängig voneinander ausgeführt werden können
Beachten Sie, dass JMeter derzeit die Testmethoden direkt ausführt, anstatt sie JUnit zu überlassen. Dadurch können die setUp / tearDown- Methoden von der Abtastzeit ausgeschlossen werden. Folglich schließt die Sampler-Zeit die Zeit aus, die zum Aufrufen von setUp / tearDown- Methoden und ihren annotationsbasierten Alternativen benötigt wird.
^

E- Mail-Reader-Beispiel

Der Mail Reader Sampler kann E-Mail-Nachrichten mit POP3(S)- oder IMAP(S)-Protokollen lesen (und optional löschen).

Screenshot für das Control-Panel von Mail Reader Sampler
Screenshot des Control-Panels von Mail Reader Sampler

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Server Typ
Das vom Anbieter verwendete Protokoll: zB pop3 , pop3s , imap , imaps . oder eine andere Zeichenfolge, die das Serverprotokoll darstellt. Beispieldatei zur Verwendung mit dem schreibgeschützten E-Mail-Dateianbieter . Die eigentlichen Anbieternamen für POP3 und IMAP sind pop3 und imap
Ja
Server
Hostname oder IP-Adresse des Servers. Siehe unten für die Verwendung mit dem Dateiprotokoll .
Ja
Hafen
Port, der für die Verbindung zum Server verwendet werden soll (optional)
Nein
Nutzername
Anmeldename des Benutzers
Passwort
Benutzer-Login-Passwort (Hinweis: Dieses wird im Prüfplan unverschlüsselt gespeichert)
Mappe
Der zu verwendende IMAP(S)-Ordner. Siehe unten für die Verwendung mit dem Dateiprotokoll .
Ja, bei Verwendung von IMAP(S)
Anzahl der abzurufenden Nachrichten
Stellen Sie dies ein, um alle oder einige Nachrichten abzurufen
Ja
Nur Kopfzeilen abrufen
Wenn diese Option ausgewählt ist, werden nur die Nachrichtenkopfzeilen abgerufen.
Ja
Nachrichten vom Server löschen
Wenn gesetzt, werden Nachrichten nach Abruf gelöscht
Ja
Speichern Sie die Nachricht mit MIME
Ob die Nachricht als MIME gespeichert werden soll. Wenn dies der Fall ist, wird die gesamte Rohnachricht in den Antwortdaten gespeichert; Die Header werden nicht gespeichert, da sie in den Daten verfügbar sind. Wenn nicht, werden die Nachrichtenkopfzeilen als Antwortkopfzeilen gespeichert. Einige Kopfzeilen werden im Körper gespeichert ( Datum , An , Von , Betreff ).
Ja
Verwenden Sie keine Sicherheitsfunktionen
Gibt an, dass die Verbindung zum Server kein Sicherheitsprotokoll verwendet.
Verwenden Sie SSL
Gibt an, dass die Verbindung zum Server das SSL-Protokoll verwenden muss.
Verwenden Sie StartTLS
Gibt an, dass die Verbindung zum Server versuchen soll, das TLS-Protokoll zu starten.
Erzwingen Sie StartTLS
Wenn der Server das TLS-Protokoll nicht startet, wird die Verbindung beendet.
Allen Zertifikaten vertrauen
Wenn diese Option ausgewählt ist, werden alle Zertifikate unabhängig von der CA akzeptiert.
Verwenden Sie den lokalen Truststore
Wenn diese Option ausgewählt ist, werden nur lokal vertrauenswürdige Zertifikate akzeptiert.
Lokaler Truststore
Pfad zur Datei mit den vertrauenswürdigen Zertifikaten. Relative Pfade werden gegen das aktuelle Verzeichnis aufgelöst.
Andernfalls gegen das Verzeichnis, das das Testskript (JMX-Datei) enthält.
Sie können Mail-bezogene Umgebungseigenschaften übergeben, indem Sie eine der hier beschriebenen Eigenschaften zu user.properties hinzufügen .

Nachrichten werden als Subsamples des Hauptsamplers gespeichert. Mehrteilige Nachrichtenteile werden als Unterabtastwerte der Nachricht gespeichert.

Spezielle Handhabung für das „ Datei “-Protokoll:
Der Datei- JavaMail-Provider kann verwendet werden, um Rohnachrichten aus Dateien zu lesen. Das Server - Feld wird verwendet , um den Pfad zum übergeordneten Ordner des Ordners anzugeben . Einzelne Nachrichtendateien sollten unter dem Namen n.msg gespeichert werden , wobei n die Nachrichtennummer ist. Alternativ kann das Serverfeld der Name einer Datei sein, die eine einzelne Nachricht enthält. Die aktuelle Implementierung ist ziemlich einfach und hauptsächlich für Debugging-Zwecke gedacht.

^

Flusssteuerungsaktion (früher: Testaktion )

Der Flow Control Action Sampler ist ein Sampler, der für die Verwendung in einem bedingten Controller vorgesehen ist. Anstatt eine Probe zu erzeugen, pausiert oder stoppt das Testelement das ausgewählte Ziel.

Dieser Sampler kann auch in Verbindung mit dem Transaction Controller nützlich sein, da er das Einfügen von Pausen ermöglicht, ohne dass ein Sample generiert werden muss. Setzen Sie für variable Verzögerungen die Pausenzeit auf Null und fügen Sie einen Timer als Kind hinzu.

Die Aktion „ Stopp “ hält den Thread oder Test an, nachdem alle laufenden Proben abgeschlossen wurden. Die Aktion „ Jetzt stoppen “ stoppt den Test, ohne auf den Abschluss der Proben zu warten; es unterbricht alle aktiven Samples. Wenn einige Threads nicht innerhalb des 5-Sekunden-Zeitlimits beendet werden, wird eine Meldung im GUI-Modus angezeigt. Sie können versuchen, den Stop- Befehl zu verwenden, um zu sehen, ob dies die Threads stoppt, aber wenn nicht, sollten Sie JMeter beenden. Im CLI-Modus wird JMeter beendet, wenn einige Threads nicht innerhalb des Zeitlimits von 5 Sekunden beendet werden.

Die Wartezeit kann mit der JMeter-Eigenschaft jmeterengine.threadstop.wait geändert werden . Die Zeit wird in Millisekunden angegeben.

Screenshot für das Control-Panel der Flow-Control-Aktion
Screenshot des Control-Panels der Flow Control Action

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Ziel
Aktueller Thread / Alle Threads (bei Pause und Go to next loop iteration ignoriert )
Ja
Aktion
Pause / Stopp / Jetzt stoppen / Zur nächsten Schleifeniteration gehen
Ja
Dauer
Wie lange pausieren (Millisekunden)
Ja, wenn Pause ausgewählt ist
^

SMTP-Sampler

Der SMTP-Sampler kann E-Mail-Nachrichten über das SMTP/SMTPS-Protokoll senden. Es ist möglich, Sicherheitsprotokolle für die Verbindung (SSL und TLS) sowie die Benutzerauthentifizierung festzulegen. Wenn ein Sicherheitsprotokoll verwendet wird, erfolgt eine Überprüfung des Serverzertifikats.
Es stehen zwei Alternativen zur Handhabung dieser Überprüfung zur Verfügung:

Vertrauen Sie allen Zertifikaten
Dadurch wird die Überprüfung der Zertifikatskette ignoriert
Verwenden Sie einen lokalen Truststore
Mit dieser Option wird die Zertifikatskette anhand der lokalen Truststore-Datei validiert.
Screenshot für das Control-Panel von SMTP Sampler
Screenshot des Control-Panels von SMTP Sampler

Parameter

Attribut
Beschreibung
Erforderlich
Server
Hostname oder IP-Adresse des Servers. Siehe unten für die Verwendung mit dem Dateiprotokoll .
Ja
Hafen
Port, der für die Verbindung zum Server verwendet werden soll. Standardwerte sind: SMTP=25, SSL=465, StartTLS=587
Nein
Verbindungszeitüberschreitung
Verbindungs-Timeout-Wert in Millisekunden (Socket-Ebene). Standard ist unendliches Timeout.
Nein
Zeitüberschreitung lesen
Timeout-Wert in Millisekunden lesen (Socket-Level). Standard ist unendliches Timeout.
Nein
Adresse von
Die Absenderadresse, die in der E-Mail angezeigt wird
Ja
Richten an
Die Ziel-E-Mail-Adresse (mehrere Werte getrennt durch " ; ")
Ja, es sei denn, CC oder BCC ist angegeben
Adresse an CC
E-Mail-Adresse des Carbon Copy-Ziels (mehrere Werte getrennt durch " ; ")
Nein
Adresse an BCC
Ziel-E-Mail-Adresse für Blindkopien (mehrere Werte getrennt durch " ; ")
Nein
Adresse Reply-To
Alternative Antwortadresse (mehrere Werte getrennt durch " ; ")
Nein
Verwenden Sie Auth
Gibt an, ob der SMTP-Server eine Benutzerauthentifizierung erfordert
Nutzername
Anmeldename des Benutzers
Passwort
Benutzer-Login-Passwort (Hinweis: Dieses wird im Prüfplan unverschlüsselt gespeichert)
Verwenden Sie keine Sicherheitsfunktionen
Gibt an, dass die Verbindung zum SMTP-Server kein Sicherheitsprotokoll verwendet.
Verwenden Sie SSL
Gibt an, dass die Verbindung zum SMTP-Server das SSL-Protokoll verwenden muss.
Verwenden Sie StartTLS
Gibt an, dass die Verbindung zum SMTP-Server versuchen soll, das TLS-Protokoll zu starten.
Erzwingen Sie StartTLS
Wenn der Server das TLS-Protokoll nicht startet, wird die Verbindung beendet.
Allen Zertifikaten vertrauen
Wenn diese Option ausgewählt ist, werden alle Zertifikate unabhängig von der CA akzeptiert.
Verwenden Sie den lokalen Truststore
Wenn diese Option ausgewählt ist, werden nur lokal vertrauenswürdige Zertifikate akzeptiert.
Lokaler Truststore
Pfad zur Datei mit den vertrauenswürdigen Zertifikaten. Relative Pfade werden gegen das aktuelle Verzeichnis aufgelöst.
Andernfalls gegen das Verzeichnis, das das Testskript (JMX-Datei) enthält.
Überschreiben Sie die SSL/TLS-Protokolle des Systems
Geben Sie ein benutzerdefiniertes SSL/TLS-Protokoll als durch Leerzeichen getrennte Liste an, das im Handshake-Beispiel TLSv1 TLSv1.1 TLSv1.2 verwendet werden soll . Standardmäßig alle unterstützten Protokolle.
Nein
Thema
Der Betreff der E-Mail-Nachricht.
Betreffzeile unterdrücken
Wenn diese Option ausgewählt ist, wird der Header „ Subject: “ in der gesendeten E-Mail weggelassen. Dies unterscheidet sich vom Senden eines leeren „ Subject: “-Headers, obwohl einige E-Mail-Clients ihn möglicherweise identisch anzeigen.
Fügen Sie den Zeitstempel in den Betreff ein
Enthält System.currentTimemillis() in der Betreffzeile.
Kopfzeile hinzufügen
Über diese Schaltfläche können weitere Header definiert werden.
Nein
Nachricht
Der Nachrichtentext.
Plain Body senden (d. h. nicht mehrteilig/gemischt)
Wenn ausgewählt, senden Sie den Text als einfache Nachricht, dh nicht mehrteilig/gemischt , wenn möglich. Wenn der Nachrichtentext leer ist und eine einzelne Datei vorhanden ist, senden Sie den Dateiinhalt als Nachrichtentext.
Hinweis: Wenn der Nachrichtentext nicht leer ist und mindestens eine angehängte Datei vorhanden ist, wird der Nachrichtentext als multipart/mixed gesendet .
Nein
Dateien anhängen
Dateien, die an die Nachricht angehängt werden sollen.
EML-Datei senden
Wenn gesetzt, wird die .eml -Datei anstelle der Einträge in den Feldern Betreff , Nachricht und Datei(en) anhängen gesendet
Nachrichtengröße berechnen
Berechnet die Nachrichtengröße und speichert sie im Beispielergebnis.
Debug-Protokollierung aktivieren?
Wenn gesetzt, dann wird die Eigenschaft „ mail.debug “ auf „ true “ gesetzt
^

Betriebssystem-Prozess-Sampler

Der OS Process Sampler ist ein Sampler, der zum Ausführen von Befehlen auf dem lokalen Computer verwendet werden kann.
Es sollte die Ausführung aller Befehle ermöglichen, die über die Befehlszeile ausgeführt werden können.
Die Validierung des Rückkehrcodes kann aktiviert und der erwartete Rückkehrcode angegeben werden.

Beachten Sie, dass Betriebssystem-Shells im Allgemeinen eine Befehlszeilenanalyse bereitstellen. Dies variiert je nach Betriebssystem, aber im Allgemeinen teilt die Shell Parameter auf Leerzeichen auf. Einige Shells erweitern Wildcard-Dateinamen; manche nicht. Der Zitiermechanismus variiert auch zwischen den Betriebssystemen. Der Sampler verzichtet bewusst auf Parsing oder Quote-Handling. Der Befehl und seine Parameter müssen in der Form bereitgestellt werden, die von der ausführbaren Datei erwartet wird. Dies bedeutet, dass die Sampler-Einstellungen nicht zwischen Betriebssystemen übertragbar sind.

Viele Betriebssysteme verfügen über einige integrierte Befehle, die nicht als separate ausführbare Dateien bereitgestellt werden. Beispielsweise ist der Windows DIR - Befehl Teil des Befehlsinterpreters ( CMD.EXE ). Diese integrierten Programme können nicht als eigenständige Programme ausgeführt werden, sondern müssen dem entsprechenden Befehlsinterpreter als Argumente übergeben werden.

Beispielsweise muss die Windows-Befehlszeile: DIR C:\TEMP wie folgt angegeben werden:

Befehl:
CMD
Parameter 1:
/C
Parameter 2:
DIR
Parameter 3:
C:\TEMP
Screenshot für das Control-Panel von OS Process Sampler
Screenshot der Systemsteuerung von OS Process Sampler

Parameter

Attribut
Beschreibung
Erforderlich
Befehl
Der Name des auszuführenden Programms.
Ja
Arbeitsverzeichnis
Verzeichnis, von dem aus der Befehl ausgeführt wird, standardmäßig der Ordner, auf den von der Systemeigenschaft " user.dir " verwiesen wird
Nein
Befehlsparameter
An den Programmnamen übergebene Parameter.
Nein
Umgebungsparameter
Schlüssel/Wert-Paare, die der Umgebung hinzugefügt werden, wenn der Befehl ausgeführt wird.
Nein
Standardeingabe (stdin)
Name der Datei, aus der Eingaben entnommen werden sollen ( STDIN ).
Nein
Standardausgabe (stdout
Name der Ausgabedatei für die Standardausgabe ( STDOUT ). Wenn weggelassen, wird die Ausgabe erfasst und als Antwortdaten zurückgegeben.
Nein
Standardfehler (stderr)
Name der Ausgabedatei für Standardfehler ( STDERR ). Wenn weggelassen, wird die Ausgabe erfasst und als Antwortdaten zurückgegeben.
Nein
Überprüfen Sie den Rückgabecode
Wenn diese Option aktiviert ist, vergleicht der Sampler den Rückgabecode mit dem erwarteten Rückgabecode .
Nein
Erwarteter Rückkehrcode
Erwarteter Rückkehrcode für Systemaufruf, erforderlich, wenn " Check Return Code " aktiviert ist. Note 500 wird als Fehlerindikator in JMeter verwendet, Sie sollten ihn also nicht verwenden.
Nein
Auszeit
Timeout für Befehl in Millisekunden, standardmäßig 0 , was kein Timeout bedeutet. Wenn das Timeout abläuft, bevor der Befehl abgeschlossen ist, versucht JMeter, den Betriebssystemprozess zu beenden.
Nein
^

MongoDB-Skript (VERALTET)

Mit diesem Sampler können Sie eine Anfrage an eine MongoDB senden.

Bevor Sie dies verwenden, müssen Sie ein Element MongoDB Source Config Configuration einrichten

Dieses Element verwendet derzeit com.mongodb.DB#eval , das eine globale Schreibsperre verwendet, die eine Leistungsbeeinträchtigung der Datenbank verursacht, siehe db.eval() . Daher ist es besser, dieses Element nicht für Lasttests zu verwenden und stattdessen JSR223+Groovy-Skripting mit MongoDBHolder zu verwenden. MongoDB-Skript eignet sich eher für Funktionstests oder Testaufbauten (Setup-/Teardown-Threads)
Screenshot für das Control-Panel des MongoDB-Skripts (VERALTET)
Screenshot der Systemsteuerung des MongoDB-Skripts (VERALTET)

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
MongoDB-Quelle
Name der JMeter-Variablen, an die die MongoDB-Verbindung gebunden ist. Dies muss mit dem Feld „ MongoDB Source “ einer MongoDB Source Config übereinstimmen.
Ja
Name der Datenbank
Datenbankname, wird in Ihrem Skript verwendet
Ja
Nutzername
Nein
Passwort
Nein
Skript
Mongo-Skript, wie es in der MongoDB-Shell verwendet würde
Ja
Stellen Sie sicher, dass der Variablenname im gesamten Testplan eindeutig ist.
^
^

Schraubenanfrage

Mit diesem Sampler können Sie Cypher-Abfragen über das Bolt-Protokoll ausführen.

Bevor Sie dies verwenden, müssen Sie eine Bolzenverbindungskonfiguration einrichten

Jede Anforderung verwendet eine aus dem Pool abgerufene Verbindung und gibt sie an den Pool zurück, wenn der Sampler abgeschlossen ist. Die Größe des Verbindungspools verwendet die Treibervorgaben (~100) und ist derzeit nicht konfigurierbar.

Die gemessene Antwortzeit entspricht der "vollständigen" Abfrageausführung, einschließlich sowohl der Zeit zum Ausführen der Chiffrierabfrage als auch der Zeit zum Verbrauchen der von der Datenbank zurückgesendeten Ergebnisse.

Screenshot für das Control-Panel von Bolt Request
Screenshot des Control-Panels von Bolt Request

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Kommentare
Freitext für weitere Details.
Nein
Cypher-Anweisung
Die auszuführende Abfrage.
Ja
Parameter
Die Parameterwerte im JSON-Format.
Nein
Abfrageergebnisse aufzeichnen
Ob Abfrageergebnisdaten zur Sampler-Antwort hinzugefügt werden sollen oder nicht (standardmäßig „false“). Beachten Sie, dass die Aktivierung einen Speicher-Overhead hat, verwenden Sie ihn mit Bedacht.
Nein
Es wird dringend empfohlen, Abfrageparameter zu verwenden, damit die Datenbank Ausführungspläne zwischenspeichern und wiederverwenden kann.
^
^

18.2 Logik-Controller


Logic Controller bestimmen die Reihenfolge, in der Sampler verarbeitet werden.

Einfacher Controller

Mit dem Simple Logic Controller können Sie Ihre Sampler und andere Logic Controller organisieren. Im Gegensatz zu anderen Logic Controllern bietet dieser Controller keine Funktionalität, die über die eines Speichergeräts hinausgeht.

Screenshot für das Control-Panel des Simple Controllers
Screenshot der Systemsteuerung von Simple Controller

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Verwenden des einfachen Controllers

Laden Sie dieses Beispiel herunter (siehe Abbildung 6). In diesem Beispiel haben wir einen Testplan erstellt, der zwei Ant-HTTP-Anforderungen und zwei Log4J-HTTP-Anforderungen sendet. Wir haben die Ant- und Log4J-Anforderungen gruppiert, indem wir sie in Simple Logic Controllers platziert haben. Denken Sie daran, dass der Simple Logic Controller keinen Einfluss darauf hat, wie JMeter die Controller verarbeitet, die Sie ihm hinzufügen. In diesem Beispiel sendet JMeter also die Anfragen in der folgenden Reihenfolge: Ant-Startseite, Ant-News-Seite, Log4J-Startseite, Log4J-Verlaufsseite.

Beachten Sie, dass der File Reporter so konfiguriert ist, dass er die Ergebnisse in einer Datei namens „ simple-test.dat “ im aktuellen Verzeichnis speichert.

Abbildung 6 Einfaches Controller-Beispiel
Abbildung 6 Einfaches Controller-Beispiel
^

Loop-Controller

Wenn Sie Generative oder Logic Controller zu einem Loop Controller hinzufügen, durchläuft JMeter diese zusätzlich zu dem Loop-Wert, den Sie für die Thread-Gruppe angegeben haben, eine bestimmte Anzahl von Malen. Wenn Sie beispielsweise einem Loop Controller eine HTTP-Anforderung mit einer Schleifenanzahl von zwei hinzufügen und die Schleifenanzahl der Thread-Gruppe auf drei konfigurieren, sendet JMeter insgesamt 2 * 3 = 6 HTTP-Anforderungen.

JMeter stellt den Schleifenindex als Variable mit dem Namen __jm__<Name Ihres Elements>__idx bereit . Wenn Ihr Loop Controller beispielsweise LC heißt, können Sie über ${__jm__LC__idx} auf den Looping-Index zugreifen . Der Index beginnt bei 0

Screenshot für das Control-Panel des Loop Controllers
Screenshot des Control-Panels des Loop Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Schleifenanzahl
Die Anzahl der Wiederholungen der Unterelemente dieses Controllers bei jedem Testlauf.

Der Wert -1 entspricht dem Aktivieren des Forever -Schalters.

Sonderfall: Der im Thread Group- Element eingebettete Loop Controller verhält sich etwas anders. Sofern nicht für immer festgelegt, stoppt es den Test, nachdem die angegebene Anzahl von Iterationen durchgeführt wurde.

Beachten Sie bei der Verwendung einer Funktion in diesem Feld, dass sie möglicherweise mehrfach ausgewertet wird. Beispiel mit __Random wertet es auf einen anderen Wert für jeden untergeordneten Sampler von Loop Controller aus und führt zu unerwünschtem Verhalten.
Ja, es sei denn, „Für immer“ ist aktiviert
Schleifenbeispiel

Laden Sie dieses Beispiel herunter (siehe Abbildung 4). In diesem Beispiel haben wir einen Testplan erstellt, der eine bestimmte HTTP-Anforderung nur einmal und eine weitere HTTP-Anforderung fünfmal sendet.

Abbildung 4 – Beispiel einer Schleifensteuerung
Abbildung 4 – Beispiel einer Schleifensteuerung

Wir haben die Thread-Gruppe für einen einzelnen Thread und einen Loop-Count-Wert von eins konfiguriert. Anstatt die Thread-Gruppe die Schleife steuern zu lassen, haben wir einen Loop-Controller verwendet. Sie können sehen, dass wir der Thread-Gruppe eine HTTP-Anforderung und einem Schleifencontroller eine weitere HTTP-Anforderung hinzugefügt haben. Wir haben den Loop Controller mit einem Loop-Count-Wert von fünf konfiguriert.

JMeter sendet die Anfragen in der folgenden Reihenfolge: Startseite, Nachrichtenseite, Nachrichtenseite, Nachrichtenseite, Nachrichtenseite und Nachrichtenseite.

Beachten Sie, dass der File Reporter so konfiguriert ist, dass er die Ergebnisse in einer Datei namens „ loop-test.dat “ im aktuellen Verzeichnis speichert.
^

Einmaliger Controller

Der Once Only Logic Controller weist JMeter an, den/die darin enthaltenen Controller nur einmal pro Thread zu verarbeiten und alle Anforderungen darunter während weiterer Iterationen durch den Testplan zu übergeben.

Der Once-Only-Controller wird jetzt immer während der ersten Iteration eines übergeordneten Controllers mit Schleife ausgeführt. Wenn also der Once-Only-Controller unter einem Loop-Controller platziert wird, der für eine fünfmalige Schleife spezifiziert ist, dann wird der Once-Only-Controller nur bei der ersten Iteration durch den Loop-Controller ausgeführt (dh alle fünf Male).

Beachten Sie, dass sich der Once-Only-Controller immer noch wie zuvor erwartet verhält, wenn er einer Thread-Gruppe zugeordnet wird (wird nur einmal pro Test pro Thread ausgeführt), aber der Benutzer hat jetzt mehr Flexibilität bei der Verwendung des Once-Only-Controllers.

Für Tests, die eine Anmeldung erfordern, sollten Sie die Anmeldeanforderung in diesem Controller platzieren, da sich jeder Thread nur einmal anmelden muss, um eine Sitzung einzurichten.

Screenshot für das Control-Panel des Once Only Controllers
Screenshot des Control-Panels des Once Only Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Einmaliges Beispiel

Laden Sie dieses Beispiel herunter (siehe Abbildung 5). In diesem Beispiel haben wir einen Testplan mit zwei Threads erstellt, die eine HTTP-Anforderung senden. Jeder Thread sendet eine Anfrage an die Homepage, gefolgt von drei Anfragen an die Fehlerseite. Obwohl wir die Thread-Gruppe so konfiguriert haben, dass sie dreimal iteriert, sendet jeder JMeter-Thread nur eine Anfrage an die Homepage, da diese Anfrage in einem Once Only Controller lebt.

Abbildung 5. Einmaliges Controller-Beispiel
Abbildung 5. Einmaliges Controller-Beispiel

Jeder JMeter-Thread sendet die Anfragen in der folgenden Reihenfolge: Startseite, Fehlerseite, Fehlerseite, Fehlerseite.

Beachten Sie, dass der File Reporter so konfiguriert ist, dass er die Ergebnisse in einer Datei namens „ loop-test.dat “ im aktuellen Verzeichnis speichert.

^

Interleave-Controller

Wenn Sie einem Interleave-Controller generative oder logische Controller hinzufügen, wechselt JMeter zwischen jedem der anderen Controller für jede Loop-Iteration.

Screenshot für das Control-Panel des Interleave-Controllers
Screenshot des Control-Panels des Interleave-Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Sub-Controller-Blöcke ignorieren
Wenn diese Option aktiviert ist, behandelt der Interleave-Controller Sub-Controller wie einzelne Anforderungselemente und lässt jeweils nur eine Anforderung pro Controller zu.
Nein
Threads verschachteln
Wenn diese Option aktiviert ist, wechselt der Interleave-Controller zwischen jedem seiner untergeordneten Controller für jede Schleifeniteration, aber über alle Threads hinweg, z. B. in einer Konfiguration mit 4 Threads und 3 untergeordneten Controllern, wird bei der ersten Iteration Thread 1 das erste untergeordnete Element und Thread 2 das zweite untergeordnete Element ausführen , Thread 3 drittes untergeordnetes Element, Thread 4 erstes untergeordnetes Element, bei der nächsten Iteration führt jeder Thread den folgenden untergeordneten Controller aus
Nein
Einfaches Interleave-Beispiel

Laden Sie dieses Beispiel herunter (siehe Abbildung 1). In diesem Beispiel haben wir die Thread-Gruppe so konfiguriert, dass sie zwei Threads und eine Schleifenanzahl von fünf hat, für insgesamt zehn Anforderungen pro Thread. In der folgenden Tabelle finden Sie die Reihenfolge, in der JMeter die HTTP-Anforderungen sendet.

Abbildung 1 – Interleave-Controller – Beispiel 1
Abbildung 1 – Interleave-Controller – Beispiel 1
SchleifeniterationJeder JMeter-Thread sendet diese HTTP-Anforderungen
1Nachrichtenseite
1Protokollseite
2FAQ-Seite
2Protokollseite
3Gump-Seite
3Protokollseite
4Da im Controller keine Anfragen mehr vorhanden sind,

beginnt JMeter von vorne und sendet die erste HTTP-Anfrage, bei der es sich um die News-Seite handelt.
4Protokollseite
5FAQ-Seite
5Protokollseite
Nützliches Interleave-Beispiel

Laden Sie ein weiteres Beispiel herunter (siehe Abbildung 2). In diesem Beispiel haben wir die Thread-Gruppe so konfiguriert, dass sie einen einzelnen Thread und eine Schleifenanzahl von acht hat. Beachten Sie, dass der Testplan einen äußeren Interleave-Controller mit zwei darin enthaltenen Interleave-Controllern hat.


        Abbildung 2 – Interleave-Controller – Beispiel 2
Abbildung 2 – Interleave-Controller – Beispiel 2

Der äußere Interleave Controller wechselt zwischen den beiden inneren. Dann wechselt jeder innere Interleave-Controller zwischen jeder der HTTP-Anforderungen. Jeder JMeter-Thread sendet die Anfragen in der folgenden Reihenfolge: Startseite, Interleaved, Fehlerseite, Interleaved, CVS-Seite, Interleaved und FAQ-Seite, Interleaved.

Beachten Sie, dass der File Reporter so konfiguriert ist, dass er die Ergebnisse in einer Datei namens „ interleave-test2.dat “ im aktuellen Verzeichnis speichert.


        Abbildung 3 – Interleave-Controller – Beispiel 3
Abbildung 3 – Interleave-Controller – Beispiel 3

Wenn die beiden Interleave-Controller unter dem Haupt-Interleave-Controller stattdessen einfache Controller wären, dann wäre die Reihenfolge: Homepage, CVS-Seite, Interleaved, Bug-Seite, FAQ-Seite, Interleaved.

Wenn jedoch " Subcontroller-Blöcke ignorieren " auf dem Haupt-Interleave-Controller aktiviert wurde, wäre die Reihenfolge: Homepage, Interleaved, Bug-Seite, Interleaved, CVS-Seite, Interleaved und FAQ-Seite, Interleaved.

^

Zufälliger Controller

Der Random Logic Controller verhält sich ähnlich wie der Interleave Controller, außer dass er seine Sub-Controller und Sampler nicht der Reihe nach durchläuft, sondern bei jedem Durchgang zufällig einen auswählt.

Interaktionen zwischen mehreren Controllern können zu komplexem Verhalten führen. Dies gilt insbesondere für den Random Controller. Experimentieren Sie, bevor Sie davon ausgehen, welche Ergebnisse eine bestimmte Interaktion liefern wird
Screenshot für das Control-Panel von Random Controller
Screenshot des Control-Panels von Random Controller

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Sub-Controller-Blöcke ignorieren
Wenn diese Option aktiviert ist, behandelt der Interleave-Controller Sub-Controller wie einzelne Anforderungselemente und lässt jeweils nur eine Anforderung pro Controller zu.
Nein
^

Controller für zufällige Reihenfolge

Der Controller für zufällige Reihenfolge ähnelt einem einfachen Controller dahingehend, dass er jedes untergeordnete Element höchstens einmal ausführt, die Ausführungsreihenfolge der Knoten jedoch zufällig ist.

Screenshot für das Control-Panel des Random Order Controllers
Screenshot des Control-Panels des Random Order Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
^

Durchsatzcontroller

Mit dem Throughput Controller kann der Benutzer steuern, wie oft er ausgeführt wird. Es gibt zwei Modi:

  • Prozent Ausführung
  • totale Hinrichtungen
Prozent Hinrichtungen
bewirkt, dass der Controller einen bestimmten Prozentsatz der Iterationen durch den Testplan ausführt.
Totale Hinrichtungen
bewirkt, dass der Controller die Ausführung stoppt, nachdem eine bestimmte Anzahl von Ausführungen stattgefunden hat.
Wie beim Once-Only-Controller wird diese Einstellung zurückgesetzt, wenn ein übergeordneter Loop-Controller neu gestartet wird.

Dieser Controller hat einen schlechten Namen, da er den Durchsatz nicht steuert. Bitte beziehen Sie sich auf den Constant Throughput Timer für ein Element, das verwendet werden kann, um den Durchsatz anzupassen.
Screenshot für das Control-Panel des Throughput Controllers
Screenshot des Control-Panels des Throughput Controllers
Der Throughput Controller kann sehr komplexes Verhalten ergeben, wenn er mit anderen Controllern kombiniert wird - insbesondere mit Interleave- oder Random-Controllern als Eltern (ebenfalls sehr nützlich).

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Ausführungsstil
Ob der Controller im Modus „Prozentausführungen“ oder „Gesamtausführungen“ ausgeführt wird.
Ja
Durchsatz
Eine Zahl. Für den prozentualen Ausführungsmodus eine Zahl zwischen 0 und 100 , die angibt, wie oft der Controller in Prozent ausgeführt wird. „ 50 “ bedeutet, dass der Controller während der Hälfte der Iterationen durch den Testplan ausgeführt wird. Für den Gesamtausführungsmodus gibt die Zahl an, wie oft der Controller insgesamt ausgeführt wird.
Ja
Pro Benutzer
Wenn diese Option aktiviert ist, bewirkt pro Benutzer, dass der Controller berechnet, ob er pro Benutzer (pro Thread) ausgeführt werden soll. Wenn diese Option deaktiviert ist, gilt die Berechnung global für alle Benutzer. Wenn Sie beispielsweise den Gesamtausführungsmodus verwenden und „ pro Benutzer “ deaktivieren, ist die für den Durchsatz angegebene Zahl die Gesamtzahl der durchgeführten Ausführungen. Wenn „ pro Benutzer “ aktiviert ist, entspricht die Gesamtzahl der Ausführungen der Anzahl der Benutzer mal der für den Durchsatz angegebenen Zahl.
Nein
^

Laufzeitcontroller

Der Laufzeitcontroller steuert, wie lange seine Kinder laufen. Der Controller führt seine untergeordneten Elemente aus, bis die konfigurierte (n) Laufzeit(en) überschritten sind.

Screenshot für das Control-Panel des Runtime Controllers
Screenshot des Control-Panels des Runtime Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt und zum Benennen der Transaktion verwendet wird.
Ja
Laufzeit (Sekunden)
Gewünschte Laufzeit in Sekunden. 0 bedeutet kein Lauf.
Ja
^

Wenn Controller

Mit dem If-Controller kann der Benutzer steuern, ob die darunter liegenden Testelemente (seine Kinder) ausgeführt werden oder nicht.

Standardmäßig wird die Bedingung nur einmal beim ersten Eintrag ausgewertet, aber Sie haben die Möglichkeit, sie für jedes im Controller enthaltene ausführbare Element auszuwerten.

Die beste Option (Standardeinstellung) ist, Bedingung als Variablenausdruck interpretieren zu aktivieren? , dann hast du im Bedingungsfeld 2 Möglichkeiten:

  • Option 1: Verwenden Sie eine Variable, die wahr oder falsch enthält
    Wenn Sie testen möchten, ob das letzte Sample erfolgreich war, können Sie ${JMeterThread.last_sample_ok} verwenden.
    Wenn Controller Variable verwendet
    Wenn Controller Variable verwendet
  • Option 2: Verwenden Sie eine Funktion ( ${__jexl3()} wird empfohlen), um einen Ausdruck auszuwerten, der wahr oder falsch zurückgeben muss
    Wenn Controller Ausdruck verwendet
    Wenn Controller Ausdruck verwendet
Früher konnte man zum Beispiel die Bedingung verwenden: ${__jexl3(${VAR} == 23)} und diese würde als true / false ausgewertet werden , das Ergebnis würde dann an JavaScript übergeben, das dann true / false zurückgeben würde . Wenn die Option Variabler Ausdruck ausgewählt ist, wird der Ausdruck ausgewertet und mit „ true “ verglichen, ohne dass JavaScript verwendet werden muss.

Um zu testen, ob eine Variable undefiniert (oder null) ist, gehen Sie wie folgt vor, angenommen var heißt myVar , expression wird sein:
"${meineVar}" == "\${meineVar}"
Oder verwenden Sie:
"${meineVar}" != "\${meineVar}"
um zu testen, ob eine Variable definiert und nicht null ist.
Wenn Sie Bedingung als Variablenausdruck interpretieren deaktivieren? , Wenn der Controller intern JavaScript verwendet, um die Bedingung auszuwerten, die eine Leistungseinbuße hat, die sehr groß sein und Ihren Test weniger skalierbar machen kann.
Wenn der Controller Javascript verwendet
Wenn der Controller Javascript verwendet
Screenshot für das Control-Panel des If Controllers
Screenshot der Systemsteuerung des If Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Bedingung (Standard-JavaScript)
Standardmäßig wird die Bedingung als JavaScript -Code interpretiert, der „ true “ oder „ false “ zurückgibt , dies kann jedoch überschrieben werden (siehe unten).
Ja
Bedingung als Variablenausdruck interpretieren?
Wenn dies ausgewählt ist, dann muss die Bedingung ein Ausdruck sein, der zu „ true “ ausgewertet wird (Groß-/Kleinschreibung wird ignoriert). Beispiel: ${FOUND} oder ${__jexl3(${VAR} > 100)} . Im Gegensatz zum JavaScript-Fall wird die Bedingung nur daraufhin überprüft, ob sie mit „ true “ übereinstimmt (Groß-/Kleinschreibung wird ignoriert).
Für Aufführungen wird empfohlen , dies zu überprüfen und die Funktion __jexl3 oder __groovy in Condition zu verwenden
Ja
Auswertung für alle Kinder
Soll der Zustand aller Kinder beurteilt werden? Wenn nicht aktiviert, wird die Bedingung nur beim Eintritt ausgewertet.
Ja
Beispiele (JavaScript)
  • ${COUNT} < 10
  • "${VAR}" == "abcd"
Wenn beim Interpretieren des Codes ein Fehler auftritt, wird angenommen, dass die Bedingung false ist, und eine Meldung wird in jmeter.log protokolliert .
Beachten Sie, dass es aus Leistungsgründen empfohlen wird, den JavaScript-Modus zu vermeiden.

Achten Sie bei der Verwendung von __groovy darauf, keine Variablenersetzung in der Zeichenfolge zu verwenden, da andernfalls bei Verwendung einer Variablen, die das Skript ändert, das Skript nicht zwischengespeichert werden kann. Holen Sie sich die Variable stattdessen mit: vars.get("myVar"). Sehen Sie sich die Groovy-Beispiele unten an.
Beispiele (Variabler Ausdruck)
  • ${__groovy(vars.get("myVar") != "Invalid" )} (Groovy check myVar ist ungleich Invalid)
  • ${__groovy(vars.get("myInt").toInteger() <=4 )} (Groovy check myInt ist kleiner oder gleich 4)
  • ${__groovy(vars.get("myMissing") != null )} (Groovy prüft, ob die myMissing-Variable nicht gesetzt ist)
  • ${__jexl3(${COUNT} < 10)}
  • ${RESULT}
  • ${JMeterThread.last_sample_ok} (überprüfen Sie, ob das letzte Beispiel erfolgreich war)
^

Während Controller

Der While-Controller führt seine Kinder aus, bis die Bedingung " false " ist.

JMeter stellt den Schleifenindex als Variable mit dem Namen __jm__<Name Ihres Elements>__idx bereit . Wenn Ihr While-Controller beispielsweise WC heißt, können Sie über ${__jm__WC__idx} auf den Schleifenindex zugreifen . Der Index beginnt bei 0

Mögliche Bedingungswerte:

  • leer - Schleife verlassen, wenn der letzte Abtastwert in der Schleife fehlschlägt
  • LAST - Schleife verlassen, wenn der letzte Abtastwert in der Schleife fehlschlägt. Wenn das letzte Sample direkt vor der Schleife fehlgeschlagen ist, geben Sie Schleife nicht ein.
  • Andernfalls - Schleife verlassen (oder nicht betreten), wenn die Bedingung gleich der Zeichenfolge " false " ist
Die Bedingung kann eine beliebige Variable oder Funktion sein, die schließlich den String „ false “ ergibt. Dies ermöglicht die Verwendung von __jexl3 , __groovy Funktion, Eigenschaften oder Variablen nach Bedarf.

Beachten Sie, dass die Bedingung zweimal ausgewertet wird, einmal vor Beginn des Samplings von untergeordneten Elementen und einmal am Ende des Samplings von untergeordneten Elementen, sodass das Einfügen von nicht idempotenten Funktionen in Condition (wie __counter ) zu Problemen führen kann.

Zum Beispiel:
  • ${VAR} – wobei VAR durch ein anderes Testelement auf „false “ gesetzt wird
  • ${__jexl3(${C}==10)}
  • ${__jexl3("${VAR2}"=="abcd")}
  • ${_P(property)} - wo Eigenschaft woanders auf " false " gesetzt ist
Screenshot für das Control-Panel des While-Controllers
Screenshot des Control-Panels von While Controller

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt und zum Benennen der Transaktion verwendet wird.
Nein
Bedingung
leer, LAST oder Variable/Funktion
Nein
^

Controller wechseln ¶

Der Switch-Controller verhält sich insofern wie der Interleave-Controller , als er eines der untergeordneten Elemente bei jeder Iteration ausführt, aber anstatt sie nacheinander auszuführen, führt der Controller das durch den Schalterwert definierte Element aus.

Der Schalterwert kann auch ein Name sein.

Wenn der Schalterwert außerhalb des zulässigen Bereichs liegt, wird das nullte Element ausgeführt, das daher als Standard für den numerischen Fall fungiert. Es führt auch das nullte Element aus, wenn der Wert die leere Zeichenfolge ist.

Wenn der Wert nicht numerisch (und nicht leer) ist, sucht der Switch Controller nach dem Element mit demselben Namen (Groß-/Kleinschreibung ist wichtig). Wenn keiner der Namen übereinstimmt, wird das Element mit dem Namen „ default “ (Groß-/Kleinschreibung nicht signifikant) ausgewählt. Wenn es keinen Standardwert gibt, wird kein Element ausgewählt und der Controller führt nichts aus.

Screenshot für das Control-Panel des Switch Controllers
Screenshot der Systemsteuerung des Switch Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Wert wechseln
Die Nummer (oder der Name) des untergeordneten Elements, das aufgerufen werden soll. Elemente werden von 0 an nummeriert. Der Standardwert ist 0
Nein
^

ForEach-Controller

Ein ForEach-Controller durchläuft die Werte eines Satzes verwandter Variablen. Wenn Sie Sampler (oder Controller) zu einem ForEach-Controller hinzufügen, wird jedes Sample (oder jeder Controller) einmal oder mehrmals ausgeführt, wobei die Variable während jeder Schleife einen neuen Wert hat. Die Eingabe sollte aus mehreren Variablen bestehen, die jeweils mit einem Unterstrich und einer Zahl erweitert werden. Jede solche Variable muss einen Wert haben. Wenn also die Eingabevariable beispielsweise den Namen inputVar hat, sollten die folgenden Variablen definiert worden sein:

  • inputVar_1 = Wendy
  • EingabeVar_2 = Karl
  • inputVar_3 = peter
  • inputVar_4 = john

Hinweis: Das Trennzeichen „ _ “ ist jetzt optional.

Wenn die Rückgabevariable als " returnVar " angegeben wird, wird die Sammlung von Samplern und Controllern unter dem ForEach-Controller 4 Mal hintereinander ausgeführt, wobei die Rückgabevariable die jeweiligen oben genannten Werte hat, die dann in den Samplern verwendet werden können.

JMeter stellt den Schleifenindex als Variable mit dem Namen __jm__<Name Ihres Elements>__idx bereit . Wenn Ihr Loop Controller beispielsweise FEC heißt, können Sie über ${__jm__FEC__idx} auf den Looping-Index zugreifen . Der Index beginnt bei 0

Es eignet sich besonders für die Ausführung mit dem Postprozessor für reguläre Ausdrücke. Dieser kann aus den Ergebnisdaten einer vorangegangenen Anfrage die notwendigen Eingangsvariablen „erzeugen“. Durch Weglassen des Trennzeichens „ _ “ kann der ForEach-Controller verwendet werden, um die Gruppen zu durchlaufen, indem die Eingabevariable refName_g verwendet wird, und kann auch alle Gruppen in allen Übereinstimmungen durchlaufen, indem eine Eingabevariable der Form refName_${C verwendet wird }_g , wobei C eine Zählervariable ist.

Der ForEach-Controller führt keine Samples aus, wenn inputVar_1 null ist . Dies wäre der Fall, wenn der reguläre Ausdruck keine Übereinstimmungen zurückgibt.
Screenshot für das Control-Panel des ForEach-Controllers
Screenshot des Control-Panels des ForEach-Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Präfix der Eingabevariablen
Präfix für die als Eingabe zu verwendenden Variablennamen. Standardmäßig eine leere Zeichenfolge als Präfix.
Nein
Index für Schleife starten
Startindex (exklusiv) für Schleifen über Variablen (erstes Element ist bei Startindex + 1)
Nein
Endindex für Schleife
Endindex (inklusive) für Loop-Over-Variablen
Nein
Ausgangsvariable
Der Name der Variablen, die in der Schleife zum Ersetzen in den Samplern verwendet werden kann. Standardmäßig ein leerer Variablenname, der höchstwahrscheinlich nicht erwünscht ist.
Nein
Verwenden Sie Trennzeichen
Wenn nicht aktiviert, wird das Trennzeichen „ _ “ weggelassen.
Ja
ForEach-Beispiel

Laden Sie dieses Beispiel herunter (siehe Abbildung 7). In diesem Beispiel haben wir einen Testplan erstellt, der eine bestimmte HTTP-Anforderung nur einmal sendet und eine weitere HTTP-Anforderung an jeden Link sendet, der auf der Seite zu finden ist.

Abbildung 7 – Beispiel für einen ForEach-Controller
Abbildung 7 – Beispiel für einen ForEach-Controller

Wir haben die Thread-Gruppe für einen einzelnen Thread und einen Loop-Count-Wert von eins konfiguriert. Sie können sehen, dass wir der Thread-Gruppe eine HTTP-Anforderung und dem ForEach-Controller eine weitere HTTP-Anforderung hinzugefügt haben.

Nach der ersten HTTP-Anforderung wird ein Extraktor für reguläre Ausdrücke hinzugefügt, der alle HTML-Links aus der Rückgabeseite extrahiert und in die Variable inputVar einfügt

In der ForEach-Schleife wird ein HTTP-Sampler hinzugefügt, der alle Links anfordert, die aus der ersten zurückgegebenen HTML-Seite extrahiert wurden.

ForEach-Beispiel

Hier ist ein weiteres Beispiel , das Sie herunterladen können. Dies hat zwei reguläre Ausdrücke und ForEach-Controller. Das erste RE stimmt überein, aber das zweite stimmt nicht überein, sodass vom zweiten ForEach-Controller keine Samples ausgeführt werden

Abbildung 8 – ForEach-Controller – Beispiel 2
Abbildung 8 – ForEach-Controller – Beispiel 2

Die Thread-Gruppe hat einen einzelnen Thread und eine Schleifenanzahl von zwei.

Beispiel 1 verwendet den JavaTest-Sampler, um die Zeichenfolge " abcd " zurückzugeben.

Der Regex-Extraktor verwendet den Ausdruck (\w)\s , der einem Buchstaben gefolgt von einem Leerzeichen entspricht, und gibt den Buchstaben (nicht das Leerzeichen) zurück. Allen Übereinstimmungen wird die Zeichenfolge „ inputVar “ vorangestellt.

Der ForEach-Controller extrahiert alle Variablen mit dem Präfix „ inputVar_ “ und führt sein Beispiel aus, wobei er den Wert in der Variablen „ returnVar “ übergibt. In diesem Fall wird die Variable der Reihe nach auf die Werte „ a “, „ b “ und „ c “ gesetzt.

Der For 1 - Sampler ist ein weiterer Java-Sampler, der die Rückgabevariable „ returnVar “ als Teil des Sample-Labels und als Sampler-Daten verwendet.

Sample 2 , Regex 2 und For 2 sind fast identisch, außer dass der Regex in „ (\w)\sx “ geändert wurde, was eindeutig nicht übereinstimmt. Daher wird der For 2 Sampler nicht ausgeführt.

^

Modul-Controller

Der Modulcontroller stellt einen Mechanismus zum Ersetzen von Testplanfragmenten in den aktuellen Testplan zur Laufzeit bereit.

Ein Testplanfragment besteht aus einem Controller und allen darin enthaltenen Testelementen (Samplern etc.). Das Fragment kann sich in jeder Thread-Gruppe befinden. Wenn sich das Fragment in einer Thread-Gruppe befindet, kann sein Controller deaktiviert werden, um zu verhindern, dass das Fragment außer vom Modul-Controller ausgeführt wird. Oder Sie können die Fragmente in einer Dummy-Thread-Gruppe speichern und die gesamte Thread-Gruppe deaktivieren.

Es können mehrere Fragmente vorhanden sein, denen jeweils eine andere Serie von Samplern zugeordnet ist. Der Modulcontroller kann dann zum einfachen Umschalten zwischen diesen mehreren Testfällen verwendet werden, indem einfach der entsprechende Controller in seinem Dropdown-Feld ausgewählt wird. Dies bietet Komfort für die schnelle und einfache Ausführung vieler alternativer Testpläne.

Ein Fragmentname besteht aus dem Controller-Namen und allen übergeordneten Namen. Zum Beispiel:

Testplan/Protokoll: JDBC/Control/Interleave Controller (Modul1)

Alle vom Module Controller verwendeten Fragmente müssen einen eindeutigen Namen haben , da der Name verwendet wird, um den Zielcontroller zu finden, wenn ein Testplan neu geladen wird. Stellen Sie aus diesem Grund am besten sicher, dass der Controller-Name von der Voreinstellung geändert wird - wie im obigen Beispiel gezeigt -, da sonst versehentlich ein Duplikat erstellt werden kann, wenn neue Elemente zum Testplan hinzugefügt werden.

Screenshot für das Control-Panel des Modul-Controllers
Screenshot des Control-Panels des Modul-Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
Modul zum Ausführen
Der Modul-Controller stellt eine Liste aller in die GUI geladenen Controller bereit. Wählen Sie diejenige aus, die Sie zur Laufzeit ersetzen möchten.
Ja
^

Controller einschließen ¶

Der Include-Controller ist darauf ausgelegt, eine externe JMX-Datei zu verwenden. Um es zu verwenden, erstellen Sie unterhalb des Testplans ein Testfragment und fügen darunter beliebige Sampler, Controller usw. hinzu. Speichern Sie dann den Testplan. Die Datei kann jetzt als Teil anderer Testpläne eingefügt werden.

Der Einfachheit halber kann zu Debugging-Zwecken auch eine Thread-Gruppe in der externen JMX-Datei hinzugefügt werden. Ein Modulcontroller kann verwendet werden, um auf das Testfragment zu verweisen. Die Thread-Gruppe wird während des Include-Prozesses ignoriert.

Wenn der Test einen Cookie-Manager oder benutzerdefinierte Variablen verwendet, sollten diese im Testplan der obersten Ebene platziert werden, nicht in der enthaltenen Datei, da sonst nicht garantiert wird, dass sie funktionieren.

Dieses Element unterstützt keine Variablen/Funktionen im Dateinamenfeld.
Wenn jedoch die Eigenschaft includecontroller.prefix definiert ist, wird der Inhalt verwendet, um dem Pfadnamen ein Präfix voranzustellen.
Wenn Sie den Include-Controller verwenden und dieselbe JMX-Datei einschließen, stellen Sie sicher, dass Sie den Include-Controller anders benennen, um das bekannte Problem Bug 50898 zu vermeiden .

Wenn die Datei an dem durch Präfix + Dateiname angegebenen Speicherort nicht gefunden werden kann , versucht der Controller, den Dateinamen relativ zum JMX-Startverzeichnis zu öffnen .

Screenshot für das Control-Panel des Include-Controllers
Screenshot des Control-Panels des Include-Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Dateiname
Die einzuschließende Datei.
Ja
^

Transaktionscontroller

Der Transaktionscontroller generiert ein zusätzliches Muster, das die Gesamtzeit misst, die zum Ausführen der verschachtelten Testelemente benötigt wird.

Hinweis: Wenn das Kontrollkästchen „ Dauer von Timer und Pre-Post-Prozessoren in generiertes Beispiel einbeziehen “ aktiviert ist, umfasst die Zeit die gesamte Verarbeitung innerhalb des Controller-Bereichs, nicht nur die Beispiele.

Es gibt zwei Betriebsarten:

  • zusätzliches Sample wird nach den verschachtelten Samples hinzugefügt
  • zusätzliche Probe wird als übergeordnetes Element der verschachtelten Proben hinzugefügt

Die generierte Sample-Zeit beinhaltet alle Zeiten für die verschachtelten Sampler, ausgenommen standardmäßig (seit 2.11) Timer und die Verarbeitungszeit von Pre-/Post-Prozessoren, es sei denn, das Kontrollkästchen „ Dauer von Timer und Pre-Post-Prozessoren in generiertes Sample einbeziehen “ ist aktiviert. Je nach Taktauflösung kann sie etwas länger sein als die Summe der einzelnen Sampler plus Timer. Die Uhr kann ticken, nachdem der Controller die Startzeit aufgezeichnet hat, aber bevor die erste Probe beginnt. Ebenso am Ende.

Die erzeugte Stichprobe gilt nur dann als erfolgreich, wenn alle ihre Teilstichproben erfolgreich sind.

Im Parent-Modus sind die einzelnen Samples weiterhin im Tree View Listener zu sehen, erscheinen aber nicht mehr als separate Einträge in anderen Listenern. Außerdem erscheinen die Teilproben nicht in CSV-Protokolldateien, sie können jedoch in XML-Dateien gespeichert werden.

Im übergeordneten Modus können dem Transaktionscontroller Zusicherungen (usw.) hinzugefügt werden. Standardmäßig werden sie jedoch sowohl auf die einzelnen Stichproben als auch auf die gesamte Transaktionsstichprobe angewendet. Um den Umfang der Assertions einzuschränken, verwenden Sie einen einfachen Controller, der die Samples enthält, und fügen Sie die Assertions dem einfachen Controller hinzu. Übergeordnete Moduscontroller unterstützen derzeit verschachtelte Transaktionscontroller beider Typen nicht ordnungsgemäß.
Screenshot für das Control-Panel des Transaktionscontrollers
Screenshot der Systemsteuerung des Transaktionscontrollers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt und zum Benennen der Transaktion verwendet wird.
Ja
Stammprobe generieren
Wenn diese Option aktiviert ist, wird die Stichprobe als Elternteil der anderen Stichproben generiert, andernfalls wird die Stichprobe als unabhängige Stichprobe generiert.
Ja
Schließen Sie die Dauer des Timers und der Pre-Post-Prozessoren in das generierte Beispiel ein
Ob Timer-, Vor- und Nachverarbeitungsverzögerungen in das generierte Sample aufgenommen werden sollen. Standard ist falsch
Ja
^

Aufnahme-Controller

Der Recording Controller ist ein Platzhalter, der angibt, wo der Proxy-Server Samples aufzeichnen soll. Während des Testlaufs hat es keine Auswirkung, ähnlich wie beim einfachen Controller. Aber während der Aufzeichnung mit dem HTTP(S) Test Script Recorder werden alle aufgezeichneten Samples standardmäßig unter dem Recording Controller gespeichert.

Screenshot für das Control-Panel des Recording Controllers
Screenshot der Systemsteuerung des Recording Controllers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Controller, der in der Baumstruktur angezeigt wird.
Nein
^

Controller für kritische Abschnitte

Der Critical Section Controller stellt sicher, dass seine untergeordneten Elemente (Sampler/Controller usw.) von nur einem Thread ausgeführt werden, da eine benannte Sperre vorgenommen wird, bevor untergeordnete Elemente des Controllers ausgeführt werden.

Screenshot für das Control-Panel des Critical Section Controllers
Screenshot der Systemsteuerung des Critical Section Controllers

Die folgende Abbildung zeigt ein Beispiel für die Verwendung von Critical Section Controllern. In der Abbildung unten stellen 2 Critical Section Controller sicher, dass:

  • DS2-${__threadNum} wird jeweils nur von einem Thread ausgeführt
  • DS4-${__threadNum} wird jeweils nur von einem Thread ausgeführt
Testplan mit Critical Section Controller
Testplan mit Critical Section Controller

Parameter

Attribut
Beschreibung
Erforderlich
Sperrname
Sperre, die vom Controller übernommen wird, stellen Sie sicher, dass Sie unterschiedliche Sperrnamen für nicht verwandte Abschnitte verwenden
Ja
Critical Section Controller übernimmt Sperren nur innerhalb einer JVM. Wenn Sie also verteiltes Testen verwenden, stellen Sie sicher, dass Ihr Anwendungsfall nicht darauf angewiesen ist, dass alle Threads aller JVMs blockieren.
^
^

18.3 Zuhörer


Die meisten Zuhörer erfüllen zusätzlich zum "Zuhören" der Testergebnisse mehrere Rollen. Sie bieten auch Möglichkeiten zum Anzeigen, Speichern und Lesen gespeicherter Testergebnisse.

Beachten Sie, dass Listener am Ende des Bereichs verarbeitet werden, in dem sie sich befinden.

Das Speichern und Lesen von Testergebnissen ist generisch. Die verschiedenen Listener haben ein Panel, in dem man die Datei angeben kann, in die die Ergebnisse geschrieben (oder ausgelesen) werden. Standardmäßig werden die Ergebnisse als XML-Dateien gespeichert, normalerweise mit der Erweiterung „ .jtl “. Das Speichern als CSV ist die effizienteste Option, aber weniger detailliert als XML (die andere verfügbare Option).

Listener verarbeiten keine Beispieldaten im CLI-Modus, aber die Rohdaten werden gespeichert, wenn eine Ausgabedatei konfiguriert wurde. Um die von einem CLI-Lauf generierten Daten zu analysieren, müssen Sie die Datei in den entsprechenden Listener laden.

Um vorhandene Ergebnisse zu lesen und anzuzeigen, verwenden Sie die Schaltfläche „Durchsuchen“ im Dateifenster, um die Datei zu öffnen.

Wenn Sie alle aktuellen Daten vor dem Laden einer neuen Datei löschen möchten, verwenden Sie vor dem Laden der Datei die Menüelemente Ausführen  →  Löschen ( Strg  +  Umschalt  +  E ) oder Ausführen  →  Alles löschen ( Strg  +  E ) .

Ergebnisse können aus Dateien im XML- oder CSV-Format gelesen werden. Beim Lesen aus CSV-Ergebnisdateien wird der Header (falls vorhanden) verwendet, um festzustellen, welche Felder vorhanden sind. Um eine Header-lose CSV-Datei korrekt zu interpretieren, müssen die entsprechenden Properties in jmeter.properties gesetzt werden .

Von JMeter geschriebene XML-Dateien haben Version 1.0 im Header deklariert, während die eigentliche Datei mit 1.1-Regeln serialisiert wird. (Dies geschieht aus historischen Kompatibilitätsgründen; siehe Bug 59973 und Bug 58679 ) Dies führt dazu, dass strikte XML-Parser fehlschlagen. Erwägen Sie die Verwendung nicht strikter XML-Parser zum Lesen von JTL-Dateien.

Der Dateiname kann Funktions- und/oder Variablenreferenzen enthalten. Variablenreferenzen funktionieren jedoch nicht im Client-Server-Modus (Funktionen funktionieren OK). Dies liegt daran, dass die Datei auf dem Client erstellt wird und der Client den Test nicht lokal ausführt und daher keine Variablen einrichtet.

Zuhörer können viel Speicher verwenden, wenn viele Samples vorhanden sind. Die meisten Zuhörer behalten derzeit eine Kopie von jedem Sample in ihrem Bereich, abgesehen von:

  • Einfacher Datenschreiber
  • BeanShell/JSR223-Listener
  • Mailer-Visualizer
  • Kurzbericht

Die folgenden Listener müssen nicht mehr Kopien von jedem einzelnen Sample aufbewahren. Stattdessen werden Samples mit der gleichen verstrichenen Zeit aggregiert. Es wird jetzt weniger Speicher benötigt, insbesondere wenn die meisten Samples nur ein oder zwei Sekunden dauern.

  • Aggregierter Bericht
  • Aggregiertes Diagramm

Verwenden Sie den Simple Data Writer und das CSV-Format, um die benötigte Speichermenge zu minimieren.

JMeter-Variablen können in den Ausgabedateien gespeichert werden. Dies kann nur über eine Eigenschaft angegeben werden. Einzelheiten finden Sie in den Listener-Beispielvariablen

Ausführliche Informationen zum Einrichten der zu speichernden Standardelemente finden Sie in der Dokumentation zur Listener-Standardkonfiguration . Einzelheiten zum Inhalt der Ausgabedateien finden Sie im CSV-Protokollformat oder im XML-Protokollformat .

Die Einträge in jmeter.properties werden verwendet, um die Standardwerte zu definieren; Diese können für einzelne Listener überschrieben werden, indem Sie die Schaltfläche „Konfigurieren“ verwenden, wie unten gezeigt. Die Einstellungen in jmeter.properties gelten auch für den Listener, der mithilfe des Befehlszeilen-Flags -l hinzugefügt wird.

Die folgende Abbildung zeigt ein Beispiel für das Ergebnisdatei-Konfigurationsfenster

Konfigurationsfenster für Ergebnisdatei
Konfigurationsfenster für Ergebnisdatei

Parameter

Attribut
Beschreibung
Erforderlich
Dateiname
Name der Datei mit Beispielergebnissen. Der Dateiname kann entweder als relativer oder als absoluter Pfadname angegeben werden. Relative Pfade werden relativ zum aktuellen Arbeitsverzeichnis aufgelöst (das standardmäßig das Verzeichnis bin/ ist ). JMeter unterstützt auch Pfade relativ zu dem Verzeichnis, das den aktuellen Testplan (JMX-Datei) enthält. Wenn der Pfadname mit „ ~/ “ beginnt (oder was auch immer in der jmeter.save.saveservice.base_prefix JMeter-Eigenschaft steht), dann wird davon ausgegangen, dass der Pfad relativ zum Speicherort der JMX-Datei ist.
Nein
Durchsuche …
Schaltfläche zum Durchsuchen von Dateien
Nein
Fehler
Wählen Sie dies aus, um nur Ergebnisse mit Fehlern zu schreiben/lesen
Nein
Erfolge
Wählen Sie dies aus, um nur Ergebnisse ohne Fehler zu schreiben/lesen. Wenn weder Fehler noch Erfolge ausgewählt sind, werden alle Ergebnisse verarbeitet.
Nein
Konfigurieren
Schaltfläche konfigurieren, siehe unten
Nein

Beispielergebnis Konfiguration speichern

Listener können so konfiguriert werden, dass sie verschiedene Elemente in den Ergebnisprotokolldateien (JTL) speichern, indem Sie das Konfigurations-Popup wie unten gezeigt verwenden. Die Standardwerte sind wie in der Dokumentation Listener Default Configuration beschrieben definiert . Elemente mit ( CSV ) nach dem Namen gelten nur für das CSV-Format; Elemente mit ( XML ) gelten nur für das XML-Format. Das CSV-Format kann derzeit nicht zum Speichern von Elementen verwendet werden, die Zeilenumbrüche enthalten.

Beachten Sie, dass Cookies, Methode und der Abfragestring als Teil der Option " Sampler Data " gespeichert werden.

Screenshot für das Control-Panel der Sample Result Save Configuration
Screenshot der Systemsteuerung der Konfiguration zum Speichern von Beispielergebnissen
^

Diagrammergebnisse

Diagrammergebnisse DÜRFEN während des Belastungstests NICHT VERWENDET WERDEN, da sie viele Ressourcen (Speicher und CPU) verbrauchen. Verwenden Sie es nur für funktionale Tests oder während des Debuggens und der Validierung von Testplänen.

Der Graph Results-Listener generiert ein einfaches Diagramm, das alle Abtastzeiten darstellt. Am unteren Rand des Diagramms werden das aktuelle Sample (schwarz), der aktuelle Durchschnitt aller Samples (blau), die aktuelle Standardabweichung (rot) und die aktuelle Durchsatzrate (grün) in Millisekunden angezeigt.

Die Durchsatzzahl stellt die tatsächliche Anzahl der Anfragen/Minute dar, die der Server bearbeitet hat. Diese Berechnung beinhaltet alle Verzögerungen, die Sie Ihrem Test hinzugefügt haben, und die interne Verarbeitungszeit von JMeter. Der Vorteil einer solchen Berechnung besteht darin, dass diese Zahl etwas Reales darstellt - Ihr Server hat tatsächlich so viele Anfragen pro Minute verarbeitet, und Sie können die Anzahl der Threads erhöhen und/oder die Verzögerungen verringern, um den maximalen Durchsatz Ihres Servers zu ermitteln. Wenn Sie dagegen Berechnungen anstellen, die Verzögerungen und die Verarbeitung von JMeter berücksichtigen, wäre unklar, was Sie aus dieser Zahl schließen könnten.

Screenshot für das Bedienfeld der Diagrammergebnisse
Screenshot des Bedienfelds der Diagrammergebnisse

In der folgenden Tabelle werden die Elemente des Diagramms kurz beschrieben. Weitere Einzelheiten zur genauen Bedeutung der statistischen Begriffe finden Sie im Internet - zB Wikipedia - oder in einem Statistikbuch.

  • Daten - Zeichnen Sie die tatsächlichen Datenwerte auf
  • Durchschnitt - Zeichnen Sie den Durchschnitt auf
  • Median - Zeichnen Sie den Median (Mittelwert)
  • Abweichung - Plotten Sie die Standardabweichung (ein Maß für die Abweichung)
  • Durchsatz - Stellen Sie die Anzahl der Proben pro Zeiteinheit dar

Die einzelnen Zahlen am unteren Rand des Displays sind die aktuellen Werte. „ Letzte Abtastung“ ist die aktuell verstrichene Abtastzeit, die in der Grafik als „ Daten “ angezeigt wird.

Der oben links im Diagramm angezeigte Wert ist das Maximum des 90. Perzentils der Reaktionszeit.

^

Assertionsergebnisse

Assertionsergebnisse DÜRFEN während des Lasttests NICHT VERWENDET WERDEN, da sie viele Ressourcen (Speicher und CPU) verbrauchen. Verwenden Sie es nur für funktionale Tests oder während des Debuggens und der Validierung von Testplänen.

Der Assertionsergebnis-Visualizer zeigt das Label jeder entnommenen Probe an. Es meldet auch Fehler bei Assertions , die Teil des Testplans sind.

Screenshot für das Bedienfeld der Assertion-Ergebnisse
Screenshot des Control-Panels der Assertion-Ergebnisse
^

Ergebnisbaum anzeigen

View Results Tree DARF während des Belastungstests NICHT VERWENDET WERDEN, da es viele Ressourcen (Speicher und CPU) verbraucht. Verwenden Sie es nur für funktionale Tests oder während des Debuggens und der Validierung von Testplänen.
Der Ergebnisbaum anzeigen zeigt einen Baum aller Probenantworten, sodass Sie die Antwort für jede Probe anzeigen können. Sie können nicht nur die Antwort anzeigen, sondern auch die Zeit, die es gedauert hat, diese Antwort zu erhalten, sowie einige Antwortcodes. Beachten Sie, dass das Anforderungsfenster nur die von JMeter hinzugefügten Header anzeigt. Es werden keine Header (z. B. Host ) angezeigt, die möglicherweise von der Implementierung des HTTP-Protokolls hinzugefügt werden.

Es gibt mehrere Möglichkeiten, die Antwort anzuzeigen, die über ein Dropdown-Feld unten im linken Bereich ausgewählt werden können.

RendererBeschreibung
CSS/JQuery-Tester Der CSS/JQuery-Tester funktioniert nur für Textantworten. Es zeigt den Klartext im oberen Bereich. Die Schaltfläche „ Test “ ermöglicht es dem Benutzer, CSS/JQuery auf das obere Bedienfeld anzuwenden, und die Ergebnisse werden im unteren Bedienfeld angezeigt.
Die CSS/JQuery-Ausdrucks-Engine kann JSoup oder Jodd sein, die Syntax dieser beiden Implementierungen unterscheidet sich geringfügig.
Beispielsweise liefert der Selector a[class=sectionlink] mit dem Attribut href , das auf die aktuelle JMeter-Funktionsseite angewendet wird, die folgende Ausgabe:
Trefferzahl: 74
Übereinstimmung[1]=#Funktionen
Match[2]=#what_can_do
Übereinstimmung[3]=#wo
Übereinstimmung[4]=#wie
Match[5]=#function_helper
Übereinstimmung[6]=#Funktionen
Übereinstimmung[7]=#__regexFunktion
Übereinstimmung[8]=#__regexFunction_parms
Übereinstimmung[9]=#__Zähler
… usw …

Dokumentieren Die Dokumentenansicht zeigt den extrahierten Text aus verschiedenen Dokumenttypen wie Microsoft Office (Word, Excel, PowerPoint 97-2003, 2007-2010 (openxml), Apache OpenOffice (writer, calc, impress), HTML, gzip, jar/zip Dateien (Inhaltsliste) und einige Metadaten zu "Multimedia"-Dateien wie mp3, mp4, flv usw. Die vollständige Liste der unterstützten Formate finden Sie auf der Apache Tika-Formatseite.
Voraussetzung für die Dokumentenansicht ist das Herunterladen des Apache Tika-Binärpakets ( tika-app-xxjar ) und das Ablegen dieses im Verzeichnis JMETER_HOME/lib .
Wenn das Dokument größer als 10 MB ist, wird es nicht angezeigt. Um dieses Limit zu ändern, setzen Sie die JMeter-Eigenschaft document.max_size (Einheit ist Byte) oder auf 0 , um das Limit zu entfernen.
HTML Die HTML-Ansicht versucht, die Antwort als HTML darzustellen. Das gerenderte HTML ist wahrscheinlich schlecht mit der Ansicht vergleichbar, die man in jedem Webbrowser erhalten würde; Es bietet jedoch eine schnelle Annäherung, die für die erste Ergebnisbewertung hilfreich ist.
Bilder, Stylesheets etc. werden nicht heruntergeladen.
HTML (Download-Ressourcen) Wenn die Ansichtsoption HTML (Ressourcen herunterladen) ausgewählt ist, kann der Renderer Bilder, Stylesheets usw. herunterladen, auf die durch den HTML-Code verwiesen wird.
HTML-Quelle formatiert Wenn die Option HTML-Quellformatierte Ansicht ausgewählt ist, zeigt der Renderer den von Jsoup formatierten und bereinigten HTML-Quellcode an .
JSON Die JSON-Ansicht zeigt die Antwort im Baumstil (verarbeitet auch in JavaScript eingebettetes JSON).
JSON-Pfadtester In der Ansicht JSON Path Tester können Sie Ihre JSON-PATH-Ausdrücke testen und die extrahierten Daten aus einer bestimmten Antwort anzeigen.
JSON JMESPath-Tester In der Ansicht JSON JMESPath Tester können Sie Ihre JMESPath- Ausdrücke testen und die extrahierten Daten aus einer bestimmten Antwort anzeigen.
Regexp-Tester Die Regexp Tester-Ansicht funktioniert nur für Textantworten. Es zeigt den Klartext im oberen Bereich. Die Schaltfläche „ Test “ ermöglicht es dem Benutzer, den regulären Ausdruck auf das obere Bedienfeld anzuwenden, und die Ergebnisse werden im unteren Bedienfeld angezeigt.
Die Engine für reguläre Ausdrücke ist die gleiche wie die, die im Regular Expression Extractor verwendet wird.
Zum Beispiel ergibt RE (JMeter\w*).* , das auf die aktuelle JMeter-Startseite angewendet wird, die folgende Ausgabe:
Anzahl der Spiele: 26
Match[1][0]=JMeter - Apache JMeter</title>
Übereinstimmung[1][1]=JMeter
Match[2][0]=JMeter" title="JMeter" border="0"/></a>
Übereinstimmung[2][1]=JMeter
Match[3][0]=JMeterCommitters">Beitragende</a>
Übereinstimmung[3][1]=JMeterCommitter
… usw …

Die erste Zahl in [] ist die Match-Nummer; die zweite Zahl ist die Gruppe. Gruppe [0] ist alles, was mit dem gesamten RE übereinstimmt. Gruppe [1] ist das, was der 1. Gruppe entspricht , dh (JMeter\w*) in diesem Fall. Siehe Abbildung 9b (unten).
Text Die standardmäßige Textansicht zeigt den gesamten in der Antwort enthaltenen Text. Beachten Sie, dass dies nur funktioniert, wenn der Inhaltstyp der Antwort als Text angesehen wird. Wenn der Inhaltstyp mit einem der folgenden beginnt, wird er als binär betrachtet, andernfalls als Text.
Bild/
Audio/
Video/

XML Die XML-Ansicht zeigt die Antwort im Baumstil. Alle DTD-Knoten oder Prolog-Knoten werden nicht im Baum angezeigt; die Antwort kann jedoch diese Knoten enthalten. Sie können mit der rechten Maustaste auf einen beliebigen Knoten klicken und alle darunter liegenden Knoten erweitern oder reduzieren.
XPath-Tester Der XPath-Tester funktioniert nur für Textantworten. Es zeigt den Klartext im oberen Bereich. Die Schaltfläche „ Test “ ermöglicht es dem Benutzer, die XPath-Abfrage auf das obere Panel anzuwenden, und die Ergebnisse werden im unteren Panel angezeigt.
Boundary Extractor Tester Der Boundary Extractor Tester funktioniert nur für Textantworten. Es zeigt den Klartext im oberen Bereich. Die Schaltfläche „ Test “ ermöglicht es dem Benutzer, die Boundary Extractor-Abfrage auf das obere Panel anzuwenden, und die Ergebnisse werden im unteren Panel angezeigt.

Automatisch scrollen? Option erlaubt die Anzeige des letzten Knotens in der Baumauswahl

Ab Version 3.2 ist die Anzahl der Einträge in der Ansicht auf den Wert der Eigenschaft view.results.tree.max_results beschränkt, der standardmäßig 500 Einträge beträgt. Das alte Verhalten kann wiederhergestellt werden, indem die Eigenschaft auf 0 gesetzt wird . Beachten Sie, dass dies viel Speicher verbrauchen kann.

Mit der Suchoption ermöglichen die meisten Ansichten auch das Durchsuchen der angezeigten Daten; das Ergebnis der Suche wird oben im Display hervorgehoben. Der folgende Screenshot der Systemsteuerung zeigt beispielsweise ein Ergebnis der Suche nach " Java ". Beachten Sie, dass die Suche auf den sichtbaren Text angewendet wird, sodass Sie möglicherweise unterschiedliche Ergebnisse erhalten, wenn Sie in den Text- und HTML-Ansichten suchen.
Hinweis: Der reguläre Ausdruck verwendet die Java-Engine (keine ORO-Engine wie der Regular Expression Extractor oder die Regexp Tester-Ansicht).

Wenn kein Inhaltstyp angegeben ist , wird der Inhalt in keinem der Antwortdatenfelder angezeigt. Sie können Antworten in einer Datei speichern verwenden, um die Daten in diesem Fall zu speichern. Beachten Sie, dass die Antwortdaten weiterhin im Probenergebnis verfügbar sind, sodass sie weiterhin mit Postprozessoren aufgerufen werden können.

Wenn die Antwortdaten größer als 200 KB sind, werden sie nicht angezeigt. Um dieses Limit zu ändern, legen Sie die JMeter-Eigenschaft view.results.tree.max_size fest . Sie können auch die gesamte Antwort in einer Datei speichern, indem Sie Antworten in einer Datei speichern verwenden .

Zusätzliche Renderer können erstellt werden. Die Klasse muss die Schnittstelle org.apache.jmeter.visualizers.ResultRenderer implementieren und/oder die abstrakte Klasse org.apache.jmeter.visualizers.SamplerResultTab erweitern , und der kompilierte Code muss für JMeter verfügbar sein (z. B. durch Hinzufügen zur lib/ ext- Verzeichnis).

Screenshot für das Bedienfeld der Ergebnisstruktur anzeigen
Screenshot des Control-Panels des View Results Tree

Das Bedienfeld (oben) zeigt ein Beispiel für eine HTML-Anzeige.
Abbildung 9 (unten) zeigt ein Beispiel für eine XML-Anzeige.
Abbildung 9a (unten) zeigt ein Beispiel für die Anzeige eines Regexp-Testers.
Abbildung 9b (unten) zeigt ein Beispiel einer Dokumentenanzeige.

Abbildung 9 XML-Beispielanzeige
Abbildung 9 XML-Beispielanzeige
Abbildung 9a Beispielanzeige für einen Regexp-Test
Abbildung 9a Beispielanzeige für einen Regexp-Test
Abbildung 9b Anzeige des Beispieldokuments (hier PDF).
Abbildung 9b Anzeige des Beispieldokuments (hier PDF).
^

Gesamtbericht

Der aggregierte Bericht erstellt eine Tabellenzeile für jede anders benannte Anforderung in Ihrem Test. Für jede Anfrage summiert es die Antwortinformationen und liefert Anfrageanzahl, Min., Max., Durchschnitt, Fehlerrate, ungefähren Durchsatz (Anfrage/Sekunde) und Durchsatz in Kilobyte pro Sekunde. Sobald der Test abgeschlossen ist, ist der Durchsatz der tatsächliche Durchsatz für die Dauer des gesamten Tests.

Der Durchsatz wird aus Sicht des Sampler-Targets (z. B. des entfernten Servers bei HTTP-Samples) berechnet. JMeter berücksichtigt die Gesamtzeit, in der die Anfragen generiert wurden. Wenn sich andere Sampler und Timer im selben Thread befinden, erhöhen diese die Gesamtzeit und verringern daher den Durchsatzwert. Zwei identische Sampler mit unterschiedlichen Namen haben also den halben Durchsatz von zwei Samplern mit demselben Namen. Es ist wichtig, die Probennehmernamen richtig auszuwählen, um die besten Ergebnisse aus dem Gesamtbericht zu erhalten.

Die Berechnung der Werte für den Median und die 90 %-Linie (90. Perzentil ) erfordert zusätzlichen Speicher. JMeter kombiniert jetzt Samples mit der gleichen verstrichenen Zeit, bisher wird weniger Speicher verwendet. Bei Samples, die länger als ein paar Sekunden dauern, ist es jedoch wahrscheinlich, dass weniger Samples identische Zeiten haben, in diesem Fall wird mehr Speicher benötigt. Beachten Sie, dass Sie diesen Listener später verwenden können, um eine CSV- oder XML-Ergebnisdatei neu zu laden. Dies ist die empfohlene Methode, um Leistungseinbußen zu vermeiden. Siehe Zusammenfassungsbericht für einen ähnlichen Listener, der keine einzelnen Samples speichert und daher konstanten Speicher benötigt.

Ab JMeter 2.12 können Sie die 3 Perzentilwerte, die Sie berechnen möchten, konfigurieren, indem Sie Eigenschaften festlegen:
  • Bezeichnung - Die Bezeichnung der Probe. Wenn „ Gruppennamen in Bezeichnung aufnehmen? “ ausgewählt ist, wird der Name der Thread-Gruppe als Präfix hinzugefügt. Dadurch können identische Etiketten aus unterschiedlichen Garngruppen bei Bedarf separat zusammengetragen werden.
  • # Proben - Die Anzahl der Proben mit demselben Etikett
  • Durchschnitt - Die durchschnittliche Zeit einer Reihe von Ergebnissen
  • Median – Der Median ist die Zeit in der Mitte einer Reihe von Ergebnissen. 50 % der Proben brauchten nicht länger als diese Zeit; der Rest dauerte mindestens genauso lange.
  • 90 %-Linie – 90 % der Proben dauerten nicht länger als diese Zeit. Die restlichen Proben dauerten mindestens so lange. ( 90. Perzentil )
  • 95 %-Linie – 95 % der Proben dauerten nicht länger als diese Zeit. Die restlichen Proben dauerten mindestens so lange. ( 95. Perzentil )
  • 99 % Linie - 99 % der Proben dauerten nicht länger als diese Zeit. Die restlichen Proben dauerten mindestens so lange. ( 99. Perzentil )
  • Min - Die kürzeste Zeit für Proben mit demselben Etikett
  • Max – Die längste Zeit für Proben mit demselben Etikett
  • Fehler % – Prozentsatz der Anfragen mit Fehlern
  • Durchsatz – der Durchsatz wird in Anforderungen pro Sekunde/Minute/Stunde gemessen. Die Zeiteinheit ist so gewählt, dass der angezeigte Kurs mindestens 1,0 beträgt. Wenn der Durchsatz in einer CSV-Datei gespeichert wird, wird er in Anfragen/Sekunde ausgedrückt, dh 30,0 Anfragen/Minute werden als 0,5 gespeichert.
  • Empfangene KB/s – Der Durchsatz, gemessen in empfangenen Kilobyte pro Sekunde
  • Gesendete KB/s – Der Durchsatz, gemessen in gesendeten Kilobyte pro Sekunde

Die Zeiten sind in Millisekunden.

Screenshot für das Bedienfeld des Gesamtberichts
Screenshot des Bedienfelds des Gesamtberichts

Die folgende Abbildung zeigt ein Beispiel für die Auswahl des Kontrollkästchens „ Gruppennamen einbeziehen “.

Probe "
Beispielanzeige " Gruppennamen einbeziehen " .
^

Ergebnisse in Tabelle anzeigen ¶

Dieser Visualizer erstellt eine Zeile für jedes Probenergebnis. Wie der Ergebnisbaum anzeigen verbraucht dieser Visualizer viel Speicher.

Standardmäßig werden nur die Haupt- (Eltern-)Samples angezeigt; die Sub-Samples (Kind-Samples) werden nicht angezeigt. JMeter hat ein Kontrollkästchen „ Untergeordnete Proben? “. Wenn dies ausgewählt ist, werden die Unterproben anstelle der Hauptproben angezeigt.

Screenshot für das Control-Panel von View Results in Table
Screenshot der Systemsteuerung von View Results in Table
^

Einfacher Datenschreiber

Dieser Listener kann Ergebnisse in einer Datei, aber nicht in der Benutzeroberfläche aufzeichnen. Es soll ein effizientes Mittel zum Aufzeichnen von Daten bereitstellen, indem der GUI-Overhead eliminiert wird. Bei der Ausführung im CLI-Modus kann das Flag -l verwendet werden, um eine Datendatei zu erstellen. Die zu speichernden Felder werden durch JMeter-Eigenschaften definiert. Einzelheiten finden Sie in der Datei jmeter.properties .
Screenshot für das Control-Panel von Simple Data Writer
Screenshot der Systemsteuerung von Simple Data Writer
^

Aggregierter Graph

Das aggregierte Diagramm ähnelt dem aggregierten Bericht. Der Hauptunterschied besteht darin, dass das aggregierte Diagramm eine einfache Möglichkeit bietet, Balkendiagramme zu erstellen und das Diagramm als PNG-Datei zu speichern.
Screenshot für das Control-Panel von Aggregate Graph
Screenshot des Bedienfelds des aggregierten Diagramms

Die folgende Abbildung zeigt ein Beispiel für Einstellungen zum Zeichnen dieses Diagramms.

Aggregierte Diagrammeinstellungen
Aggregierte Diagrammeinstellungen
Bitte beachten Sie: Alle diese Parameter werden nicht im JMeter JMX-Skript gespeichert.

Parameter

Attribut
Beschreibung
Erforderlich
Spalteneinstellungen
  • Anzuzeigende Spalten: Wählen Sie die Spalte(n) aus, die im Diagramm angezeigt werden sollen.
  • Rechteckfarbe: Klicken Sie auf das rechte farbige Rechteck, um ein Popup-Dialogfeld zu öffnen, um eine benutzerdefinierte Farbe für die Spalte auszuwählen.
  • Vordergrundfarbe Ermöglicht das Ändern der Werttextfarbe .
  • Wert Schriftart: Ermöglicht das Festlegen von Schriftarteinstellungen für den Text.
  • Umrissleiste zeichnen? Um die Grenzlinie auf dem Balkendiagramm zu zeichnen oder nicht
  • Nummerngruppierung anzeigen? Gruppierung der Zahlen in Y-Achsenbeschriftungen anzeigen oder nicht.
  • Wertelabels vertikal? Ausrichtung der Wertebeschriftung ändern. (Standard ist horizontal)
  • Auswahl der Spaltenbeschriftung: Filtern nach Ergebnisbeschriftung. Ein regulärer Ausdruck kann verwendet werden, Beispiel: .*Transaktion.*
    Bevor Sie das Diagramm anzeigen, klicken Sie auf die Schaltfläche Filter anwenden , um interne Daten zu aktualisieren.
Ja
Titel
Definieren Sie den Titel des Diagramms im Kopf des Diagramms. Leerer Wert ist der Standardwert: " Aggregate Graph ". Die Schaltfläche Mit Name synchronisieren definiert den Titel mit dem Label des Hörers. Und definieren Sie Schriftarteinstellungen für den Diagrammtitel
Nein
Diagrammgröße
Berechnen Sie die Diagrammgröße anhand der Breite und Höhe in Abhängigkeit von der Fenstergröße des aktuellen JMeter. Verwenden Sie die Felder Breite und Höhe , um eine benutzerdefinierte Größe zu definieren. Die Einheit ist Pixel.
Nein
Einstellungen der X-Achse
Definieren Sie die maximale Länge der Beschriftung der X-Achse (in Pixel).
Nein
Einstellungen der Y-Achse
Definieren Sie einen benutzerdefinierten Maximalwert für die Y-Achse.
Nein
Legende
Definieren Sie die Platzierungs- und Schriftarteinstellungen für die Diagrammlegende
Ja
^

Reaktionszeitdiagramm

Das Antwortzeitdiagramm zeichnet ein Liniendiagramm, das die Entwicklung der Antwortzeit während des Tests für jede gekennzeichnete Anfrage zeigt. Wenn viele Samples für denselben Zeitstempel vorhanden sind, wird der Mittelwert angezeigt.
Screenshot für das Bedienfeld des Antwortzeitdiagramms
Screenshot des Bedienfelds des Antwortzeitdiagramms

Die folgende Abbildung zeigt ein Beispiel für Einstellungen zum Zeichnen dieses Diagramms.

Reaktionszeitdiagramm-Einstellungen
Reaktionszeitdiagramm-Einstellungen
Bitte beachten Sie: Alle diese Parameter werden in der JMeter .jmx -Datei gespeichert.

Parameter

Attribut
Beschreibung
Erforderlich
Intervall (ms)
Die Zeit in Millisekunden für das X-Achsen-Intervall. Proben werden nach diesem Wert gruppiert. Klicken Sie vor der Anzeige des Diagramms auf die Schaltfläche „Intervall anwenden “, um die internen Daten zu aktualisieren.
Ja
Auswahl des Sampler-Labels
Nach Ergebnislabel filtern. Ein regulärer Ausdruck kann verwendet werden, z. .*Transaktion.* . Bevor Sie das Diagramm anzeigen, klicken Sie auf die Schaltfläche Filter anwenden , um die internen Daten zu aktualisieren.
Nein
Titel
Definieren Sie den Titel des Diagramms im Kopf des Diagramms. Leerer Wert ist der Standardwert: " Response Time Graph ". Die Schaltfläche Mit Name synchronisieren definiert den Titel mit dem Label des Hörers. Und definieren Sie Schriftarteinstellungen für den Diagrammtitel
Nein
Leitungseinstellungen
Definieren Sie die Breite der Linie. Definieren Sie den Typ jedes Wertpunkts. Wählen Sie keine , um eine Linie ohne Markierung zu haben
Ja
Diagrammgröße
Berechnen Sie die Diagrammgröße anhand der Breite und Höhe in Abhängigkeit von der Fenstergröße des aktuellen JMeter. Verwenden Sie die Felder Breite und Höhe , um eine benutzerdefinierte Größe zu definieren. Die Einheit ist Pixel.
Nein
Einstellungen der X-Achse
Passen Sie das Datumsformat der Beschriftung der X-Achse an. Die Syntax ist die Java SimpleDateFormat API .
Nein
Einstellungen der Y-Achse
Definieren Sie einen benutzerdefinierten Maximalwert für die Y-Achse in Millisekunden. Definieren Sie das Inkrement für die Skala (in ms). Zeigen Sie die Zahlengruppierung in den Beschriftungen der Y-Achse an oder nicht.
Nein
Legende
Definieren Sie die Platzierungs- und Schriftarteinstellungen für die Diagrammlegende
Ja
^

Mailer-Visualizer

Der Mailer-Visualizer kann so eingerichtet werden, dass E-Mails gesendet werden, wenn ein Testlauf zu viele fehlgeschlagene Antworten vom Server erhält.

Screenshot für das Control-Panel von Mailer Visualizer
Screenshot des Control-Panels von Mailer Visualizer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Aus
E-Mail-Adresse, von der aus Nachrichten gesendet werden sollen.
Ja
Adressat(en)
E-Mail-Adresse, an die Nachrichten gesendet werden sollen, durch Kommas getrennt.
Ja
Erfolgsthema
E-Mail-Betreffzeile für Erfolgsmeldungen.
Nein
Erfolgslimit
Sobald diese Anzahl erfolgreicher Antworten nach vorherigem Erreichen der Fehlergrenze überschritten wird, wird eine Erfolgs-E-Mail gesendet. Der Mailer sendet also nur Nachrichten in einer Folge von Fehlgeschlagen-Erfolg-Fehlschlag-Erfolg usw.
Ja
Fehlerthema
E-Mail-Betreffzeile für Fehlermeldungen.
Nein
Fehlergrenze
Sobald diese Anzahl fehlgeschlagener Antworten überschritten wird, wird eine Fehler-E-Mail gesendet – dh setzen Sie den Zähler auf 0 , um beim ersten Fehler eine E-Mail zu senden.
Ja
Gastgeber
IP-Adresse oder Hostname des SMTP-Servers (E-Mail-Umleitungsserver).
Nein
Hafen
Port des SMTP-Servers (standardmäßig 25 ).
Nein
Anmeldung
Login zur Authentifizierung verwendet.
Nein
Passwort
Zur Authentifizierung verwendetes Passwort.
Nein
Verbindungssicherheit
Art der Verschlüsselung für die SMTP-Authentifizierung (SSL, TLS oder keine).
Nein
Test Email
Klicken Sie auf diese Schaltfläche, um eine Testmail zu senden
Nein
Ausfälle
Ein Feld, das eine laufende Gesamtzahl der bisher empfangenen Fehler enthält.
Nein
^

BeanShell-Listener

Der BeanShell Listener ermöglicht die Verwendung von BeanShell zum Verarbeiten von Samples zum Speichern usw.

Ausführliche Informationen zur Verwendung von BeanShell finden Sie auf der BeanShell-Website.

Die Migration zu JSR223 Listener + Groovy wird aufgrund der Leistung, der Unterstützung neuer Java-Funktionen und der eingeschränkten Wartung der BeanShell-Bibliothek dringend empfohlen.

Das Testelement unterstützt die Methoden ThreadListener und TestListener . Diese sollten in der Initialisierungsdatei definiert werden. Beispieldefinitionen finden Sie in der Datei BeanShellListeners.bshrc .

Screenshot für das Control-Panel des BeanShell Listener
Screenshot des Control-Panels von BeanShell Listener

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird. Der Name wird in der Script-Variablen Label gespeichert
bsh.Interpreter vor jedem Aufruf zurücksetzen
Wenn diese Option ausgewählt ist, wird der Interpreter für jede Probe neu erstellt. Dies kann für einige lang laufende Skripte erforderlich sein. Weitere Informationen finden Sie unter Best Practices – BeanShell-Skripting .
Ja
Parameter
An das BeanShell-Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
Parameter
Zeichenfolge, die die Parameter als einzelne Variable enthält
bsh.args
String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende BeanShell-Skript enthält. Der Dateiname wird in der Script-Variablen FileName gespeichert
Nein
Skript
Das auszuführende BeanShell-Skript. Der Rückgabewert wird ignoriert.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Vor dem Aufruf des Skripts werden einige Variablen im BeanShell-Interpreter eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
    
  • props – (JMeterProperties – class java.util.Properties ) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • sampleResult , prev - ( SampleResult ) - gibt Zugriff auf das vorherige SampleResult
  • sampleEvent ( SampleEvent ) ermöglicht den Zugriff auf das aktuelle Beispielereignis

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

Wenn die Eigenschaft beanshell.listener.init definiert ist, wird diese zum Laden einer Initialisierungsdatei verwendet, mit der Methoden usw. zur Verwendung im BeanShell-Skript definiert werden können.

^

Zusammenfassender Bericht

Der zusammenfassende Bericht erstellt eine Tabellenzeile für jede anders benannte Anforderung in Ihrem Test. Dies ähnelt dem aggregierten Bericht , mit der Ausnahme, dass weniger Arbeitsspeicher verwendet wird.

Der Durchsatz wird aus Sicht des Sampler-Targets (z. B. des entfernten Servers bei HTTP-Samples) berechnet. JMeter berücksichtigt die Gesamtzeit, in der die Anfragen generiert wurden. Wenn sich andere Sampler und Timer im selben Thread befinden, erhöhen diese die Gesamtzeit und verringern daher den Durchsatzwert. Zwei identische Sampler mit unterschiedlichen Namen haben also den halben Durchsatz von zwei Samplern mit demselben Namen. Es ist wichtig, die Probenetiketten richtig auszuwählen, um die besten Ergebnisse aus dem Bericht zu erhalten.

  • Bezeichnung - Die Bezeichnung der Probe. Wenn „ Gruppennamen in Bezeichnung aufnehmen? “ ausgewählt ist, wird der Name der Thread-Gruppe als Präfix hinzugefügt. Dadurch können identische Etiketten aus unterschiedlichen Garngruppen bei Bedarf separat zusammengetragen werden.
  • # Proben - Die Anzahl der Proben mit demselben Etikett
  • Durchschnitt – Die durchschnittlich verstrichene Zeit einer Reihe von Ergebnissen
  • Min – Die niedrigste verstrichene Zeit für die Proben mit demselben Etikett
  • Max – Die längste verstrichene Zeit für die Proben mit demselben Etikett
  • Std. Entwickler - die Standardabweichung der verstrichenen Zeit der Probe
  • Fehler % – Prozentsatz der Anfragen mit Fehlern
  • Durchsatz – der Durchsatz wird in Anforderungen pro Sekunde/Minute/Stunde gemessen. Die Zeiteinheit ist so gewählt, dass der angezeigte Kurs mindestens 1,0 beträgt . Wenn der Durchsatz in einer CSV-Datei gespeichert wird, wird er in Anfragen/Sekunde ausgedrückt, dh 30,0 Anfragen/Minute werden als 0,5 gespeichert .
  • Empfangene KB/s – Der Durchsatz, gemessen in Kilobyte pro Sekunde
  • Gesendet KB/s – Der Durchsatz, gemessen in Kilobyte pro Sekunde
  • Durchschn. Bytes – durchschnittliche Größe der Beispielantwort in Bytes.

Die Zeiten sind in Millisekunden.

Screenshot für das Bedienfeld des Zusammenfassungsberichts
Screenshot des Bedienfelds des Zusammenfassungsberichts

Die folgende Abbildung zeigt ein Beispiel für die Auswahl des Kontrollkästchens „ Gruppennamen einbeziehen “.

Probe "
Beispielanzeige " Gruppennamen einbeziehen " .
^

Antworten in einer Datei speichern

Dieses Testelement kann beliebig im Testplan platziert werden. Für jede Probe in ihrem Geltungsbereich wird eine Datei mit den Antwortdaten erstellt. Die primäre Verwendung dafür ist das Erstellen von Funktionstests, aber es kann auch nützlich sein, wenn die Antwort zu groß ist, um im View Results Tree Listener angezeigt zu werden. Der Dateiname wird aus dem angegebenen Präfix plus einer Nummer gebildet (sofern dies nicht deaktiviert ist, siehe unten). Die Dateiendung wird, falls bekannt, aus dem Dokumenttyp gebildet. Wenn nicht bekannt, wird die Dateierweiterung auf „ unbekannt “ gesetzt'. Wenn die Nummerierung deaktiviert ist und das Hinzufügen eines Suffix deaktiviert ist, wird das Dateipräfix als vollständiger Dateiname verwendet. Dadurch kann bei Bedarf ein fester Dateiname generiert werden. Der generierte Dateiname wird in der Beispielantwort gespeichert und kann bei Bedarf in der Testprotokoll-Ausgabedatei gespeichert werden.

Das aktuelle Sample wird zuerst gespeichert, gefolgt von allen Sub-Samples (Kind-Samples). Wenn ein Variablenname angegeben wird, werden die Namen der Dateien in der Reihenfolge gespeichert, in der die Teilstichproben erscheinen. Siehe unten.

Screenshot für das Control-Panel von Save Responses to a file
Screenshot des Control-Panels von Save Responses to a file

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Dateinamenpräfix (kann Ordner enthalten)
Präfix für die generierten Dateinamen; dies kann einen Verzeichnisnamen enthalten. Relative Pfade werden relativ zum aktuellen Arbeitsverzeichnis aufgelöst (das standardmäßig das Verzeichnis bin/ ist ). JMeter unterstützt auch Pfade relativ zu dem Verzeichnis, das den aktuellen Testplan (JMX-Datei) enthält. Wenn der Pfadname mit „ ~/ “ beginnt (oder was auch immer in der jmeter.save.saveservice.base_prefix JMeter-Eigenschaft steht), dann wird davon ausgegangen, dass der Pfad relativ zum Speicherort der JMX-Datei ist.
Wenn übergeordnete Ordner im Präfix nicht vorhanden sind, erstellt JMeter sie und stoppt den Test, wenn er fehlschlägt.
Bitte beachten Sie, dass das Dateinamen-Präfix keine Thread-bezogenen Daten enthalten darf, verwenden Sie also keine Variablen ( ${varName} ) oder Funktionen wie ${__threadNum} in diesem Feld
Ja
Variablenname, der den gespeicherten Dateinamen enthält
Name einer Variablen, in der der generierte Dateiname gespeichert werden soll (damit er später im Testplan verwendet werden kann). Wenn Unterstichproben vorhanden sind, wird dem Variablennamen ein numerisches Suffix hinzugefügt. Wenn der Variablenname beispielsweise FILENAME lautet , wird der Name der übergeordneten Probendatei in der Variablen FILENAME gespeichert , und die Dateinamen für die untergeordneten Sampler werden in FILENAME1 , FILENAME2 usw. gespeichert.
Nein
Mindestlänge der Sequenznummer
Wenn „ Nummer nicht zum Präfix hinzufügen “ nicht aktiviert ist, werden dem Präfix hinzugefügte Nummern mit 0 aufgefüllt, sodass das Präfix die Größe dieses Werts hat. Standardmäßig 0 .
Nein
Nur fehlgeschlagene Antworten speichern
Wenn diese Option ausgewählt ist, werden nur fehlgeschlagene Antworten gespeichert
Ja
Nur erfolgreiche Antworten speichern
Wenn diese Option ausgewählt ist, werden nur erfolgreiche Antworten gespeichert
Ja
Fügen Sie dem Präfix keine Nummer hinzu
Wenn diese Option ausgewählt ist, wird dem Präfix keine Nummer hinzugefügt. Wenn Sie diese Option auswählen, stellen Sie sicher, dass das Präfix eindeutig ist oder die Datei möglicherweise überschrieben wird.
Ja
Inhaltstyp-Suffix nicht hinzufügen
Wenn ausgewählt, wird kein Suffix hinzugefügt. Wenn Sie diese Option auswählen, stellen Sie sicher, dass das Präfix eindeutig ist oder die Datei möglicherweise überschrieben wird.
Ja
Zeitstempel hinzufügen
Wenn diese Option ausgewählt ist, wird das Datum in das Dateisuffix im folgenden Format eingefügt: jjjjMMtt-HHmm_
Ja
SampleResult des Transaktionscontrollers nicht speichern
Wenn diese Option ausgewählt ist, wird das vom Transaktionscontroller generierte SamplerResult ignoriert
Ja
^

JSR223-Listener

Der JSR223-Listener ermöglicht die Anwendung von JSR223-Skriptcode auf Beispielergebnisse.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Sprache
Die zu verwendende JSR223-Sprache
Ja
Parameter
An das Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
Parameter
Zeichenfolge, die die Parameter als einzelne Variable enthält
Argumente
String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende Skript enthält, wenn ein relativer Dateipfad verwendet wird, dann ist er relativ zu dem Verzeichnis, auf das durch die Systemeigenschaft " user.dir " verwiesen wird
Nein
Zwischenspeichern der Skriptkompilierung
Eindeutige Zeichenfolge im gesamten Testplan, die JMeter verwendet, um das Ergebnis der Skriptkompilierung zwischenzuspeichern , wenn die verwendete Sprache die kompilierbare Schnittstelle unterstützt (Groovy ist eine davon, Java, Beanshell und Javascript sind es nicht).
Siehe Hinweis in JSR223 Sampler Java System Property, wenn Sie Groovy verwenden, ohne diese Option zu aktivieren
Nein
Skript
Das auszuführende Skript.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Vor dem Aufruf des Skripts werden einige Variablen eingerichtet. Beachten Sie, dass dies JSR223-Variablen sind - dh sie können direkt im Skript verwendet werden.

Protokoll
( Logger ) - kann zum Schreiben in die Protokolldatei verwendet werden
Etikett
das String-Label
Dateiname
Name der Skriptdatei (falls vorhanden)
Parameter
die Parameter (als String)
Argumente
die Parameter als String-Array (auf Whitespace aufgeteilt)
ctx
( JMeterContext ) - gibt Zugriff auf den Kontext
var
( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
vars.get (Schlüssel);
vars.put (Schlüssel, Wert);
vars.putObject("OBJ1",neues Objekt());
vars.getObject("OBJ2");
Requisiten
(JMeterProperties - Klasse java.util.Properties ) - zB props.get("START.HMS"); props.put("PROP1","1234");
BeispielErgebnis , vorh
( SampleResult ) – gewährt Zugriff auf das SampleResult
Beispielereignis
( SampleEvent ) - gewährt Zugriff auf das SampleEvent
Probenehmer
( Sampler )- gibt Zugriff auf den letzten Sampler
AUS
System.out - zB OUT.println("Nachricht")

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

^

Zusammenfassungsergebnisse generieren

Dieses Testelement kann beliebig im Testplan platziert werden. Erstellt eine Zusammenfassung des bisherigen Testlaufs in die Protokolldatei und/oder die Standardausgabe. Es werden sowohl laufende als auch Differenzsummen angezeigt. Die Ausgabe wird alle n Sekunden (standardmäßig 30 Sekunden) an der entsprechenden Zeitgrenze generiert, sodass mehrere Testläufe zur gleichen Zeit synchronisiert werden.
Da eine Summen-/Differentiallinie nur geschrieben wird, wenn Proben ausgegeben werden, wird das Generierungsintervall möglicherweise nicht eingehalten, wenn Ihr Test keine Probe innerhalb des Intervalls generiert hat
Siehe Datei jmeter.properties für die Zusammenfassungskonfigurationselemente:
# Definieren Sie die folgende Eigenschaft, um automatisch einen Summierer mit diesem Namen zu starten
# (gilt nur für den CLI-Modus)
#summariser.name=Zusammenfassung
#
# Intervall zwischen Zusammenfassungen (in Sekunden) Standard 3 Minuten
#summariser.interval=30
#
# Meldungen in Logdatei schreiben
#summariser.log=true
#
# Nachrichten an System.out schreiben
#summariser.out=true
Dieses Element ist hauptsächlich für Batch-Läufe (CLI) vorgesehen. Die Ausgabe sieht wie folgt aus:
Label + 16 in 0:00:12 = 1,3/s Avg: 1608 Min: 1163 Max: 2009 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label + 82 in 0:00:30 = 2,7/s Avg: 1518 Min: 1003 Max: 2020 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 98 in 0:00:42 = 2,3/s Avg: 1533 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 85 in 0:00:30 = 2,8/s Avg: 1505 Min: 1008 Max: 2005 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 183 in 0:01:13 = 2,5/s Avg: 1520 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 79 in 0:00:30 = 2,7/s Avg: 1578 Min: 1089 Max: 2012 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Bezeichnung = 262 in 0:01:43 = 2,6/s Durchschnitt: 1538 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 80 in 0:00:30 = 2,7/s Avg: 1531 Min: 1013 Max: 2014 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Bezeichnung = 342 in 0:02:12 = 2,6/s Durchschnitt: 1536 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 83 in 0:00:31 = 2,7/s Avg: 1512 Min: 1003 Max: 1982 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 425 in 0:02:43 = 2,6/s Avg: 1531 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 83 in 0:00:29 = 2,8/s Avg: 1487 Min: 1023 Max: 2013 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 508 in 0:03:12 = 2,6/s Durchschnitt: 1524 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 78 in 0:00:30 = 2,6/s Avg: 1594 Min: 1013 Max: 2016 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 586 in 0:03:43 = 2,6/s Durchschnitt: 1533 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 80 in 0:00:30 = 2,7/s Avg: 1516 Min: 1013 Max: 2005 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 666 in 0:04:12 = 2,6/s Avg: 1531 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 86 in 0:00:30 = 2,9/s Avg: 1449 Min: 1004 Max: 2017 Fehler: 0 (0,00 %) Aktiv: 5 Begonnen: 5 Beendet: 0
Label = 752 in 0:04:43 = 2,7/s Avg: 1522 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Label + 65 in 0:00:24 = 2,7/s Avg: 1579 Min: 1007 Max: 2003 Fehler: 0 (0,00 %) Aktiv: 0 Gestartet: 5 Beendet: 5
Label = 817 in 0:05:07 = 2,7/s Durchschnitt: 1526 Min: 1003 Max: 2020 Fehler: 0 (0,00 %)
Das „ Label “ ist der Name des Elements. Das „+“ bedeutet, dass die Linie eine Delta-Linie ist, dh die Änderungen seit der letzten Ausgabe zeigt.
Das "=" bedeutet, dass die Zeile eine Summenzeile ist, dh es zeigt die laufende Summe an.
Einträge in der JMeter-Protokolldatei enthalten auch Zeitstempel. Das Beispiel „ 817 in 0:05:07 = 2,7/s “ bedeutet, dass in 5 Minuten und 7 Sekunden 817 Samples aufgezeichnet wurden, und das ergibt 2,7 Samples pro Sekunde.
Die Zeiten Avg (Durchschnitt), Min (Minimum) und Max (Maximum) werden in Millisekunden angegeben.
Err “ bedeutet die Anzahl der Fehler (auch in Prozent angegeben).
Die letzten beiden Zeilen erscheinen am Ende eines Tests. Sie werden nicht mit der entsprechenden Zeitgrenze synchronisiert. Beachten Sie, dass die anfänglichen und endgültigen Deltas kürzer als das Intervall sein können (im obigen Beispiel sind dies 30 Sekunden). Das erste Delta wird im Allgemeinen niedriger sein, da JMeter mit der Intervallgrenze synchronisiert. Das letzte Delta wird niedriger sein, da der Test im Allgemeinen nicht an einer genauen Intervallgrenze endet.

Das Etikett wird verwendet, um Probenergebnisse zu gruppieren. Wenn Sie also mehrere Thread-Gruppen haben und über alle zusammenfassen möchten, verwenden Sie dieselbe Bezeichnung – oder fügen Sie den Summierer zum Testplan hinzu (damit alle Thread-Gruppen im Geltungsbereich sind). Verschiedene Zusammenfassungsgruppierungen können implementiert werden, indem geeignete Bezeichnungen verwendet werden und die Zusammenfassungen zu geeigneten Teilen des Testplans hinzugefügt werden.

Im CLI-Modus ist standardmäßig ein Generate Summary Results-Listener mit dem Namen „ summariser “ konfiguriert. Wenn Sie Ihrem Testplan bereits einen hinzugefügt haben, stellen Sie sicher, dass Sie ihn anders benennen der gesamten Stichproben + Stichproben, die sich unter dem übergeordneten Listener von Generate Summary Results befinden).
Dies ist kein Fehler, sondern eine Designentscheidung, die eine Zusammenfassung über Threadgruppen hinweg ermöglicht.
Screenshot für das Control-Panel von Generate Summary Results
Screenshot des Control-Panels von Generate Summary Results

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird. Es erscheint als " Label " in der Ausgabe. Details für alle Elemente mit demselben Label werden addiert.
Ja
^

Visualizer für Vergleichsbehauptungen

Der Vergleichs-Assertion-Visualizer zeigt die Ergebnisse aller Vergleichs-Assertion- Elemente.
Screenshot für das Bedienfeld des Vergleichs-Assertion-Visualizers
Screenshot des Bedienfelds des Vergleichs-Assertion-Visualizers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Ja
^

Backend-Listener

Der Back-End-Listener ist ein asynchroner Listener, mit dem Sie benutzerdefinierte Implementierungen von BackendListenerClient einbinden können . Standardmäßig wird eine Graphite-Implementierung bereitgestellt.
Screenshot für das Control-Panel des Backend-Listeners
Screenshot des Control-Panels des Backend-Listeners

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Ja
Back-End-Listener-Implementierung
Klasse der BackendListenerClient- Implementierung.
Ja
Größe der asynchronen Warteschlange
Größe der Warteschlange, die die SampleResults enthält, während sie asynchron verarbeitet werden.
Ja
Parameter
Parameter der BackendListenerClient- Implementierung.
Ja

Die folgenden Parameter gelten für die GraphiteBackendListenerClient- Implementierung:

Parameter

Attribut
Beschreibung
Erforderlich
graphitMetricsSender
org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender oder org.apache.jmeter.visualizers.backend.graphite.PickleGraphiteMetricsSender
Ja
graphitHost
Graphite- oder InfluxDB-Serverhost (mit aktiviertem Graphite-Plugin).
Ja
graphitPort
Graphite- oder InfluxDB-Serverport (mit aktiviertem Graphite-Plug-in), standardmäßig 2003 . Hinweis PickleGraphiteMetricsSender (Port 2004 ) kann nur mit dem Graphite-Server kommunizieren.
Ja
rootMetricsPräfix
Präfix der an das Back-End gesendeten Metriken. Standardmäßig " jmeter ". Beachten Sie, dass JMeter kein Trennzeichen zwischen dem Root-Präfix und dem samplerName hinzufügt, weshalb derzeit der nachgestellte Punkt benötigt wird.
Ja
ZusammenfassungNur
Senden Sie nur eine Zusammenfassung ohne Details. Standardmäßig auf true .
Ja
SamplerListe
Definiert die Namen (Labels) von Probenergebnissen, die an das Backend gesendet werden sollen. Bei useRegexpForSamplersList=false ist dies eine Liste von durch Semikolons getrennten Namen. Wenn useRegexpForSamplersList=true , ist dies ein regulärer Ausdruck, der mit den Namen abgeglichen wird.
Ja
useRegexpForSamplersList
Betrachten Sie samplersList als einen regulären Ausdruck, um die Sampler auszuwählen, für die Sie Metriken an das Back-End melden möchten. Standardmäßig auf false .
Ja
Perzentile
Die Perzentile, die Sie an das Back-End senden möchten. Ein Perzentil kann einen Bruchteil enthalten, zum Beispiel 12,5 . (Das Trennzeichen ist immer „.“) Die Liste muss durch Semikolons getrennt sein. Im Allgemeinen sollten 3 oder 4 Werte ausreichen.
Ja

Siehe auch Echtzeit-Ergebnisse für weitere Details.

Grafana-Dashboard
Grafana-Dashboard

Seit JMeter 3.2 eine Implementierung, die das direkte Schreiben in InfluxDB mit einem benutzerdefinierten Schema ermöglicht. Es heißt InfluxdbBackendListenerClient . Die folgenden Parameter gelten für die InfluxdbBackendListenerClient- Implementierung:

Parameter

Attribut
Beschreibung
Erforderlich
influxdbMetricsSender
org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
Ja
influxdbUrl
Influx-URL (Beispiel: http://influxHost:8086/write?db=jmeter )
Ja
influxdbToken
InfluxDB 2- Authentifizierungstoken (Beispiel: HE9yIdAPzWJDspH_tCc2UvdKZpX== ); seit 5.2.
Nein
Anwendung
Name der getesteten Anwendung. Dieser Wert wird in der Messung „ Ereignisse “ als Tag mit dem Namen „ Anwendung “ gespeichert .
Ja
Messung
Messung gemäß Influx Line Protocol Reference . Standardmäßig " jmeter ".
Ja
ZusammenfassungNur
Senden Sie nur eine Zusammenfassung ohne Details. Standardmäßig auf true .
Ja
SamplerRegex
Regulärer Ausdruck, der mit den Namen der Proben abgeglichen und an das Backend gesendet wird.
Ja
testTitel
Testname. Standardmäßig Testname . Dieser Wert wird in der Messung „ Ereignisse “ als Feld mit dem Namen „ Text “ gespeichert . JMeter generiert automatisch zu Beginn und am Ende des Tests eine Anmerkung mit diesem Wert, die mit „begonnen“ und „beendet“ endet.
Ja
eventTags
Grafana ermöglicht die Anzeige von Tags für jede Anmerkung. Diese können Sie hier ausfüllen. Dieser Wert wird in der Messung „ Ereignisse “ als Tag mit dem Namen „ Tags “ gespeichert .
Nein
Perzentile
Die Perzentile, die Sie an das Back-End senden möchten. Ein Perzentil kann einen Bruchteil enthalten, zum Beispiel 12,5 (Das Trennzeichen ist immer „ . “). Die Liste muss durch Semikolons getrennt sein. Im Allgemeinen sollten drei oder vier Werte ausreichen.
Ja
TAG_Whateveryouwant
Sie können beliebig viele benutzerdefinierte Tags hinzufügen. Erstellen Sie für jede von ihnen eine neue Zeile und stellen Sie ihrem Namen " TAG_ " voran.
Nein

Siehe auch Echtzeitergebnisse und Influxdb-Anmerkungen in Grafana für weitere Details. Es gibt auch einen Unterabschnitt zum Konfigurieren des Listeners für InfluxDB v2 .

Seit JMeter 5.4 eine Implementierung, die alle Beispielergebnisse in InfluxDB schreibt. Es heißt InfluxDBRAwBackendListenerClient . Es ist erwähnenswert, dass dies aufgrund der Zunahme von Daten und einzelnen Schreibvorgängen sowohl von JMeter als auch von InfluxDB mehr Ressourcen verbraucht als InfluxdbBackendListenerClient . Die folgenden Parameter gelten für die InfluxDBRAwBackendListenerClient- Implementierung:

Parameter

Attribut
Beschreibung
Erforderlich
influxdbMetricsSender
org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
Ja
influxdbUrl
Influx-URL (z. B. http://influxHost:8086/write?db=jmeter oder für die Cloud https://eu-central-1-1.aws.cloud2.influxdata.com/api/v2/write?org =org-id&bucket=jmeter)
Ja
influxdbToken
InfluxDB 2- Authentifizierungstoken (zB HE9yIdAPzWJDspH_tCc2UvdKZpX==)
Nein
Messung
Messung gemäß Influx Line Protocol Reference . Standardmäßig " jmeter ".
Ja
^
^

18.4 Konfigurationselemente


Konfigurationselemente können verwendet werden, um Standardwerte und Variablen für die spätere Verwendung durch Probenehmer einzurichten. Beachten Sie, dass diese Elemente am Anfang des Bereichs verarbeitet werden, in dem sie gefunden werden, dh vor allen Samplern im selben Bereich.

CSV-Datensatzkonfiguration

CSV Data Set Config wird verwendet, um Zeilen aus einer Datei zu lesen und sie in Variablen aufzuteilen. Sie ist einfacher zu verwenden als die Funktionen __CSVRead() und __StringFromFile() . Es eignet sich gut zum Umgang mit einer großen Anzahl von Variablen und ist auch zum Testen mit "zufälligen" und eindeutigen Werten nützlich.

Das Generieren eindeutiger Zufallswerte zur Laufzeit ist in Bezug auf CPU und Speicher teuer, also erstellen Sie die Daten einfach vor dem Test. Bei Bedarf können die "zufälligen" Daten aus der Datei in Verbindung mit einem Laufzeitparameter verwendet werden, um unterschiedliche Wertesätze aus jedem Durchlauf zu erstellen - zB durch Verkettung - was viel billiger ist, als alles zur Laufzeit zu generieren.

JMeter erlaubt das Zitieren von Werten; Dadurch kann der Wert ein Trennzeichen enthalten. Wenn „ Daten in Anführungszeichen zulassen “ aktiviert ist, kann ein Wert in doppelte Anführungszeichen gesetzt werden. Diese werden entfernt. Um doppelte Anführungszeichen in ein Feld in Anführungszeichen einzufügen, verwenden Sie zwei doppelte Anführungszeichen. Zum Beispiel:

1, "2,3", "4" "5" =>
1
2,3
4 "5

JMeter unterstützt CSV-Dateien, die eine Kopfzeile haben, die die Spaltennamen definiert. Um dies zu ermöglichen, lassen Sie das Feld „ Variablennamen “ leer. Das richtige Trennzeichen muss angegeben werden.

JMeter unterstützt CSV-Dateien mit Daten in Anführungszeichen, die Zeilenumbrüche enthalten.

Standardmäßig wird die Datei nur einmal geöffnet und jeder Thread verwendet eine andere Zeile aus der Datei. Die Reihenfolge, in der Zeilen an Threads übergeben werden, hängt jedoch von der Reihenfolge ab, in der sie ausgeführt werden, die zwischen Iterationen variieren kann. Zeilen werden zu Beginn jeder Testiteration gelesen. Der Dateiname und -modus werden in der ersten Iteration aufgelöst.

Weitere Optionen finden Sie unten in der Beschreibung des Share-Modus. Wenn Sie möchten, dass jeder Thread seinen eigenen Satz von Werten hat, müssen Sie einen Satz von Dateien erstellen, eine für jeden Thread. Zum Beispiel test1.csv , test2.csv , …, test n .csv . Verwenden Sie den Dateinamen test${__threadNum}.csv und stellen Sie den " Freigabemodus " auf " Aktueller Thread ".

CSV-Datensatzvariablen werden zu Beginn jeder Testiteration definiert. Da dies nach Abschluss der Konfigurationsverarbeitung erfolgt, können sie nicht für einige Konfigurationselemente verwendet werden – wie JDBC Config – die ihre Inhalte zur Konfigurationszeit verarbeiten (siehe Bug 40394 ). Die Variablen funktionieren jedoch im HTTP Auth Manager, wie der Benutzername usw ... werden zur Laufzeit verarbeitet.

Als Sonderfall wird die Zeichenfolge " \t " (ohne Anführungszeichen) im Trennzeichenfeld als Tabulator behandelt.

Wenn das Dateiende ( EOF ) erreicht ist und die Option recycle true ist , beginnt das Lesen erneut mit der ersten Zeile der Datei.

Wenn die Option recycle false und stopThread false ist , werden alle Variablen auf <EOF> gesetzt, wenn das Dateiende erreicht ist. Dieser Wert kann durch Festlegen der JMeter-Eigenschaft csvdataset.eofstring geändert werden .

Wenn die Recycle-Option false und Stop Thread true ist , wird das Erreichen von EOF dazu führen, dass der Thread gestoppt wird.

Screenshot für das Control-Panel von CSV Data Set Config
Screenshot des Control-Panels der CSV Data Set Config

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Dateiname
Name der zu lesenden Datei. Relative Dateinamen werden in Bezug auf den Pfad des aktiven Testplans aufgelöst. Für verteiltes Testen muss die CSV-Datei auf dem Serverhostsystem im richtigen relativen Verzeichnis zu dem Ort gespeichert werden, an dem der JMeter-Server gestartet wird. Absolute Dateinamen werden ebenfalls unterstützt, aber beachten Sie, dass sie im Remote-Modus wahrscheinlich nicht funktionieren, es sei denn, der Remote-Server hat dieselbe Verzeichnisstruktur. Wenn dieselbe physische Datei auf zwei verschiedene Arten referenziert wird - zB csvdata.txt und ./csvdata.txt - dann werden diese als unterschiedliche Dateien behandelt. Wenn das OS nicht zwischen Groß- und Kleinschreibung unterscheidet, würde csvData.TXT auch separat geöffnet werden.
Ja
Dateikodierung
Die zum Lesen der Datei zu verwendende Kodierung, falls nicht die Standardeinstellung der Plattform.
Nein
Variablennamen
Liste der Variablennamen. Die Namen müssen durch das Trennzeichen getrennt werden. Sie können mit doppelten Anführungszeichen zitiert werden. JMeter unterstützt CSV-Kopfzeilen: Wenn das Feld für den Variablennamen leer ist, wird die erste Zeile der Datei gelesen und als Liste der Spaltennamen interpretiert.
Nein
Verwenden Sie die erste Zeile als Variablennamen
Ignorieren Sie die erste Zeile der CSV-Datei, sie wird nur verwendet, wenn Variablennamen nicht leer sind, wenn Variablennamen leer sind, muss die erste Zeile die Kopfzeilen enthalten.
Nein
Trennzeichen
Trennzeichen, das zum Aufteilen der Datensätze in der Datei verwendet werden soll. Wenn es weniger Werte in der Zeile als Variablen gibt, werden die verbleibenden Variablen nicht aktualisiert - sie behalten also ihren vorherigen Wert (falls vorhanden).
Ja
Zitierte Daten zulassen?
Soll die CSV-Datei das Zitieren von Werten zulassen? Wenn diese Option aktiviert ist, können Werte in " - doppelte Anführungszeichen eingeschlossen werden, sodass Werte ein Trennzeichen enthalten können.
Ja
Auf EOF recyceln?
Soll die Datei beim Erreichen von EOF von Anfang an neu gelesen werden ? (Standard ist wahr )
Ja
Thread auf EOF beenden?
Soll der Thread bei EOF gestoppt werden , wenn Recycle false ist? (Standard ist falsch )
Ja
Teilen-Modus
  • Alle Threads – (Standardeinstellung) Die Datei wird von allen Threads gemeinsam genutzt.
  • Aktuelle Thread-Gruppe – jede Datei wird einmal für jede Thread-Gruppe geöffnet, in der das Element vorkommt
  • Aktueller Thread - jede Datei wird für jeden Thread separat geöffnet
  • Bezeichner - Alle Threads mit demselben Bezeichner teilen dieselbe Datei. Wenn Sie also beispielsweise 4 Thread-Gruppen haben, können Sie eine gemeinsame ID für zwei oder mehr Gruppen verwenden, um die Datei zwischen ihnen zu teilen. Oder Sie könnten die Thread-Nummer verwenden, um die Datei zwischen denselben Thread-Nummern in verschiedenen Thread-Gruppen freizugeben.
Ja
^

Standardwerte für FTP-Anforderungen

Screenshot für das Control-Panel von FTP Request Defaults
Screenshot des Control-Panels der FTP-Request-Standardwerte
^

DNS-Cache-Manager

Das DNS-Cache-Manager-Element ermöglicht das Testen von Anwendungen, die mehrere Server hinter Load Balancern (CDN usw.) haben, wenn Benutzer Inhalte von verschiedenen IPs erhalten. Standardmäßig verwendet JMeter den JVM-DNS-Cache. Aus diesem Grund wird nur ein Server aus dem Cluster belastet. Der DNS-Cache-Manager löst Namen für jeden Thread bei jeder Iteration separat auf und speichert die Ergebnisse der Auflösung in seinem internen DNS-Cache, der unabhängig von JVM- und OS-DNS-Caches ist.

Eine Zuordnung für statische Hosts kann verwendet werden, um so etwas wie die Datei /etc/hosts zu simulieren. Diese Einträge werden gegenüber dem benutzerdefinierten Resolver bevorzugt. Benutzerdefinierten DNS-Resolver verwenden muss aktiviert sein, wenn Sie diese Zuordnung verwenden möchten.

Verwendung der statischen Host-Tabelle

Angenommen, Sie haben einen Testserver, den Sie mit einem Namen erreichen möchten, der (noch) nicht in Ihren DNS-Servern eingerichtet ist. Für unser Beispiel wäre dies www.example.com für den Servernamen, den Sie unter der IP des Servers a123.another.example.org erreichen möchten .

Sie könnten Ihre Workstation ändern und einen Eintrag zu Ihrer /etc/hosts -Datei hinzufügen - oder dem Äquivalent für Ihr Betriebssystem, oder einen Eintrag zur statischen Host-Tabelle des DNS-Cache-Managers hinzufügen.

Sie würden www.example.com in die erste Spalte ( Host ) und a123.another.example.org in die zweite Spalte ( Hostname oder IP-Adresse ) eingeben. Wie der Name der zweiten Spalte schon sagt, könnten Sie dort sogar die IP-Adresse Ihres Testservers verwenden.

Die IP-Adresse für den Testserver wird mithilfe des benutzerdefinierten DNS-Resolvers nachgeschlagen. Wenn keine angegeben ist, wird der System-DNS-Resolver verwendet.

Jetzt können Sie www.example.com in Ihren HTTPClient4-Samplern verwenden und die Anfragen werden an a123.another.example.org gestellt, wobei alle Header auf www.example.com gesetzt sind .

Screenshot für das Control-Panel des DNS-Cache-Managers
Screenshot der Systemsteuerung des DNS-Cache-Managers
Der DNS-Cache-Manager ist für die Verwendung im Stamm der Thread-Gruppe oder des Testplans konzipiert. Platzieren Sie es nicht als untergeordnetes Element eines bestimmten HTTP-Samplers
Der DNS-Cache-Manager funktioniert nur mit HTTP-Anforderungen, die die HTTPClient4-Implementierung verwenden.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Leeren Sie den Cache bei jeder Iteration
Wenn diese Option ausgewählt ist, wird der DNS-Cache jedes Threads jedes Mal gelöscht, wenn eine neue Iteration gestartet wird.
Nein
Verwenden Sie den System-DNS-Resolver
System-DNS-Resolver wird verwendet. Für eine korrekte Arbeit bearbeiten Sie $JAVA_HOME/jre/lib/security/java.security und fügen networkaddress.cache.ttl=0 hinzu
N / A
Verwenden Sie einen benutzerdefinierten DNS-Resolver
Es wird ein benutzerdefinierter DNS-Resolver (aus der dnsjava-Bibliothek) verwendet.
N / A
Hostname oder IP-Adresse
Liste der zu verwendenden DNS-Server. Wenn leer, wird der Netzwerkkonfigurations-DNS verwendet.
Nein
Schaltfläche hinzufügen
Fügen Sie der DNS-Servertabelle einen Eintrag hinzu.
N / A
Schaltfläche „Löschen“.
Löschen Sie den aktuell ausgewählten Tabelleneintrag.
N / A
Host und Hostname oder IP-Adresse
Zuordnung von Hostnamen zu einem statischen Hosteintrag, der mithilfe des benutzerdefinierten DNS-Resolvers aufgelöst wird.
Nein
Statischen Host-Button hinzufügen
Fügen Sie der statischen Hosts-Tabelle einen Eintrag hinzu.
N / A
Statische Host-Schaltfläche löschen
Löschen Sie den aktuell ausgewählten statischen Host in der Tabelle.
N / A
^

HTTP-Autorisierungsmanager

Mit dem Autorisierungs-Manager können Sie eine oder mehrere Benutzeranmeldungen für Webseiten angeben, die mithilfe der Serverauthentifizierung eingeschränkt sind. Sie sehen diese Art der Authentifizierung, wenn Sie Ihren Browser verwenden, um auf eine eingeschränkte Seite zuzugreifen, und Ihr Browser zeigt ein Anmeldedialogfeld an. JMeter übermittelt die Anmeldeinformationen, wenn es auf diese Art von Seite stößt.

Die Autorisierungs-Header werden möglicherweise nicht auf der Registerkarte „ Request “ des Strukturansicht -Listeners angezeigt . Die Java-Implementierung führt eine präventive Authentifizierung durch, gibt jedoch den Authorization-Header nicht zurück, wenn JMeter die Header abruft. Die Implementierung von HttpComponents (HC 4.5.X) ist seit 3.2 standardmäßig präemptiv und der Header wird angezeigt. Um dies zu deaktivieren, legen Sie die Werte wie folgt fest. In diesem Fall wird die Authentifizierung nur als Antwort auf eine Abfrage durchgeführt.

Setzen Sie in der Datei jmeter.properties httpclient4.auth.preemptive=false

Hinweis: Die obigen Einstellungen gelten nur für den HttpClient-Sampler.
Bei der Suche nach einer Übereinstimmung mit einer URL überprüft JMeter nacheinander jeden Eintrag und stoppt, wenn es die erste Übereinstimmung findet. Daher sollten die spezifischsten URLs zuerst in der Liste erscheinen, gefolgt von weniger spezifischen. Doppelte URLs werden ignoriert. Wenn Sie verschiedene Benutzernamen/Passwörter für verschiedene Threads verwenden möchten, können Sie Variablen verwenden. Diese können (zB) über ein CSV Data Set Config Element eingerichtet werden.
Screenshot für das Control-Panel des HTTP-Autorisierungs-Managers
Screenshot der Systemsteuerung des HTTP-Autorisierungs-Managers
Wenn es mehr als einen Authorization Manager im Geltungsbereich eines Samplers gibt, gibt es derzeit keine Möglichkeit festzulegen, welcher verwendet werden soll.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Authentifizierung bei jeder Iteration löschen?
Wird von der Kerberos-Authentifizierung verwendet. Wenn diese Option aktiviert ist, wird die Authentifizierung bei jeder Iteration der Haupt-Thread-Gruppenschleife durchgeführt, selbst wenn dies bereits in einer vorherigen durchgeführt wurde. Dies ist normalerweise nützlich, wenn jede Iteration der Haupt-Thread-Gruppe das Verhalten eines virtuellen Benutzers darstellt.
Ja
Basis-URL
Eine teilweise oder vollständige URL, die mit einer oder mehreren HTTP-Anforderungs-URLs übereinstimmt. Angenommen , Sie geben als Basis-URL „ http://localhost/restricted/ “ mit einem Benutzernamenjmeter “ und einem Passwortjmeter “ an. Wenn Sie eine HTTP-Anforderung an die URL „ http://localhost/restricted/ant/myPage.html “ senden, sendet der Autorisierungsmanager die Anmeldeinformationen für den Benutzer namens „ jmeter “.
Ja
Nutzername
Der zu autorisierende Benutzername.
Ja
Passwort
Das Passwort für den Benutzer. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Ja
Domain
Die für NTLM zu verwendende Domäne.
Nein
Reich
Der für NTLM zu verwendende Bereich.
Nein
Mechanismus
Art der durchzuführenden Authentifizierung. JMeter kann basierend auf verwendeten Http-Samplern verschiedene Arten von Authentifizierungen durchführen:
Java
BASIC
HttpClient 4
BASIC , DIGEST und Kerberos
Nein
Der Realm gilt nur für den HttpClient-Sampler.

Kerberos-Konfiguration:

Um Kerberos zu konfigurieren, müssen Sie mindestens zwei JVM-Systemeigenschaften einrichten:

  • -Djava.security.krb5.conf=krb5.conf
  • -Djava.security.auth.login.config=jaas.conf

Sie können diese beiden Eigenschaften auch in der Datei bin/system.properties konfigurieren . Suchen Sie in den beiden Beispielkonfigurationsdateien ( krb5.conf und jaas.conf ) im JMeter -Ordner bin nach Verweisen auf weitere Dokumentation und passen Sie sie an Ihre Kerberos-Konfiguration an.

Die Delegierung von Anmeldeinformationen ist für SPNEGO standardmäßig deaktiviert. Wenn Sie es aktivieren möchten, können Sie dies tun, indem Sie die Eigenschaft kerberos.spnego.delegate_cred auf true setzen .

Beim Generieren eines SPN für die Kerberos-SPNEGO-Authentifizierung lassen IE und Firefox die Portnummer aus der URL weg. Chrome hat eine Option ( --enable-auth-negotiate-port ), um die Portnummer aufzunehmen, wenn sie von den Standardnummern ( 80 und 443 ) abweicht. Dieses Verhalten kann emuliert werden, indem die folgende JMeter-Eigenschaft wie unten festgelegt wird.

Legen Sie in jmeter.properties oder user.properties Folgendes fest:

  • kerberos.spnego.strip_port=false

Kontrollen:
  • Schaltfläche „ Hinzufügen “ – Fügt der Autorisierungstabelle einen Eintrag hinzu.
  • Schaltfläche „ Löschen “ – Löscht den aktuell ausgewählten Tabelleneintrag.
  • Schaltfläche „ Laden “ – Lädt eine zuvor gespeicherte Berechtigungstabelle und fügt die Einträge zu den vorhandenen Berechtigungstabelleneinträgen hinzu.
  • Schaltfläche „ Speichern unter“ – Speichert die aktuelle Berechtigungstabelle in einer Datei.
Wenn Sie den Testplan speichern, speichert JMeter automatisch alle Einträge in der Berechtigungstabelle – einschließlich aller Passwörter, die nicht verschlüsselt sind.
Berechtigungsbeispiel

Laden Sie dieses Beispiel herunter. In diesem Beispiel haben wir einen Testplan auf einem lokalen Server erstellt, der drei HTTP-Anforderungen sendet, von denen zwei eine Anmeldung erfordern und die andere für alle offen ist. Siehe Abbildung 10, um die Zusammensetzung unseres Testplans zu sehen. Auf unserem Server haben wir ein eingeschränktes Verzeichnis namens „ secret “, das zwei Dateien enthält, „ index.html “ und „ index2.html “. Wir haben eine Login-ID mit dem Namen „ Kevin “ erstellt, die das Passwort „ Spot “ hat. Daher haben wir in unserem Autorisierungsmanager einen Eintrag für das eingeschränkte Verzeichnis sowie einen Benutzernamen und ein Passwort erstellt (siehe Abbildung 11). Die beiden HTTP-Requests namens „ SecretPage1 “ und „ SecretPage2/secret/index.html " und " /secret/index2.html ". Die andere HTTP-Anfrage mit dem Namen " NoSecretPage " stellt eine Anfrage an " /index.html ".

Abbildung 10 – Testplan
Abbildung 10 – Testplan
Abbildung 11 – Authorization Manager-Systemsteuerung
Abbildung 11 – Authorization Manager-Systemsteuerung

Wenn wir den Testplan ausführen, sucht JMeter in der Autorisierungstabelle nach der angeforderten URL. Wenn die Basis-URL mit der URL übereinstimmt, leitet JMeter diese Informationen zusammen mit der Anfrage weiter.

Sie können den Testplan herunterladen, aber da er als Test für unseren lokalen Server erstellt wurde, können Sie ihn nicht ausführen. Sie können es jedoch als Referenz beim Erstellen Ihres eigenen Testplans verwenden.
^

HTTP-Cache-Manager

Der HTTP-Cache-Manager wird verwendet, um HTTP-Anforderungen innerhalb seines Bereichs Caching-Funktionalität hinzuzufügen, um die Browser-Cache-Funktion zu simulieren. Jeder virtuelle Benutzerthread hat seinen eigenen Cache. Standardmäßig speichert Cache Manager unter Verwendung des LRU-Algorithmus bis zu 5000 Elemente im Cache pro Thread für virtuelle Benutzer. Verwenden Sie die Eigenschaft „ maxSize “, um diesen Wert zu ändern. Beachten Sie, dass je mehr Sie diesen Wert erhöhen, desto mehr Speicher verbraucht der HTTP-Cache-Manager. Stellen Sie daher sicher, dass Sie die JVM-Option -Xmx entsprechend anpassen.

Wenn ein Beispiel erfolgreich ist (dh den Antwortcode 2xx hat ), werden die Werte Last-Modified und Etag (und Expired , falls relevant) für die URL gespeichert. Vor der Ausführung des nächsten Beispiels prüft der Sampler, ob ein Eintrag im Cache vorhanden ist, und wenn dies der Fall ist, werden die bedingten Header „ If-Last-Modified “ und „ If-None-Match “ für die Anforderung festgelegt.

Wenn außerdem die Option " Cache-Control/Expires-Header verwenden " ausgewählt ist, wird der Cache-Control / Expires - Wert mit der aktuellen Zeit verglichen. Wenn die Anforderung eine GET -Anforderung ist und der Zeitstempel in der Zukunft liegt, kehrt der Sampler sofort zurück, ohne die URL vom Remote-Server anzufordern. Dies soll das Browserverhalten emulieren. Beachten Sie, dass, wenn der Cache-Control- Header " no-cache " ist, die Antwort als vorab abgelaufen im Cache gespeichert wird, sodass eine bedingte GET - Anforderung generiert wird. Wenn Cache-Control einen anderen Wert hat, wird die Datei " max-age" Die Ablaufoption wird verarbeitet, um die Lebensdauer des Eintrags zu berechnen. Wenn sie fehlt, wird der Ablauf-Header verwendet, wenn auch der fehlende Eintrag gemäß RFC 2616, Abschnitt 13.2.4 , unter Verwendung der Zeit der letzten Änderung und des Antwortdatums zwischengespeichert wird.

Wenn sich das angeforderte Dokument seit dem Zwischenspeichern nicht geändert hat, ist der Antworttext leer. Ebenso, wenn das Expires- Datum in der Zukunft liegt. Dies kann Probleme für Assertions verursachen.
Screenshot für das Control-Panel des HTTP-Cache-Managers
Screenshot der Systemsteuerung des HTTP-Cache-Managers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Leeren Sie den Cache bei jeder Iteration
Wenn diese Option ausgewählt ist, wird der Cache beim Start des Threads gelöscht.
Ja
Verwenden Sie den Cache Control/Expires-Header bei der Verarbeitung von GET-Anforderungen
Siehe Beschreibung oben.
Ja
Maximale Anzahl von Elementen im Cache
Siehe Beschreibung oben.
Ja
^

Das Cookie-Manager-Element hat zwei Funktionen:
Erstens speichert und sendet es Cookies wie ein Webbrowser. Wenn Sie eine HTTP-Anforderung haben und die Antwort ein Cookie enthält, speichert der Cookie-Manager dieses Cookie automatisch und verwendet es für alle zukünftigen Anforderungen an diese bestimmte Website. Jeder JMeter-Thread hat seinen eigenen "Cookie-Speicherbereich". Wenn Sie also eine Website testen, die ein Cookie zum Speichern von Sitzungsinformationen verwendet, hat jeder JMeter-Thread seine eigene Sitzung. Beachten Sie, dass solche Cookies nicht in der Anzeige des Cookie-Managers erscheinen, aber mit dem View Results Tree Listener angezeigt werden können.

JMeter prüft, ob empfangene Cookies für die URL gültig sind. Das bedeutet, dass keine domainübergreifenden Cookies gespeichert werden. Wenn Sie fehlerhaftes Verhalten haben oder möchten, dass Cross-Domain-Cookies verwendet werden, definieren Sie die JMeter-Eigenschaft „ CookieManager.check.cookies=false “.

Empfangene Cookies können als JMeter-Thread-Variablen gespeichert werden. Um Cookies als Variablen zu speichern, definieren Sie die Eigenschaft " CookieManager.save.cookies=true ". Außerdem wird den Namen von Cookies das Präfix „ COOKIE_ “ vorangestellt, bevor sie gespeichert werden (dies vermeidet eine versehentliche Beschädigung lokaler Variablen). Um zum ursprünglichen Verhalten zurückzukehren, definieren Sie die Eigenschaft „ CookieManager.name.prefix= “ (ein oder mehrere Leerzeichen). Wenn aktiviert, kann der Wert eines Cookies mit dem Namen TEST als ${COOKIE_TEST} bezeichnet werden .

Zweitens können Sie dem Cookie-Manager manuell ein Cookie hinzufügen. Wenn Sie dies tun, wird das Cookie jedoch von allen JMeter-Threads geteilt.

Beachten Sie, dass solche Cookies mit einer weit in der Zukunft liegenden Ablaufzeit erstellt werden

Cookies mit Nullwerten werden standardmäßig ignoriert. Dies kann durch Festlegen der JMeter-Eigenschaft geändert werden: CookieManager.delete_null_cookies=false . Beachten Sie, dass dies auch für manuell definierte Cookies gilt – solche Cookies werden von der Anzeige entfernt, wenn sie aktualisiert wird. Beachten Sie auch, dass der Cookie-Name eindeutig sein muss – wenn ein zweites Cookie mit demselben Namen definiert wird, ersetzt es das erste.

Screenshot für das Control-Panel des HTTP-Cookie-Managers
Screenshot der Systemsteuerung des HTTP-Cookie-Managers
Wenn es mehr als einen Cookie-Manager im Umfang eines Samplers gibt, gibt es derzeit keine Möglichkeit festzulegen, welcher verwendet werden soll. Außerdem steht ein in einem Cookie-Manager gespeichertes Cookie keinem anderen Manager zur Verfügung, verwenden Sie also mehrere Cookie-Manager mit Vorsicht.
Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Cookies bei jeder Iteration löschen
Wenn diese Option ausgewählt ist, werden alle serverdefinierten Cookies jedes Mal gelöscht, wenn die Haupt-Thread-Gruppenschleife ausgeführt wird. Alle in der GUI definierten Cookies werden nicht gelöscht.
Ja
Cookie-Richtlinie
Die Cookie-Richtlinie, die zum Verwalten der Cookies verwendet wird. " standard " ist seit 3.0 die Voreinstellung und sollte in den meisten Fällen funktionieren. Siehe Cookie-Spezifikationen und CookieSpec-Implementierungen [Anmerkung: " ignoreCookies " entspricht dem Weglassen des CookieManagers.]
Ja
Implementierung
HC4CookieHandler (HttpClient 4.5.X-API). Standard ist HC4CookieHandler seit 3.0.
[Hinweis: Wenn Sie eine Website mit IPv6-Adresse testen möchten, wählen Sie HC4CookieHandler (IPv6-konform)]
Ja
Benutzerdefinierte Cookies
Dies gibt Ihnen die Möglichkeit, hartcodierte Cookies zu verwenden, die von allen Threads während der Testausführung verwendet werden.
Die " Domain " ist der Hostname des Servers (ohne http:// ); der Port wird derzeit ignoriert.
Nein (entmutigt, es sei denn, Sie wissen, was Sie tun)
Schaltfläche hinzufügen
Fügen Sie der Cookie-Tabelle einen Eintrag hinzu.
N / A
Schaltfläche „Löschen“.
Löschen Sie den aktuell ausgewählten Tabelleneintrag.
N / A
Schaltfläche „Laden“.
Laden Sie eine zuvor gespeicherte Cookie-Tabelle und fügen Sie die Einträge zu den vorhandenen Cookie-Tabelleneinträgen hinzu.
N / A
Schaltfläche „Speichern unter“.
Speichert die aktuelle Cookie-Tabelle in einer Datei (speichert keine aus HTTP-Antworten extrahierten Cookies).
N / A
^

Standardwerte für HTTP-Anforderungen

Mit diesem Element können Sie Standardwerte festlegen, die Ihre HTTP-Anforderungscontroller verwenden. Wenn Sie beispielsweise einen Testplan mit 25 HTTP-Anforderungscontrollern erstellen und alle Anforderungen an denselben Server gesendet werden, können Sie ein einzelnes HTTP-Anforderungsstandardelement mit ausgefülltem Feld „Servername oder IP “ hinzufügen. Dann , lassen Sie beim Hinzufügen der 25 HTTP-Request-Controller das Feld „ Servername oder IP “ leer. Die Controller erben diesen Feldwert vom Element „HTTP Request Defaults“.

Alle Portwerte werden gleich behandelt; Ein Sampler, der keinen Port angibt, verwendet den Standardport für HTTP-Anforderungen, sofern einer bereitgestellt wird.
Screenshot für das Control-Panel von HTTP Request Defaults
Screenshot des Control-Panels der HTTP-Request-Standardwerte
Erweiterte Konfigurationsfelder für HTTP-Anfragen
Erweiterte Konfigurationsfelder für HTTP-Anfragen

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Server
Domänenname oder IP-Adresse des Webservers. ZB www.beispiel.com . [Fügen Sie das Präfix http:// nicht hinzu.
Nein
Hafen
Port, auf dem der Webserver lauscht.
Nein
Verbindungs ​​Timeout
Verbindungszeitüberschreitung. Anzahl der Millisekunden, die auf das Öffnen einer Verbindung gewartet wird.
Nein
Reaktionszeitüberschreitung
Reaktionszeitüberschreitung. Anzahl der Millisekunden, die auf eine Antwort gewartet wird.
Nein
Implementierung
Java , HttpClient4 . Wenn nicht angegeben, hängt der Standardwert vom Wert der JMeter-Eigenschaft jmeter.httpsampler ab , andernfalls wird die Java - Implementierung verwendet.
Nein
Protokoll
HTTP oder HTTPS .
Nein
Inhaltscodierung
Die für die Anforderung zu verwendende Codierung.
Nein
Weg
Der Pfad zur Ressource (z. B. /servlets/myServlet ). Wenn für die Ressource Parameter für Abfragezeichenfolgen erforderlich sind, fügen Sie diese unten im Abschnitt " Parameter mit der Anfrage senden " hinzu. Beachten Sie, dass der Pfad der Standardwert für den vollständigen Pfad ist und kein Präfix, das auf die auf den HTTP-Anforderungsbildschirmen angegebenen Pfade angewendet wird.
Nein
Parameter mit der Anfrage senden
Die Abfragezeichenfolge wird aus der Liste der von Ihnen bereitgestellten Parameter generiert. Jeder Parameter hat einen Namen und einen Wert . Die Abfragezeichenfolge wird in der richtigen Weise generiert, abhängig von der von Ihnen getroffenen Auswahl von „ Methode “ (dh wenn Sie GET gewählt haben, wird die Abfragezeichenfolge an die URL angehängt, wenn POST , dann wird sie separat gesendet). Auch wenn Sie eine Datei mit einem mehrteiligen Formular senden, wird die Abfragezeichenfolge mit den Spezifikationen des mehrteiligen Formulars erstellt.
Nein
Server (Proxy)
Hostname oder IP-Adresse eines Proxy-Servers zum Durchführen der Anfrage. [Fügen Sie das Präfix http:// nicht ein.]
Nein
Hafen
Port, auf dem der Proxy-Server lauscht.
Nein, es sei denn, der Proxy-Hostname ist angegeben
Nutzername
(Optional) Benutzername für Proxy-Server.
Nein
Passwort
(Optional) Passwort für Proxy-Server. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Nein
Rufen Sie alle eingebetteten Ressourcen aus HTML-Dateien ab
Weisen Sie JMeter an, die HTML-Datei zu parsen und HTTP/HTTPS-Anforderungen für alle Bilder, Java-Applets, JavaScript-Dateien, CSSs usw. zu senden, auf die in der Datei verwiesen wird.
Nein
Gleichzeitigen Pool verwenden
Verwenden Sie einen Pool gleichzeitiger Verbindungen, um eingebettete Ressourcen zu erhalten.
Nein
Größe
Poolgröße für gleichzeitige Verbindungen, die zum Abrufen eingebetteter Ressourcen verwendet werden.
Nein
URLs müssen übereinstimmen:
Falls vorhanden, muss es sich um einen regulären Ausdruck handeln, der zum Abgleich mit allen gefundenen eingebetteten URLs verwendet wird. Wenn Sie also nur eingebettete Ressourcen von http://example.invalid/ herunterladen möchten , verwenden Sie den Ausdruck: http://example\.invalid/.*
Nein
URLs dürfen nicht übereinstimmen:
Falls vorhanden, muss es sich um einen regulären Ausdruck handeln, der verwendet wird, um alle gefundenen eingebetteten URLs herauszufiltern. Wenn Sie also keine PNG- oder SVG-Dateien aus irgendeiner Quelle herunterladen möchten, verwenden Sie den Ausdruck: .*\.(?i:svg|png)
Nein
Hinweis: Optionsfelder haben nur zwei Zustände – ein oder aus. Dies macht es unmöglich, die Einstellungen konsistent zu überschreiben. Bedeutet „aus“ „aus“ oder „den aktuellen Standard verwenden“? JMeter verwendet letzteres (sonst würden Defaults gar nicht funktionieren). Wenn also die Schaltfläche ausgeschaltet ist, kann ein späteres Element sie einschalten, aber wenn die Schaltfläche eingeschaltet ist, kann ein späteres Element sie nicht ausschalten.
^

HTTP-Header-Manager

Mit dem Header-Manager können Sie HTTP-Anforderungsheader hinzufügen oder überschreiben.

JMeter unterstützt jetzt mehrere Header-Manager . Die Header-Einträge werden zur Liste für den Sampler zusammengeführt. Wenn ein zusammenzuführender Eintrag mit einem vorhandenen Kopfzeilennamen übereinstimmt, ersetzt er den vorherigen Eintrag. Auf diese Weise können Sie einen Standardsatz von Kopfzeilen einrichten und Anpassungen an bestimmten Samplern vornehmen. Beachten Sie, dass ein leerer Wert für einen Header keinen vorhandenen Header entfernt, sondern nur seinen Wert ersetzt.

Screenshot für das Control-Panel des HTTP-Header-Managers
Screenshot der Systemsteuerung des HTTP-Header-Managers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Name (Kopfzeile)
Name des Anforderungsheaders. Zwei gängige Anfrage-Header, mit denen Sie vielleicht experimentieren möchten, sind „ User-Agent “ und „ Referer “.
Nein (Sie sollten jedoch mindestens einen haben)
Wert
Kopfzeilenwert anfordern.
Nein (Sie sollten jedoch mindestens einen haben)
Schaltfläche hinzufügen
Fügen Sie der Header-Tabelle einen Eintrag hinzu.
N / A
Schaltfläche „Löschen“.
Löschen Sie den aktuell ausgewählten Tabelleneintrag.
N / A
Schaltfläche „Laden“.
Laden Sie eine zuvor gespeicherte Header-Tabelle und fügen Sie die Einträge zu den vorhandenen Header-Tabelleneinträgen hinzu.
N / A
Schaltfläche „Speichern unter“.
Speichern Sie die aktuelle Header-Tabelle in einer Datei.
N / A
Beispiel Header-Manager

Laden Sie dieses Beispiel herunter. In diesem Beispiel haben wir einen Testplan erstellt, der JMeter anweist, den Standard-Anforderungsheader „ User-Agent “ zu überschreiben und stattdessen eine bestimmte Internet Explorer-Agentenzeichenfolge zu verwenden. (siehe Abbildungen 12 und 13).

Abbildung 12 – Testplan
Abbildung 12 – Testplan
Abbildung 13 – Header-Manager-Systemsteuerung
Abbildung 13 – Header-Manager-Systemsteuerung
^

Standardeinstellungen für Java-Anforderungen

Mit der Komponente „Java Request Defaults“ können Sie Standardwerte für Java-Tests festlegen. Siehe die Java-Anfrage .

Screenshot für das Control-Panel von Java Request Defaults
Screenshot der Systemsteuerung von Java Request Defaults
^

JDBC-Verbindungskonfiguration

Erstellt eine Datenbankverbindung (von JDBC Request Sampler verwendet) aus den bereitgestellten JDBC-Verbindungseinstellungen. Die Verbindung kann optional zwischen Threads zusammengefasst werden. Andernfalls erhält jeder Thread seine eigene Verbindung. Der Verbindungskonfigurationsname wird vom JDBC-Sampler verwendet, um die entsprechende Verbindung auszuwählen. Der verwendete Pool ist DBCP, siehe BasicDataSource-Konfigurationsparameter
Screenshot für die Systemsteuerung der JDBC-Verbindungskonfiguration
Screenshot der Systemsteuerung der JDBC-Verbindungskonfiguration

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für die Verbindungskonfiguration, die im Baum angezeigt wird.
Nein
Variablenname für erstellten Pool
Der Name der Variablen, an die die Verbindung gebunden ist. Es können mehrere Verbindungen verwendet werden, die jeweils an eine andere Variable gebunden sind, sodass JDBC-Sampler die geeignete Verbindung auswählen können.
Jeder Name muss anders sein. Bei zwei gleichnamigen Konfigurationselementen wird nur eines gespeichert. JMeter protokolliert eine Nachricht, wenn ein doppelter Name erkannt wird.
Ja
Maximale Anzahl von Verbindungen
Maximal zulässige Anzahl von Verbindungen im Pool. Setzen Sie dies in den meisten Fällen auf Null (0) . Das bedeutet, dass jeder Thread seinen eigenen Pool mit einer einzigen Verbindung darin bekommt, dh die Verbindungen werden nicht zwischen Threads geteilt.
Wenn Sie wirklich Shared Pooling verwenden möchten (warum?), dann setzen Sie die maximale Anzahl auf die gleiche wie die Anzahl der Threads, um sicherzustellen, dass Threads nicht aufeinander warten.
Ja
Maximale Wartezeit (ms)
Pool gibt einen Fehler aus, wenn die Zeitüberschreitung beim Versuch, eine Verbindung abzurufen, überschritten wird, siehe BasicDataSource.html#getMaxWaitMillis
Ja
Zeit zwischen Räumungsläufen (ms)
Die Anzahl der Millisekunden, die zwischen Ausführungen des Evictor-Threads für inaktive Objekte gewartet werden soll. Wenn nicht positiv, wird kein Evictor-Thread für inaktive Objekte ausgeführt. (Standardeinstellung „ 60000 “, 1 Minute). Siehe BasicDataSource.html#getTimeBetweenEvictionRunsMillis
Ja
Auto-Commit
Schalten Sie die automatische Festschreibung für die Verbindungen ein oder aus.
Ja
Transaktionsisolierung
Transaktionsisolationsstufe
Ja
Preinit-Pool
Der Verbindungspool kann sofort initialisiert werden. Bei Einstellung auf „ False “ (Standard) messen die JDBC-Request-Sampler, die diesen Pool verwenden, möglicherweise höhere Antwortzeiten für die ersten Abfragen – da die Verbindungsaufbauzeit für den gesamten Pool enthalten ist.
Nein
Initialisieren Sie SQL-Anweisungen, die durch eine neue Zeile getrennt sind
Eine Sammlung von SQL-Anweisungen, die verwendet werden, um physische Verbindungen zu initialisieren, wenn sie zum ersten Mal erstellt werden. Diese Anweisungen werden nur einmal ausgeführt – wenn die konfigurierte Verbindungsfactory die Verbindung herstellt.
Nein
Im Leerlauf testen
Leerlaufverbindungen des Pools testen, siehe BasicDataSource.html#getTestWhileIdle . Die Validierungsabfrage wird zum Testen verwendet.
Ja
Soft Min. Evictable Idle Time (ms)
Mindestzeit, die eine Verbindung im Pool im Leerlauf bleiben darf, bevor sie vom Evictor für inaktive Objekte entfernt werden kann, mit der zusätzlichen Bedingung, dass mindestens minIdle- Verbindungen im Pool verbleiben. Siehe BasicDataSource.html#getSoftMinEvictableIdleTimeMillis . Standardmäßig 5000 (5 Sekunden)
Ja
Validierungsabfrage
Eine einfache Abfrage, um festzustellen, ob die Datenbank noch antwortet. Dies ist standardmäßig die ' isValid() '-Methode des jdbc-Treibers, die für viele Datenbanken geeignet ist. Einige erfordern jedoch möglicherweise eine andere Abfrage. Beispielsweise könnte Oracle so etwas wie ' SELECT 1 FROM DUAL ' verwendet werden.

Die Liste der Validierungsabfragen kann mit der Eigenschaft jdbc.config.check.query konfiguriert werden und ist standardmäßig:

hsqldb
wählen Sie 1 aus INFORMATION_SCHEMA.SYSTEM_USERS
Orakel
wählen Sie 1 aus dual
DB2
Wählen Sie 1 aus sysibm.sysdummy1 aus
MySQL oder MariaDB
wähle 1
Microsoft SQL Server (MS JDBC-Treiber)
wähle 1
PostgreSQL
wähle 1
Ingr
wähle 1
Derby
Werte 1
H2
wähle 1
Feuervogel
Wählen Sie 1 aus der rdb$-Datenbank aus
Exasol
wähle 1
Die Liste stammt aus dem Stackoverflow-Eintrag bei verschiedenen Datenbankvalidierungsabfragen und kann falsch sein
Beachten Sie, dass diese Validierungsabfrage bei der Poolerstellung verwendet wird, um sie zu validieren, selbst wenn „ Test While Idle “ vorschlägt, dass die Abfrage nur für Verbindungen im Leerlauf verwendet wird. Dies ist DBCP-Verhalten.
Nein
Datenbank-URL
JDBC-Verbindungszeichenfolge für die Datenbank.
Ja
JDBC-Treiberklasse
Vollqualifizierter Name der Treiberklasse. (Muss sich im Klassenpfad von JMeter befinden – am einfachsten lässt sich die .jar -Datei in das /lib - Verzeichnis von JMeter kopieren).

Die Liste der vorkonfigurierten jdbc-Treiberklassen kann mit der Eigenschaft jdbc.config.jdbc.driver.class konfiguriert werden und ist standardmäßig:

hsqldb
org.hsqldb.jdbc.JDBCDriver
Orakel
oracle.jdbc.OracleDriver
DB2
com.ibm.db2.jcc.DB2Driver
MySQL
com.mysql.jdbc.Driver
Microsoft SQL Server (MS JDBC-Treiber)
com.microsoft.sqlserver.jdbc.SQLServerDriver oder com.microsoft.jdbc.sqlserver.SQLServerDriver
PostgreSQL
org.postgresql.Driver
Ingr
com.ingres.jdbc.IngresDriver
Derby
org.apache.derby.jdbc.ClientDriver
H2
org.h2.Treiber
Feuervogel
org.firebirdsql.jdbc.FBDriver
Apache-Derby
org.apache.derby.jdbc.ClientDriver
MariaDB
org.mariadb.jdbc.Driver
SQLite
org.sqlite.JDBC
Sybase-AES
net.sourceforge.jtds.jdbc.Driver
Exasol
com.exasol.jdbc.EXADriver
Ja
Nutzername
Name des Benutzers, als der eine Verbindung hergestellt werden soll.
Nein
Passwort
Passwort zum Verbinden. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Nein
Verbindungseigenschaften
Verbindungseigenschaften, die beim Verbindungsaufbau festgelegt werden sollen ( z. B. internal_logon=sysdba für Oracle)
Nein

Unterschiedliche Datenbanken und JDBC-Treiber erfordern unterschiedliche JDBC-Einstellungen. Die Datenbank-URL und die JDBC-Treiberklasse werden vom Anbieter der JDBC-Implementierung definiert.

Nachfolgend sind einige mögliche Einstellungen aufgeführt. Bitte überprüfen Sie die genauen Details in der Dokumentation des JDBC-Treibers.

Wenn JMeter keinen geeigneten Treiber meldet , kann dies Folgendes bedeuten:

  • Die Treiberklasse wurde nicht gefunden. In diesem Fall wird eine Protokollmeldung wie z. B. DataSourceElement: Treiber konnte nicht geladen werden: {Klassenname} java.lang.ClassNotFoundException: {Klassenname}
  • Die Treiberklasse wurde gefunden, aber die Klasse unterstützt die Verbindungszeichenfolge nicht. Dies kann an einem Syntaxfehler in der Verbindungszeichenfolge liegen oder daran, dass der falsche Klassenname verwendet wurde.

Wenn der Datenbankserver nicht läuft oder nicht erreichbar ist, meldet JMeter eine java.net.ConnectException .

Nachfolgend sind einige Beispiele für Datenbanken und deren Parameter aufgeführt.

MySQL
Klasse Fahrer
com.mysql.jdbc.Driver
Datenbank-URL
jdbc:mysql://host[:port]/dbname
PostgreSQL
Klasse Fahrer
org.postgresql.Driver
Datenbank-URL
jdbc:postgresql:{Datenbankname}
Orakel
Klasse Fahrer
oracle.jdbc.OracleDriver
Datenbank-URL
jdbc:oracle:thin:@//host:port/service ODER jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no} ))(connect_data=(sid={sid})))
Eindringen (2006)
Klasse Fahrer
ingres.jdbc.IngresDriver
Datenbank-URL
jdbc:ingres://host:port/db[;attr=Wert]
Microsoft SQL Server (MS JDBC-Treiber)
Klasse Fahrer
com.microsoft.sqlserver.jdbc.SQLServerDriver
Datenbank-URL
jdbc:sqlserver://host:port;Datenbankname=Datenbankname
Apache-Derby
Klasse Fahrer
org.apache.derby.jdbc.ClientDriver
Datenbank-URL
jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]
MariaDB
Klasse Fahrer
org.mariadb.jdbc.Driver
Datenbank-URL
jdbc:mariadb://host[:port]/dbname[;URLAttributes=value[;…]]
Exasol (siehe auch Dokumentation zum JDBC-Treiber )
Klasse Fahrer
com.exasol.jdbc.EXADriver
Datenbank-URL
jdbc:exa:host[:port][;schema=SCHEMA_NAME][;prop_x=value_x]
Das obige ist möglicherweise nicht korrekt - bitte überprüfen Sie die entsprechende JDBC-Treiberdokumentation.
^

Keystore-Konfiguration

Mit dem Keystore-Konfigurationselement können Sie konfigurieren, wie Keystore geladen wird und welche Schlüssel verwendet werden. Diese Komponente wird normalerweise in HTTPS-Szenarien verwendet, in denen Sie die Keystore-Initialisierung nicht in der Antwortzeit berücksichtigen möchten.

Um dieses Element zu verwenden, müssen Sie zunächst einen Java Key Store mit den zu testenden Client-Zertifikaten einrichten:

  1. Erstellen Sie Ihre Zertifikate entweder mit dem Java Keytool- Dienstprogramm oder über Ihre PKI
  2. Wenn Sie von PKI erstellt wurden, importieren Sie Ihre Schlüssel in Java Key Store, indem Sie sie in ein von JKS akzeptiertes Format konvertieren
  3. Verweisen Sie dann auf die Keystore-Datei über die beiden JVM-Eigenschaften (oder fügen Sie sie in system.properties hinzu ):
    • -Djavax.net.ssl.keyStore=Pfad_zum_Schlüsselspeicher
    • -Djavax.net.ssl.keyStorePassword=password_of_keystore

Um PKCS11 als Quelle für den Store zu verwenden, müssen Sie javax.net.ssl.keyStoreType auf PKCS11 und javax.net.ssl.keyStore auf NONE setzen .

Screenshot für das Control-Panel der Keystore-Konfiguration
Screenshot des Control-Panels der Keystore-Konfiguration

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Vorladen
Ob Keystore vorab geladen werden soll oder nicht. Die Einstellung auf true ist normalerweise die beste Option.
Ja
Name des Variablennamens, der den Alias ​​des Zertifikats enthält
Variablenname, der den Alias ​​enthält, der für die Authentifizierung durch das Clientzertifikat verwendet werden soll. Der Variablenwert wird beispielsweise aus dem CSV-Datensatz gefüllt. Im Screenshot ist „ certificat_ssl “ auch eine Variable im CSV-Datensatz. Standardmäßig clientCertAliasVarName
FALSCH
Alias-Startindex
Der Index des ersten Schlüssels, der im Keystore verwendet werden soll, 0-basiert.
Ja
Alias-Ende-Index
Der Index des letzten im Keystore zu verwendenden Schlüssels, 0-basiert. Stellen Sie bei Verwendung von „ Variablenname mit Zertifikatalias “ sicher, dass dieser groß genug ist, damit alle Schlüssel beim Start geladen werden. Der Standardwert ist -1, was bedeutet, dass alle geladen werden.
Ja
Damit JMeter mehr als ein Zertifikat verwendet, müssen Sie Folgendes sicherstellen:
  • https.use.cached.ssl.context=false ist in jmeter.properties oder user.properties festgelegt
  • Sie verwenden die HTTPClient 4-Implementierung für HTTP-Anforderungen
^

Login-Konfigurationselement

Mit dem Login-Konfigurationselement können Sie Benutzernamen- und Kennworteinstellungen in Probenehmern hinzufügen oder überschreiben, die Benutzernamen und Kennwort als Teil ihrer Einrichtung verwenden.

Screenshot für das Control-Panel des Login-Konfigurationselements
Screenshot des Control-Panels des Login-Konfigurationselements

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Nutzername
Der zu verwendende Standardbenutzername.
Nein
Passwort
Das zu verwendende Standardkennwort. (Achtung: wird unverschlüsselt im Prüfplan gespeichert)
Nein
^

Standardeinstellungen für LDAP-Anforderungen

Mit der Komponente „LDAP-Anforderungsstandards“ können Sie Standardwerte für LDAP-Tests festlegen. Siehe LDAP-Anfrage .

Screenshot für das Control-Panel von LDAP Request Defaults
Screenshot der Systemsteuerung der LDAP-Anforderungsvorgaben
^

Standardwerte für erweiterte LDAP-Anforderungen

Mit der Komponente „Standardwerte für erweiterte LDAP-Anforderungen“ können Sie Standardwerte für erweiterte LDAP-Tests festlegen. Siehe die erweiterte LDAP-Anforderung .

Screenshot für das Control-Panel von LDAP Extended Request Defaults
Screenshot der Systemsteuerung von LDAP Extended Request Defaults
^

TCP-Sampler-Konfiguration

Die TCP-Sampler-Konfiguration stellt Standarddaten für den TCP-Sampler bereit

Screenshot für das Control-Panel von TCP Sampler Config
Screenshot des Control-Panels von TCP Sampler Config

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
TCPClient-Klassenname
Name der TCPClient-Klasse. Standardmäßig die Eigenschaft tcp.handler , andernfalls TCPClientImpl .
Nein
Servername oder IP
Name oder IP des TCP-Servers
Port-Nummer
Zu verwendender Port
Verbindung wiederverwenden
Wenn ausgewählt, wird die Verbindung offen gehalten. Andernfalls wird es geschlossen, wenn die Daten gelesen wurden.
Ja
Verbindung schließen
Wenn diese Option ausgewählt ist, wird die Verbindung nach dem Ausführen des Samplers geschlossen.
Ja
SO_LINGER
Aktiviert/deaktiviert SO_LINGER mit der angegebenen Verweilzeit in Sekunden, wenn ein Socket erstellt wird. Wenn Sie den Wert " SO_LINGER " auf 0 setzen , können Sie verhindern, dass eine große Anzahl von Sockets mit einem TIME_WAIT- Status herumsitzen.
Nein
Bytewert für Zeilenende (EOL).
Byte-Wert für Zeilenende, setzen Sie diesen Wert auf einen Wert außerhalb des Bereichs von -128 bis +127 , um die EOL-Prüfung zu überspringen. Sie können dies auch in der Datei jmeter.properties mit der Eigenschaft tcp.eolByte festlegen . Wenn Sie dies gleichzeitig in der TCP-Sampler-Konfiguration und in der Datei jmeter.properties festlegen , wird der Einstellungswert in der TCP-Sampler-Konfiguration verwendet.
Nein
Verbindungs ​​Timeout
Connect Timeout (Millisekunden, 0 deaktiviert).
Nein
Reaktionszeitüberschreitung
Antwort-Timeout (Millisekunden, 0 deaktiviert).
Nein
Nodelay einstellen
Soll die Nodelay-Eigenschaft festgelegt werden?
Text zum Senden
Zu sendender Text
^

Benutzerdefinierte Variablen

Mit dem Element „Benutzerdefinierte Variablen“ können Sie einen anfänglichen Satz von Variablen definieren , genau wie im Testplan .

Beachten Sie, dass alle UDV-Elemente in einem Testplan – egal wo sie sich befinden – zu Beginn verarbeitet werden.
Sie können also keine Variablen referenzieren, die im Rahmen eines Testlaufs zB in einem Postprozessor definiert werden.

UDVs sollten nicht mit Funktionen verwendet werden, die bei jedem Aufruf unterschiedliche Ergebnisse generieren. Nur das Ergebnis des ersten Funktionsaufrufs wird in der Variablen gespeichert. UDVs können jedoch mit Funktionen wie __P() verwendet werden, zum Beispiel:

HOST ${__P(host,localhost)}

Dadurch würde die Variable " HOST " so definiert, dass sie den Wert der JMeter-Eigenschaft " host " hat und standardmäßig " localhost " ist, wenn sie nicht definiert ist.

Informationen zum Definieren von Variablen während eines Testlaufs finden Sie unter Benutzerparameter . UDVs werden in der Reihenfolge verarbeitet, in der sie im Plan erscheinen, von oben nach unten.

Der Einfachheit halber wird vorgeschlagen, dass UDVs nur am Anfang einer Thread-Gruppe (oder vielleicht unter dem Testplan selbst) platziert werden.

Nachdem der Testplan und alle UDVs verarbeitet wurden, wird der resultierende Satz von Variablen in jeden Thread kopiert, um den anfänglichen Satz von Variablen bereitzustellen.

Wenn ein Laufzeitelement wie ein User Parameters Pre-Processor oder ein Regular Expression Extractor eine Variable mit demselben Namen wie eine der UDV-Variablen definiert, ersetzt dies den Anfangswert, und alle anderen Testelemente im Thread sehen den aktualisierten Wert Wert.

Screenshot für das Control-Panel der benutzerdefinierten Variablen
Screenshot des Control-Panels der benutzerdefinierten Variablen
Wenn Sie über mehr als eine Thread-Gruppe verfügen, stellen Sie sicher, dass Sie unterschiedliche Namen für unterschiedliche Werte verwenden, da UDVs von Thread-Gruppen gemeinsam genutzt werden. Außerdem stehen die Variablen erst nach der Verarbeitung des Elements zur Verfügung, sodass Sie nicht auf Variablen verweisen können, die im selben Element definiert sind. Sie können auf Variablen verweisen, die in früheren UDVs oder im Testplan definiert wurden.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Benutzerdefinierte Variablen
Variable Name/Wert-Paare. Die Zeichenfolge unter der Spalte „ Name “ müssen Sie in den ${…} -Konstrukten in die Klammern einfügen , um die Variablen später verwenden zu können. Das ganze ${…} wird dann durch den String in der Spalte „ Value “ ersetzt.
^

Zufallsvariable

Das Random Variable Config Element wird verwendet, um zufällige numerische Zeichenfolgen zu generieren und sie zur späteren Verwendung in Variablen zu speichern. Es ist einfacher als die Verwendung von benutzerdefinierten Variablen zusammen mit der Funktion __Random() .

Die Ausgabevariable wird mithilfe des Zufallszahlengenerators erstellt, und dann wird die resultierende Zahl mithilfe der Formatzeichenfolge formatiert. Die Zahl wird mit der Formel minimum+Random.nextInt(maximum-minimum+1) berechnet . Random.nextInt() erfordert eine positive Ganzzahl. Das bedeutet, dass Maximum-Minimum - dh der Bereich - kleiner als 2147483647 sein muss , jedoch können die minimalen und maximalen Werte beliebig lange Werte sein, solange der Bereich in Ordnung ist.

Da der Zufallswert zu Beginn jeder Iteration ausgewertet wird, ist es wahrscheinlich keine gute Idee, eine andere Variable als eine Eigenschaft als Wert für das Minimum oder Maximum zu verwenden. Bei der ersten Iteration wäre es null.
Screenshot für das Control-Panel der Zufallsvariablen
Screenshot des Control-Panels der Zufallsvariablen

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Ja
Variablennamen
Der Name der Variablen, in der die Zufallszeichenfolge gespeichert werden soll.
Ja
Zeichenkette formatieren
Die zu verwendende java.text.DecimalFormat -Formatzeichenfolge . Zum Beispiel " 000 ", das Zahlen mit mindestens 3 Ziffern generiert, oder " USER_000 ", das eine Ausgabe der Form USER_nnn generiert . Wenn nicht angegeben, wird die Nummer standardmäßig mit Long.toString() generiert.
Nein
Mindestwert
Der Mindestwert ( long ) der generierten Zufallszahl.
Ja
Maximalwert
Der Maximalwert ( long ) der generierten Zufallszahl.
Ja
Zufälliger Samen
Der Startwert für den Zufallszahlengenerator. Wenn Sie denselben Seed-Wert verwenden, wobei Per Thread auf true gesetzt ist, erhalten Sie für jeden Thread denselben Wert gemäß Random -Klasse. Wenn kein Startwert festgelegt ist, wird der Standardkonstruktor von Random verwendet.
Nein
Pro Thread (Benutzer)?
Bei False wird der Generator von allen Threads in der Threadgruppe gemeinsam genutzt. Wenn True , dann hat jeder Thread seinen eigenen Zufallsgenerator.
Ja
^

Zähler

Ermöglicht dem Benutzer, einen Zähler zu erstellen, auf den überall in der Thread-Gruppe verwiesen werden kann. Mit der Zählerkonfiguration kann der Benutzer einen Startpunkt, ein Maximum und das Inkrement konfigurieren. Der Zähler durchläuft eine Schleife vom Start bis zum Maximum und beginnt dann wieder mit dem Start und fährt so fort, bis der Test beendet ist.

Der Zähler verwendet einen Long-Wert, um den Wert zu speichern, sodass der Bereich von -2^63 bis 2^63-1 reicht .

Screenshot für das Control-Panel von Counter
Screenshot des Control-Panels von Counter

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Startwert
Der Startwert für den Zähler. Der Zähler entspricht diesem Wert während der ersten Iteration (standardmäßig 0).
Nein
Zuwachs
Wie viel der Zähler nach jeder Iteration erhöht werden soll (standardmäßig 0, was keine Erhöhung bedeutet).
Ja
Maximalwert
Wenn der Zähler das Maximum überschreitet, wird er auf den Startwert zurückgesetzt . Standard ist Long.MAX_VALUE
Nein
Format
Optionales Format, z. B. wird 000 als 001 , 002 usw. formatiert. Dies wird an DecimalFormat übergeben , sodass alle gültigen Formate verwendet werden können. Wenn beim Interpretieren des Formats ein Problem auftritt, wird es ignoriert. [Das Standardformat wird mit Long.toString() generiert ]
Nein
Exportierter Variablenname
Dies ist der Variablenname, unter dem der Zählerwert verfügbar ist. Wenn Sie es counterA nennen , können Sie darauf mit ${counterA} zugreifen , wie in benutzerdefinierten Werten erklärt (standardmäßig wird eine leere Zeichenfolgenvariable erstellt, auf die mit ${} zugegriffen werden kann, aber davon wird dringend abgeraten)
Nein
Track Counter Unabhängig für jeden Benutzer
Mit anderen Worten, handelt es sich um einen globalen Zähler oder erhält jeder Benutzer seinen eigenen Zähler? Wenn nicht markiert, ist der Zähler global (dh Benutzer Nr. 1 erhält den Wert „ 1 “ und Benutzer Nr. 2 erhält den Wert „ 2 “ bei der ersten Iteration). Wenn aktiviert, hat jeder Benutzer einen unabhängigen Zähler.
Nein
Zähler bei jeder Thread-Gruppen-Iteration zurücksetzen
Diese Option ist nur verfügbar, wenn der Zähler pro Benutzer verfolgt wird. Wenn diese Option aktiviert ist, wird der Zähler bei jeder Iteration der Thread-Gruppe auf den Startwert zurückgesetzt . Dies kann nützlich sein, wenn sich Counter in einem Loop Controller befindet.
Nein
^

Einfaches Konfigurationselement

Mit dem einfachen Konfigurationselement können Sie beliebige Werte in Samplern hinzufügen oder überschreiben. Sie können den Namen des Werts und den Wert selbst auswählen. Obwohl einige abenteuerlustige Benutzer eine Verwendung für dieses Element finden könnten, ist es hier hauptsächlich für Entwickler als grundlegende GUI gedacht, die sie beim Entwickeln neuer JMeter-Komponenten verwenden können.

Screenshot für das Control-Panel von Simple Config Element
Screenshot des Control-Panels von Simple Config Element

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Ja
Parametername
Der Name jedes Parameters. Diese Werte sind intern für die Funktionsweise von JMeter und werden im Allgemeinen nicht dokumentiert. Nur diejenigen, die mit dem Code vertraut sind, kennen diese Werte.
Ja
Parameterwert
Der Wert, der auf diesen Parameter angewendet werden soll.
Ja
^

MongoDB-Quellkonfiguration (VERALTET)

Erstellt eine MongoDB-Verbindung (von MongoDB Script Sampler verwendet) aus den bereitgestellten Verbindungseinstellungen. Jeder Thread bekommt seine eigene Verbindung. Der Verbindungskonfigurationsname wird vom JDBC-Sampler verwendet, um die entsprechende Verbindung auszuwählen.

Sie können dann mit diesem Code über das Element MongoDBHolder auf das Objekt com.mongodb.DB in Beanshell oder JSR223 Test Elements zugreifen

com.mongodb.DB importieren;
import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder;
DB db = MongoDBHolder.getDBFromSource("Wert der Eigenschaft MongoDB Source",
            "Wert der Eigenschaft Datenbankname");
…
    
Screenshot für das Control-Panel der MongoDB Source Config (VERALTET)
Screenshot des Control-Panels der MongoDB Source Config (VERALTET)

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für die Verbindungskonfiguration, die im Baum angezeigt wird.
Nein
Server-Adressliste
Mongo DB-Server
Ja
MongoDB-Quelle
Der Name der Variablen, an die die Verbindung gebunden ist.
Jeder Name muss anders sein. Bei zwei gleichnamigen Konfigurationselementen wird nur eines gespeichert.
Ja
Weiter versuchen
Wenn true , versucht der Treiber weiterhin, sich mit demselben Server zu verbinden, falls der Socket nicht hergestellt werden kann.
Es gibt eine maximale Zeitspanne für Wiederholungsversuche, die standardmäßig 15 Sekunden beträgt.
Dies kann nützlich sein, um zu vermeiden, dass einige Ausnahmen ausgelöst werden, wenn ein Server vorübergehend ausfällt, indem die Vorgänge blockiert werden.
Es kann auch nützlich sein, den Übergang zu einem neuen primären Knoten zu glätten (damit ein neuer primärer Knoten innerhalb der Wiederholungszeit gewählt wird).
Beachten Sie dies bei der Verwendung dieses Flags
  • Bei einem Replikatsatz versucht der Treiber für diese Zeit, eine Verbindung mit dem alten primären Knoten herzustellen, anstatt sofort auf den neuen umzuschalten
  • Dies verhindert nicht, dass bei Lese-/Schreibvorgängen auf dem Socket eine Ausnahme ausgelöst wird, die von der Anwendung behandelt werden muss.
Selbst wenn dieses Flag falsch ist, verfügt der Treiber bereits über Mechanismen, um unterbrochene Verbindungen automatisch neu zu erstellen und die Leseoperationen erneut zu versuchen.
Standard ist false .
Nein
Maximale Verbindungen pro Host
Nein
Verbindungszeitüberschreitung
Das Verbindungs-Timeout in Millisekunden.
Wird nur beim Aufbau einer neuen Verbindung verwendet. Socket.connect(java.net.SocketAddress, int)
Default ist 0 und bedeutet kein Timeout.
Nein
Maximale Wiederholungszeit
Die maximale Zeit in Millisekunden, die für den erneuten Versuch aufgewendet wird, eine Verbindung zum selben Server herzustellen.
Der Standardwert ist 0 , was bedeutet, dass die Standardeinstellung 15 Sekunden verwendet wird, wenn autoConnectRetry aktiviert ist.
Nein
Maximale Wartezeit
Die maximale Wartezeit in Millisekunden, die ein Thread warten darf, bis eine Verbindung verfügbar wird.
Der Standardwert ist 120.000 .
Nein
Socket-Timeout
Das Socket-Timeout in Millisekunden. Es wird für I/O-Socket-Lese- und Schreiboperationen verwendet . Socket.setSoTimeout(int) Der
Standardwert ist 0 und bedeutet kein Timeout.
Nein
Socket am Leben erhalten
Dieses Flag steuert die Socket-Keep-Alive-Funktion, die eine Verbindung durch Firewalls am Leben erhält. Socket.setKeepAlive(boolean) Der
Standardwert ist false .
Nein
ThreadsAllowedToBlockForConnectionMultiplier
Dieser Multiplikator, multipliziert mit der ConnectionsPerHost-Einstellung, ergibt die maximale Anzahl von Threads, die darauf warten können, dass eine Verbindung aus dem Pool verfügbar wird.
Alle weiteren Threads erhalten sofort eine Ausnahme.
Wenn beispielsweise connectionsPerHost 10 und threadsAllowedToBlockForConnectionMultiplier 5 ist , können bis zu 50 Threads auf eine Verbindung warten.
Standard ist 5 .
Nein
Anliegen schreiben: Sicher
Wenn wahr , verwendet der Treiber ein WriteConcern von WriteConcern.SAFE für alle Operationen.
Wenn w , wtimeout , fsync oder j angegeben sind, wird diese Einstellung ignoriert.
Standard ist false .
Nein
Anliegen schreiben: Fsync
Der fsync- Wert des globalen WriteConcern .
Standard ist false .
Nein
Anliegen schreiben: Auf Journal warten
Der j - Wert des globalen WriteConcern .
Standard ist false .
Nein
Anliegen schreiben: Auf Server warten
Der w - Wert des globalen WriteConcern .
Standard ist 0 .
Nein
Anliegen schreiben: Zeitüberschreitung warten
Der wtimeout- Wert des globalen WriteConcern .
Standard ist 0 .
Nein
Anliegen schreiben: Bei Fehler fortfahren
Wenn Stapeleinfügungen nach dem ersten Fehler fortgesetzt werden sollen
Nein
^
^

Schraubenverbindungskonfiguration

Erstellt einen Bolt-Verbindungspool (verwendet von Bolt Request Sampler) aus den bereitgestellten Verbindungseinstellungen.
Screenshot für das Control-Panel der Bolzenverbindungskonfiguration
Screenshot des Control-Panels der Bolzenverbindungskonfiguration

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Sampler, der in der Baumstruktur angezeigt wird.
Nein
Kommentare
Freitext für weitere Details.
Nein
Bolzen-URI
Der Datenbank-URI.
Ja
Nutzername
Benutzerkonto.
Nein
Passwort
Anmeldeinformationen des Benutzers.
Nein
^
^

18.5 Behauptungen

Assertionen werden verwendet, um zusätzliche Überprüfungen von Samplern durchzuführen, und werden nach jedem Sampler im gleichen Umfang verarbeitet. Um sicherzustellen, dass eine Assertion nur auf einen bestimmten Sampler angewendet wird, fügen Sie sie als untergeordnetes Element des Samplers hinzu.

Hinweis: Sofern nicht anders dokumentiert, werden Zusicherungen nicht auf Unterstichproben (untergeordnete Stichproben) angewendet, sondern nur auf die Elternstichprobe. Im Fall von JSR223- und BeanShell-Zusicherungen kann das Skript Teilstichproben mithilfe der Methode prev.getSubResults() abrufen , die ein Array von SampleResults zurückgibt. Das Array ist leer, wenn es keine gibt.

Behauptungen können entweder auf die Hauptstichprobe, die Unterstichproben oder beide angewendet werden. Standardmäßig wird die Assertion nur auf das Hauptsample angewendet. Wenn die Assertion diese Option unterstützt, wird es einen Eintrag auf der GUI geben, der wie folgt aussieht:

Geltungsbereich
Geltungsbereich
oder folgendes
Geltungsbereich
Geltungsbereich

Wenn ein Sub-Sampler fehlschlägt und die Hauptprobe erfolgreich ist, wird die Hauptprobe auf den Fehlerstatus gesetzt und ein Assertion-Ergebnis wird hinzugefügt. Wenn die JMeter-Variablenoption verwendet wird, wird davon ausgegangen, dass sie sich auf das Hauptsample bezieht, und jeder Fehler wird nur auf das Hauptsample angewendet.

Die Variable JMeterThread.last_sample_ok wird auf „ true “ oder „ false “ aktualisiert, nachdem alle Assertions für einen Sampler ausgeführt wurden.

Antwortzusicherung

Im Bedienfeld für die Antwortzusicherung können Sie Musterzeichenfolgen hinzufügen, die mit verschiedenen Feldern der Anfrage oder Antwort verglichen werden. Die Musterzeichenfolgen sind:

  • Enthält , Übereinstimmungen : Reguläre Ausdrücke im Perl5-Stil
  • Equals , Substring : Nur-Text, Groß-/Kleinschreibung beachten

Eine Zusammenfassung der Mustererkennungszeichen finden Sie unter ORO Perl5 Regular Expressions.

Sie können auch auswählen, ob erwartet wird, dass die Zeichenfolgen mit der gesamten Antwort übereinstimmen , oder ob die Antwort nur das Muster enthalten soll. Für zusätzliche Flexibilität können Sie jedem Controller mehrere Zusicherungen zuordnen.

Beachten Sie, dass die Musterzeichenfolge keine einschließenden Trennzeichen enthalten sollte, dh verwenden Sie Price: \d+ und nicht /Price: \d+/ .

Standardmäßig befindet sich das Muster im mehrzeiligen Modus, was bedeutet, dass das Metazeichen „ . “ nicht mit Zeilenumbruch übereinstimmt. Im mehrzeiligen Modus stimmen " ^ " und " $ " mit dem Anfang oder Ende einer beliebigen Zeile innerhalb der Zeichenfolge überein - nicht nur mit dem Anfang und Ende der gesamten Zeichenfolge. Beachten Sie, dass \s New-Line entspricht. Auch der Fall ist von Bedeutung. Um diese Einstellungen zu überschreiben, kann man die erweiterte reguläre Ausdruckssyntax verwenden . Zum Beispiel:

(?ich)
Fall ignorieren
(?s)
behandle das Ziel als einzelne Zeile, dh " . " passt auf eine neue Zeile
(?ist)
beide oben
Diese können überall im Ausdruck verwendet werden und bleiben in Kraft, bis sie überschrieben werden. Z.B
(?i)Apfel(?-i) Pie
passt zu „ Apfelkuchen “, aber nicht zu „ Apfelkuchen
(?s)Apple.+?Pie
entspricht Apple gefolgt von Pie , das sich möglicherweise in einer nachfolgenden Zeile befindet.
Apple(?s).+?Pie
wie oben, aber es ist wahrscheinlich klarer, die (?s) am Anfang zu verwenden.
Screenshot für das Control-Panel der Response-Assertion
Screenshot des Control-Panels der Response-Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname – Die Assertion muss auf den Inhalt der benannten Variablen angewendet werden
Ja
Feld zum Testen
Weist JMeter an, welches Feld der Anforderung oder Antwort getestet werden soll.
  • Textantwort – der Antworttext vom Server, dh der Hauptteil, ohne HTTP-Header.
  • Anforderungsdaten – der an den Server gesendete Anforderungstext, dh der Hauptteil, ohne HTTP-Header.
  • Antwortcode - z . B. 200
  • Antwortnachricht - zB OK
  • Antwort-Header , einschließlich Set-Cookie-Header (falls vorhanden)
  • Anfrage-Header
  • URL gesampelt
  • Dokument (Text) - der extrahierte Text aus verschiedenen Arten von Dokumenten über Apache Tika (siehe Abschnitt View Results Tree Document View).
Ja
Status ignorieren
Weist JMeter an, den Status anfänglich auf Erfolg zu setzen.

Der Gesamterfolg des Samples wird bestimmt, indem das Ergebnis der Assertion mit dem vorhandenen Response-Status kombiniert wird. Wenn das Kontrollkästchen „ Status ignorieren “ aktiviert ist, wird der Antwortstatus auf erfolgreich gesetzt, bevor die Assertion ausgewertet wird.

HTTP-Antworten mit Status in den Bereichen 4xx und 5xx werden normalerweise als nicht erfolgreich angesehen. Über die Checkbox „ Status ignorieren “ kann der Status erfolgreich gesetzt werden, bevor weitere Prüfungen durchgeführt werden. Beachten Sie, dass dadurch alle vorherigen Behauptungsfehler gelöscht werden, stellen Sie also sicher, dass dies nur für die erste Behauptung festgelegt wird.
Ja
Musterabgleichsregeln
Gibt an, wie der zu testende Text mit dem Muster verglichen wird.
  • Contains – true, wenn der Text das reguläre Ausdrucksmuster enthält
  • Übereinstimmungen – wahr, wenn der gesamte Text mit dem regulären Ausdrucksmuster übereinstimmt
  • Gleich - wahr, wenn der gesamte Text gleich der Musterzeichenfolge ist (Groß-/Kleinschreibung beachten)
  • Teilzeichenfolge – wahr, wenn der Text die Musterzeichenfolge enthält (Groß-/Kleinschreibung beachten)
Equals- und Substring- Muster sind einfache Strings, keine regulären Ausdrücke. NOT kann auch ausgewählt werden, um das Ergebnis der Prüfung zu invertieren. ODER Wenden Sie jede Behauptung in einer ODER-Kombination an (wenn 1 Muster zum Testen übereinstimmt, ist die Behauptung in Ordnung) anstelle von UND (alle Muster müssen übereinstimmen, damit die Behauptung in Ordnung ist).
Ja
Muster zum Testen
Eine Liste der zu testenden Muster. Jedes Muster wird separat getestet. Wenn ein Muster fehlschlägt, werden weitere Muster nicht geprüft. Es gibt keinen Unterschied zwischen dem Einrichten einer Behauptung mit mehreren Mustern und dem Einrichten mehrerer Behauptungen mit jeweils einem Muster (vorausgesetzt, die anderen Optionen sind gleich).
Wenn jedoch das Kontrollkästchen „Status ignorieren“ aktiviert ist, werden alle vorherigen Assertion-Fehler abgebrochen. Stellen Sie daher sicher, dass das Kontrollkästchen „Status ignorieren “ nur für die erste Assertion verwendet wird.
Ja
Benutzerdefinierte Fehlermeldung
Hier können Sie die Fehlermeldung definieren, die die generierte ersetzt
Nein

Das Muster ist ein regulärer Ausdruck im Perl5-Stil, jedoch ohne die einschließenden Klammern.

Behauptungsbeispiele
Abbildung 14 – Testplan
Abbildung 14 – Testplan
Abbildung 15 – Assertion-Bedienfeld mit Muster
Abbildung 15 – Assertion-Bedienfeld mit Muster
Abbildung 16 – Assertions-Listener-Ergebnisse (bestanden)
Abbildung 16 – Assertions-Listener-Ergebnisse (bestanden)
Abbildung 17 – Assertions-Listener-Ergebnisse (Fail)
Abbildung 17 – Assertions-Listener-Ergebnisse (Fail)
^

Dauerzusicherung

Die Duration Assertion testet, ob jede Antwort innerhalb einer bestimmten Zeit empfangen wurde. Jede Antwort, die länger als die angegebene Anzahl von Millisekunden (vom Benutzer angegeben) dauert, wird als fehlgeschlagene Antwort markiert.

Screenshot für das Control-Panel von Duration Assertion
Screenshot des Control-Panels von Duration Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Dauer in Millisekunden
Die maximale Anzahl von Millisekunden, die jede Antwort zulässt, bevor sie als fehlgeschlagen markiert wird.
Ja
^

Größenzusage

Die Größenzusicherung testet, ob jede Antwort die richtige Anzahl von Bytes enthält. Sie können angeben, dass die Größe gleich, größer, kleiner oder ungleich einer bestimmten Anzahl von Bytes sein soll.

Eine leere Antwort wird als 0 Byte behandelt und nicht als Fehler gemeldet.
Screenshot für das Control-Panel von Size Assertion
Screenshot des Control-Panels von Size Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - Behauptung gilt nur für die Hauptprobe
  • Nur Unterstichproben – Die Behauptung gilt nur für die Unterstichproben
  • Hauptprobe und Unterproben - Aussage gilt für beide.
  • Zu verwendender JMeter-Variablenname – Die Assertion muss auf den Inhalt der benannten Variablen angewendet werden
Ja
Größe in Bytes
Die Anzahl der Bytes, die zum Testen der Größe der Antwort (oder des Werts der JMeter-Variablen) verwendet werden sollen.
Ja
Art des Vergleichs
Ob getestet werden soll, ob die Antwort gleich, größer, kleiner oder ungleich der angegebenen Anzahl von Bytes ist.
Ja
^

XML-Assertion

Die XML-Assertion testet, ob die Antwortdaten aus einem formal korrekten XML-Dokument bestehen. Es validiert das XML nicht auf der Grundlage einer DTD oder eines Schemas oder führt eine weitere Validierung durch.

Screenshot für das Control-Panel der XML-Assertion
Screenshot des Control-Panels der XML-Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
^

BeanShell-Assertion

Die BeanShell-Assertion ermöglicht es dem Benutzer, die Assertion-Überprüfung mit einem BeanShell-Skript durchzuführen.

Ausführliche Informationen zur Verwendung von BeanShell finden Sie auf der BeanShell-Website.

Die Migration zu JSR223 Assertion + Groovy wird aufgrund der Leistung, der Unterstützung neuer Java-Funktionen und der eingeschränkten Wartung der BeanShell-Bibliothek dringend empfohlen.

Beachten Sie, dass für jedes unabhängige Vorkommen der Assertion in jedem Thread in einem Testskript ein anderer Interpreter verwendet wird, aber der gleiche Interpreter für nachfolgende Aufrufe verwendet wird. Das bedeutet, dass Variablen über Aufrufe der Assertion hinweg bestehen bleiben.

Alle Assertionen werden vom gleichen Thread wie der Sampler aufgerufen.

Wenn die Eigenschaft „ beanshell.assertion.init “ definiert ist, wird sie als Name einer Quelldatei an den Interpreter übergeben. Dies kann verwendet werden, um allgemeine Methoden und Variablen zu definieren. Es gibt eine Beispiel-Init-Datei im bin - Verzeichnis: BeanShellAssertion.bshrc

Das Testelement unterstützt die Methoden ThreadListener und TestListener . Diese sollten in der Initialisierungsdatei definiert werden. Beispieldefinitionen finden Sie in der Datei BeanShellListeners.bshrc .

Screenshot für das Control-Panel von BeanShell Assertion
Screenshot des Control-Panels von BeanShell Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird. Der Name wird in der Script-Variablen Label gespeichert
bsh.Interpreter vor jedem Aufruf zurücksetzen
Wenn diese Option ausgewählt ist, wird der Interpreter für jede Probe neu erstellt. Dies kann für einige lang laufende Skripte erforderlich sein. Weitere Informationen finden Sie unter Best Practices – BeanShell-Skripting .
Ja
Parameter
An das BeanShell-Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • bsh.args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende BeanShell-Skript enthält. Dies überschreibt das Skript. Der Dateiname wird in der Script-Variablen FileName gespeichert
Nein
Skript
Das auszuführende BeanShell-Skript. Der Rückgabewert wird ignoriert.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Es gibt ein Beispielskript, das Sie ausprobieren können.

Vor dem Aufruf des Skripts werden einige Variablen im BeanShell-Interpreter eingerichtet. Dies sind Zeichenfolgen, sofern nicht anders angegeben:

  • log - das Logger -Objekt. (zB) log.warn("Nachricht"[,Throwable])
  • SampleResult , prev - das SampleResult- Objekt; lesen Schreiben
  • Antwort - das Antwortobjekt; lesen Schreiben
  • Fehler - boolesch; lesen Schreiben; Wird verwendet, um den Assertion-Status festzulegen
  • Fehlernachricht - Zeichenfolge; lesen Schreiben; Wird verwendet, um die Assertion-Nachricht festzulegen
  • ResponseData - der Antworttext (Byte [])
  • ResponseCode - zB 200
  • ResponseMessage - zB OK
  • ResponseHeaders – enthält die HTTP-Header
  • RequestHeaders – enthält die an den Server gesendeten HTTP-Header
  • Probenetikett
  • SamplerData - Daten, die an den Server gesendet wurden
  • ctx - JMeterContext
  • vars - JMeterVariables - zB
    vars.get("VAR1");
    vars.put("VAR2","Wert");
    vars.putObject("OBJ1",neues Objekt());
  • Requisiten - JMeterProperties (Klasse java.util.Properties ) - zB
    props.get("START.HMS");
    props.put("PROP1","1234");

Die folgenden Methoden des Response-Objekts können nützlich sein:

  • setStopThread(boolesch)
  • setStopTest(boolesch)
  • Zeichenfolge getSampleLabel()
  • setSampleLabel(String)
^

MD5Hex-Assertion

Die MD5Hex-Assertion ermöglicht es dem Benutzer, den MD5-Hash der Antwortdaten zu überprüfen.

Screenshot für das Control-Panel von MD5Hex Assertion
Screenshot des Control-Panels von MD5Hex Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
MD5-Summe
32 Hex-Ziffern, die den MD5-Hash darstellen (Groß- und Kleinschreibung nicht signifikant)
Ja
^

HTML-Assertion

Die HTML-Assertion ermöglicht es dem Benutzer, die HTML-Syntax der Antwortdaten mit JTidy zu überprüfen.

Screenshot für das Control-Panel von HTML Assertion
Screenshot des Control-Panels von HTML Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Dokumenttyp
omit , auto , strict oder loose
Ja
Format
HTML , XHTML oder XML
Ja
Nur Fehler
Nur Fehler notieren?
Ja
Fehlerschwelle
Anzahl der zulässigen Fehler, bevor die Antwort als fehlgeschlagen eingestuft wird
Ja
Warnschwelle
Anzahl der zulässigen Warnungen, bevor die Antwort als fehlgeschlagen eingestuft wird
Ja
Dateiname
Name der Datei, in die der Bericht geschrieben wird
Nein
^

XPath-Assertion

Die XPath-Assertion testet ein Dokument auf Wohlgeformtheit, hat die Möglichkeit, gegen eine DTD zu validieren oder das Dokument durch JTidy zu schicken und auf einen XPath zu testen. Wenn dieser XPath existiert, ist die Behauptung wahr. Die Verwendung von " / " passt zu jedem wohlgeformten Dokument und ist der Standard-XPath-Ausdruck. Die Assertion unterstützt auch boolesche Ausdrücke wie " count(//*error)=2 ". Weitere Informationen zu XPath finden Sie unter http://www.w3.org/TR/xpath .

Einige Beispielausdrücke:
  • //title[text()='Text to match'] - passt <title>Text to match</title> irgendwo in der Antwort an
  • /title[text()='Text to match'] - Gleicht <title>Text to match</title> auf Stammebene in der Antwort ab
Screenshot für das Control-Panel von XPath Assertion
Screenshot des Control-Panels von XPath Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Verwenden Sie Tidy (toleranter Parser)
Verwenden Sie Tidy, dh seien Sie tolerant gegenüber XML/HTML-Fehlern
Ja
Ruhig
Setzt das Tidy Quiet-Flag
Wenn Tidy ausgewählt ist
Fehler melden
Wenn ein Tidy-Fehler auftritt, setzen Sie die Assertion entsprechend
Wenn Tidy ausgewählt ist
Warnungen anzeigen
Legt die Option Tidy showWarnings fest
Wenn Tidy ausgewählt ist
Verwenden Sie Namensräume
Sollten Namensräume eingehalten werden? (siehe Hinweis unten zu NAMESPACES)
Wenn Tidy nicht ausgewählt ist
XML validieren
Überprüfen Sie das Dokument anhand seines Schemas.
Wenn Tidy nicht ausgewählt ist
Leerzeichen ignorieren
Element-Leerzeichen ignorieren.
Wenn Tidy nicht ausgewählt ist
Externe DTDs abrufen
Wenn ausgewählt, werden externe DTDs geholt.
Wenn Tidy nicht ausgewählt ist
XPath-Assertion
XPath, der im Dokument übereinstimmen soll.
Ja
Behauptung umkehren (schlägt fehl, wenn die obigen Bedingungen erfüllt sind)
True, wenn ein XPath-Ausdruck nicht übereinstimmt oder false zurückgibt
Nein
Der nicht tolerante Parser kann ziemlich langsam sein, da er möglicherweise die DTD usw. herunterladen muss.
NAMESPACES
Als Umgehung für Namespace-Einschränkungen des Xalan XPath-Parsers (Implementierung, auf der JMeter basiert) müssen Sie:
  • Stellen Sie eine Eigenschaftendatei bereit (wenn Ihre Datei beispielsweise namespaces.properties heißt ), die Zuordnungen für die Namespace-Präfixe enthält:
    prefix1=http\://foo.apache.org
    prefix2=http\://toto.apache.org
    …
    
  • Verweisen Sie auf diese Datei in der Datei user.properties mit der Eigenschaft:
    xpath.namespace.config=Namespaces.Eigenschaften
^

XPath2-Assertion

Die XPath2-Assertion testet ein Dokument auf Wohlgeformtheit. Die Verwendung von " / " passt zu jedem wohlgeformten Dokument und ist der Standard-XPath2-Ausdruck. Die Assertion unterstützt auch boolesche Ausdrücke wie " count(//*error)=2 ".

Einige Beispielausdrücke:
  • //title[text()='Text to match'] - passt <title>Text to match</title> irgendwo in der Antwort an
  • /title[text()='Text to match'] - Gleicht <title>Text to match</title> auf Stammebene in der Antwort ab
Screenshot für das Control-Panel von XPath2 Assertion
Screenshot des Control-Panels von XPath2 Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Liste der Namensraum-Aliase
Liste der Namespace-Aliase, die Sie zum Analysieren des Dokuments verwenden möchten, eine Zeile pro Deklaration. Sie müssen sie wie folgt angeben: prefix=namespace . Diese Implementierung erleichtert die Verwendung von Namensräumen als mit der alten XPathExtractor-Version.
Nein
XPath2-Assertion
XPath, der im Dokument übereinstimmen soll.
Ja
Behauptung umkehren
Schlägt fehl, wenn xpath-Ausdruck wahr zurückgibt oder übereinstimmt, andernfalls erfolgreich
Nein
Namespace-Aliase-Liste
Liste der Namespace-Aliase Präfix = vollständiger Namespace (einer pro Zeile)
Nein
^

XML-Schema-Assertion

Die XML-Schema-Assertion ermöglicht dem Benutzer, eine Antwort anhand eines XML-Schemas zu validieren.

Screenshot für das Control-Panel der XML-Schema-Assertion
Screenshot des Control-Panels der XML-Schema-Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Dateiname
Geben Sie den Dateinamen des XML-Schemas an
Ja
^

JSR223-Assertion

Die JSR223-Assertion ermöglicht die Verwendung von JSR223-Skriptcode, um den Status des vorherigen Beispiels zu überprüfen.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Sprache
Die zu verwendende JSR223-Sprache
Ja
Parameter
An das Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende Skript enthält, wenn ein relativer Dateipfad verwendet wird, dann ist er relativ zu dem Verzeichnis, auf das durch die Systemeigenschaft " user.dir " verwiesen wird
Nein
Zwischenspeichern der Skriptkompilierung
Eindeutige Zeichenfolge im gesamten Testplan, die JMeter verwendet, um das Ergebnis der Skriptkompilierung zwischenzuspeichern , wenn die verwendete Sprache die kompilierbare Schnittstelle unterstützt (Groovy ist eine davon, Java, BeanShell und JavaScript sind es nicht)
Siehe Hinweis in JSR223 Sampler Java System Property, wenn Sie Groovy verwenden, ohne diese Option zu aktivieren
Nein
Skript
Das auszuführende Skript.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Die folgenden Variablen werden für die Verwendung durch das Skript eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • Label - das String-Label
  • Dateiname - der Name der Skriptdatei (falls vorhanden)
  • Parameter - die Parameter (als String)
  • args - die Parameter als String-Array (auf Whitespace aufgeteilt)
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
    vars.getObject("OBJ2");
    
  • Requisiten - (JMeterProperties - Klasse java.util.Properties ) - zB
    props.get("START.HMS");
    props.put("PROP1","1234");
    
  • SampleResult , prev - ( SampleResult ) - gibt Zugriff auf das vorherige SampleResult (falls vorhanden)
  • sampler - ( Sampler ) - gibt Zugriff auf den aktuellen Sampler
  • OUT - System.out - zB OUT.println("Nachricht")
  • AssertionResult – ( AssertionResult ) – das Assertion-Ergebnis

Das Skript kann verschiedene Aspekte des SampleResult überprüfen . Wenn ein Fehler erkannt wird, sollte das Skript AssertionResult.setFailureMessage("message") und AssertionResult.setFailure(true) verwenden .

Weitere Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

^

Behauptung vergleichen

Compare Assertion darf während des Lasttests nicht verwendet werden, da es viele Ressourcen (Speicher und CPU) verbraucht. Verwenden Sie es nur für funktionale Tests oder während des Debuggens und der Validierung von Testplänen.
Die Compare-Assertion kann verwendet werden, um Beispielergebnisse innerhalb ihres Geltungsbereichs zu vergleichen. Es können entweder die Inhalte oder die verstrichene Zeit verglichen werden, und die Inhalte können vor dem Vergleich gefiltert werden. Die Behauptungsvergleiche können im Vergleichs-Assertion-Visualizer angezeigt werden .
Screenshot für das Control-Panel von Compare Assertion
Screenshot des Control-Panels von Compare Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Inhalte vergleichen
Ob der Inhalt (Antwortdaten) verglichen werden soll oder nicht
Ja
Zeit vergleichen
Wenn der Wert ≥0 ist, prüfen Sie, ob die Reaktionszeitdifferenz nicht größer als der Wert ist. Dh wenn der Wert 0 ist , dann müssen die Reaktionszeiten exakt gleich sein.
Ja
Vergleichsfilter
Filter können verwendet werden, um Zeichenfolgen aus dem Inhaltsvergleich zu entfernen. Wenn die Seite zum Beispiel einen Zeitstempel hat, könnte dieser abgeglichen werden mit: " Zeit: \d\d:\d\d:\d\d " und ersetzt durch eine feste Dummy-Zeit " Zeit: HH:MM: S.S. ".
Nein
^

SMIME-Assertion

Die SMIME-Assertion kann verwendet werden, um die Beispielergebnisse aus dem Mail Reader Sampler auszuwerten. Diese Assertion überprüft, ob der Text einer Mime-Nachricht signiert ist oder nicht. Die Signatur kann auch gegen ein bestimmtes Unterzeichnerzertifikat verifiziert werden. Da dies eine Funktionalität ist, die von den meisten Benutzern nicht unbedingt benötigt wird, müssen zusätzliche JAR-Dateien heruntergeladen und zu JMETER_HOME/lib hinzugefügt werden :
  • bcmail-xxx.jar (BouncyCastle SMIME/CMS)
  • bcprov-xxx.jar (BouncyCastle-Anbieter)
Diese müssen von BouncyCastle heruntergeladen werden.

Wenn Sie den Mail Reader Sampler verwenden , stellen Sie bitte sicher, dass Sie " Nachricht mit MIME (roh) speichern" auswählen, da die Assertion die Nachricht sonst nicht korrekt verarbeiten kann.

Screenshot für das Control-Panel von SMIME Assertion
Screenshot des Control-Panels von SMIME Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Signatur überprüfen
Wenn diese Option ausgewählt ist, überprüft die Assertion , ob es sich um eine gültige Signatur handelt, gemäß den Parametern, die im Feld „Unterzeichnerzertifikat“ definiert sind.
Ja
Nachricht nicht signiert
Ob eine Signatur in der Nachricht erwartet werden soll oder nicht
Ja
Unterzeichnerzertifikat
No Check “ bedeutet, dass keine Signaturprüfung durchgeführt wird. " Werte prüfen " wird verwendet, um die Signatur anhand der bereitgestellten Eingaben zu überprüfen. Und „ Zertifikatsdatei “ führt die Überprüfung anhand einer bestimmten Zertifikatsdatei durch.
Ja
Nachrichtenposition
Der Mail-Sampler kann mehrere Nachrichten in einem einzigen Sample abrufen. Verwenden Sie dieses Feld, um anzugeben, welche Nachricht überprüft werden soll. Nachrichten werden von 0 an nummeriert , 0 bedeutet also die erste Nachricht. Negative Zahlen zählen ab der LETZTEN Nachricht; -1 bedeutet LETZTER, -2 bedeutet vorletzter usw.
Ja
^

JSON-Assertion

Mit dieser Komponente können Sie Validierungen von JSON-Dokumenten durchführen. Zuerst analysiert es den JSON und schlägt fehl, wenn die Daten nicht JSON sind. Zweitens wird nach dem angegebenen Pfad gesucht, wobei die Syntax von Jayway JsonPath 1.2.0 verwendet wird . Wenn der Pfad nicht gefunden wird, schlägt er fehl. Drittens, wenn der JSON-Pfad im Dokument gefunden wurde und eine Validierung anhand des erwarteten Werts angefordert wurde, wird eine Validierung durchgeführt. Für den Nullwert gibt es ein spezielles Kontrollkästchen in der GUI. Beachten Sie, dass, wenn der Pfad ein Array-Objekt zurückgibt, es iteriert wird und wenn der erwartete Wert gefunden wird, die Assertion erfolgreich ist. Um ein leeres Array zu validieren, verwenden Sie []Schnur. Wenn Patch ein Dictionary-Objekt zurückgibt, wird es vor dem Vergleich in eine Zeichenfolge konvertiert.

Screenshot für das Control-Panel von JSON Assertion
Screenshot des Control-Panels von JSON Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Stellen Sie sicher, dass der JSON-Pfad vorhanden ist
Pfad zum JSON-Element für Assert.
Ja
Wert zusätzlich behaupten
Aktivieren Sie das Kontrollkästchen, wenn Sie eine Bestätigung mit einem bestimmten Wert erstellen möchten
Nein
Übereinstimmung als regulärer Ausdruck
Aktivieren Sie das Kontrollkästchen, wenn Sie einen regulären Ausdruck verwenden möchten
Nein
Erwarteter Wert
Wert für Assert oder regulärer Ausdruck für Übereinstimmung
Nein
Erwarten Sie null
Aktivieren Sie das Kontrollkästchen, wenn Sie null erwarten
Nein
Behauptung umkehren (schlägt fehl, wenn die obigen Bedingungen erfüllt sind)
Behauptung umkehren (schlägt fehl, wenn die obigen Bedingungen erfüllt sind)
Nein
^

JSON JMESPath-Assertion

Mit dieser Komponente können Sie mithilfe von JMESPath eine Assertion für den Inhalt von JSON-Dokumenten durchführen . Zuerst analysiert es den JSON und schlägt fehl, wenn die Daten nicht JSON sind.
Zweitens wird unter Verwendung der JMESPath-Syntax nach dem angegebenen Pfad gesucht.
Wenn der Pfad nicht gefunden wird, schlägt er fehl.
Drittens, wenn der JMES-Pfad im Dokument gefunden wurde und eine Validierung gegen den erwarteten Wert angefordert wurde, wird diese zusätzliche Prüfung durchgeführt. Wenn Sie auf Nichtigkeit prüfen möchten, verwenden Sie das Kontrollkästchen Null erwarten .
Beachten Sie, dass der Pfad nicht null sein darf, da der Ausdruck JMESPath nicht kompiliert wird und ein Fehler auftritt. Auch wenn Sie eine leere oder null Antwort erwarten, müssen Sie einen gültigen JMESPath-Ausdruck einfügen.

Screenshot für das Control-Panel von JSON JMESPath Assertion
Screenshot des Control-Panels von JSON JMESPath Assertion

Parameter

Attribut
Beschreibung
Erforderlich
Stellen Sie sicher, dass JMESPath vorhanden ist
Überprüfen Sie, ob das JMESPath-zu-JSON-Element vorhanden ist
Ja
Wert zusätzlich behaupten
Aktivieren Sie das Kontrollkästchen, wenn Sie den extrahierten JMESPath mit einem erwarteten vergleichen
Nein
Übereinstimmung als regulärer Ausdruck
Aktivieren Sie das Kontrollkästchen, wenn Sie einen regulären Ausdruck für den Abgleich verwenden möchten
Nein
Erwarteter Wert
Wert, der für exakten Abgleich oder regulären Ausdruck verwendet werden soll, wenn Als regulären Ausdruck abgleichen aktiviert ist
Nein
Erwarten Sie null
Aktivieren Sie das Kontrollkästchen, wenn Sie erwarten, dass der Wert null ist
Nein
Behauptung umkehren (schlägt fehl, wenn die obigen Bedingungen erfüllt sind)
Behauptung umkehren (schlägt fehl, wenn die obigen Bedingungen erfüllt sind)
Nein
^
^

18.6 Timer

Seit Version 3.1 ist ein neues Feature (im Beta-Modus ab JMeter 3.1 und Änderungen vorbehalten) implementiert, das folgendes Feature bereitstellt.
Sie können einen Multiplikationsfaktor auf die von Random Timer berechneten Ruheverzögerungen anwenden, indem Sie die Eigenschaft timer.factor=float number festlegen , wobei float number eine positive Dezimalzahl ist.
JMeter multipliziert diesen Faktor mit der berechneten Schlafverzögerung. Diese Funktion kann verwendet werden von:
Beachten Sie, dass Timer vor jedem Sampler in dem Bereich verarbeitet werden, in dem sie sich befinden; Wenn es mehrere Timer im selben Bereich gibt, werden alle Timer vor jedem Sampler verarbeitet.
Timer werden nur in Verbindung mit einem Sampler verarbeitet. Ein Timer, der sich nicht im selben Bereich wie ein Sampler befindet, wird überhaupt nicht verarbeitet.
Um einen Timer auf einen einzelnen Sampler anzuwenden, fügen Sie den Timer als untergeordnetes Element des Samplers hinzu. Der Timer wird angewendet, bevor der Sampler ausgeführt wird. Um einen Timer nach einem Sampler anzuwenden, fügen Sie ihn entweder dem nächsten Sampler hinzu oder fügen Sie ihn als untergeordnetes Element eines Flow Control Action Samplers hinzu.

Konstanter Timer

Wenn Sie möchten, dass jeder Thread zwischen den Anforderungen gleich lang pausiert, verwenden Sie diesen Timer.

Screenshot für das Control-Panel von Constant Timer
Screenshot des Control-Panels von Constant Timer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird.
Nein
Thread-Verzögerung
Anzahl der zu pausierenden Millisekunden.
Ja
^

Gaußscher Zufallstimer

Dieser Zeitgeber hält jede Thread-Anforderung für eine zufällige Zeitspanne an, wobei die meisten Zeitintervalle in der Nähe eines bestimmten Werts liegen. Die Gesamtverzögerung ist die Summe aus dem Wert der Gaußschen Verteilung (mit Mittelwert 0,0 und Standardabweichung 1,0 ) mal dem von Ihnen angegebenen Abweichungswert und dem Offsetwert. Eine andere Möglichkeit, es zu erklären, in Gaußian Random Timer hat die Variation um einen konstanten Offset eine Gaußsche Kurvenverteilung.

Screenshot für das Control-Panel des Gaußschen Zufallstimers
Screenshot des Control-Panels von Gaußian Random Timer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird
Nein
Abweichung
Abweichung in Millisekunden.
Ja
Konstanter Verzögerungs-Offset
Anzahl der Millisekunden, die zusätzlich zur zufälligen Verzögerung angehalten werden sollen.
Ja
^

Einheitlicher Zufallstimer

Dieser Zeitgeber hält jede Thread-Anforderung für eine zufällige Zeitspanne an, wobei jedes Zeitintervall die gleiche Auftrittswahrscheinlichkeit hat. Die Gesamtverzögerung ist die Summe aus dem Zufallswert und dem Offset-Wert.

Screenshot für das Control-Panel des Uniform Random Timers
Screenshot des Control-Panels von Uniform Random Timer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird.
Nein
Maximale zufällige Verzögerung
Maximale zufällige Anzahl von Millisekunden zum Pausieren.
Ja
Konstanter Verzögerungs-Offset
Anzahl der Millisekunden, die zusätzlich zur zufälligen Verzögerung angehalten werden sollen.
Ja
^

Timer für konstanten Durchsatz

Dieser Timer führt variable Pausen ein, die berechnet werden, um den Gesamtdurchsatz (in Bezug auf Proben pro Minute) so nah wie möglich an einer bestimmten Zahl zu halten. Natürlich wird der Durchsatz geringer, wenn der Server nicht in der Lage ist, damit umzugehen, oder wenn andere Timer oder zeitraubende Testelemente dies verhindern.

Hinweis: Obwohl der Timer als Constant Throughput Timer bezeichnet wird, muss der Durchsatzwert nicht konstant sein. Er kann in Form einer Variablen oder eines Funktionsaufrufs definiert werden, und der Wert kann während eines Tests geändert werden. Der Wert kann auf verschiedene Arten geändert werden:

  • über eine Zählervariable
  • Verwenden einer __jexl3 , __groovy Funktion, um einen sich ändernden Wert bereitzustellen
  • Verwenden des Remote-BeanShell-Servers zum Ändern einer JMeter-Eigenschaft

Weitere Einzelheiten finden Sie unter Best Practices .

Beachten Sie, dass der Durchsatzwert während eines Tests nicht zu oft geändert werden sollte – es dauert eine Weile, bis der neue Wert wirksam wird.

Screenshot für das Control-Panel des Constant Throughput Timers
Screenshot des Control-Panels des Constant Throughput Timers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird.
Nein
Zieldurchsatz
Durchsatz, den der Timer zu generieren versuchen soll.
Ja
Berechnen Sie den Durchsatz basierend auf
  • nur dieser Thread - jeder Thread versucht, den Zieldurchsatz aufrechtzuerhalten. Der Gesamtdurchsatz ist proportional zur Anzahl aktiver Threads.
  • alle aktiven Threads in der aktuellen Thread-Gruppe – der Zieldurchsatz wird auf alle aktiven Threads in der Gruppe aufgeteilt. Jeder Thread wird je nach Bedarf verzögert, je nachdem, wann er zuletzt ausgeführt wurde.
  • alle aktiven Threads – der Zieldurchsatz wird auf alle aktiven Threads in allen Thread-Gruppen aufgeteilt. Jeder Thread wird je nach Bedarf verzögert, je nachdem, wann er zuletzt ausgeführt wurde. In diesem Fall benötigt jede andere Thread-Gruppe einen Zeitgeber für konstanten Durchsatz mit denselben Einstellungen.
  • alle aktiven Threads in der aktuellen Thread-Gruppe (gemeinsam genutzt) – wie oben, aber jeder Thread wird basierend darauf verzögert, wann ein Thread in der Gruppe zuletzt ausgeführt wurde.
  • alle aktiven Threads (gemeinsam) - wie oben; Jeder Thread wird basierend darauf verzögert, wann ein Thread zuletzt ausgeführt wurde.
Ja

Die gemeinsam genutzten und nicht gemeinsam genutzten Algorithmen zielen beide darauf ab, den gewünschten Durchsatz zu erzeugen, und werden ähnliche Ergebnisse erzeugen.
Der gemeinsam genutzte Algorithmus sollte eine genauere Gesamttransaktionsrate generieren.
Der nicht gemeinsam genutzte Algorithmus sollte eine gleichmäßigere Verteilung von Transaktionen über Threads hinweg erzeugen.

^

Präziser Durchsatz-Timer

Dieser Timer führt variable Pausen ein, die berechnet werden, um den Gesamtdurchsatz (z. B. in Bezug auf Proben pro Minute) so nah wie möglich an einer bestimmten Zahl zu halten. Natürlich wird der Durchsatz geringer, wenn der Server nicht in der Lage ist, damit umzugehen, oder wenn andere Timer, oder nicht genügend Threads oder zeitaufwändige Testelemente dies verhindern.

Obwohl der Timer als Precise Throughput Timer bezeichnet wird, zielt er nicht darauf ab, während des Tests in Intervallen von einer Sekunde genau dieselbe Anzahl von Abtastungen zu erzeugen.

Der Timer funktioniert am besten für Raten unter 36.000 Anfragen/Stunde, Ihre Laufleistung kann jedoch variieren (siehe Abschnitt Überwachung unten, wenn Ihre Ziele sehr unterschiedlich sind).

Beste Position eines Precise Throughput Timers in einem Testplan

Wie Sie vielleicht wissen, werden die Timer von allen Geschwistern und ihren untergeordneten Elementen geerbt. Aus diesem Grund ist einer der besten Orte für Precise Throughput Timer unter dem ersten Element in einer Testschleife. Sie könnten beispielsweise am Anfang einen Dummy-Sampler hinzufügen und den Timer unter diesem Dummy-Sampler platzieren

Zeitplan erstellt

Präziser Durchsatz-Timer modelliert den Poisson-Ankunftszeitplan . Dieser Zeitplan kommt oft im wirklichen Leben vor, daher ist es sinnvoll, ihn für Lasttests zu verwenden. Beispielsweise kann es natürlich vorkommen, dass nahe beieinander liegende Samples generiert werden, wodurch Parallelitätsprobleme aufgedeckt werden können. Selbst wenn es Ihnen gelingt, Poisson-Ankünfte mit Poisson Random Timer zu generieren , wäre dies anfällig für die unten aufgeführten Probleme. Beispielsweise können echte Poisson-Ankünfte eine unendlich lange Pause haben, und das ist für Lasttests nicht praktikabel. Beispielsweise könnten "normale" Poisson-Ankünfte mit einer Rate von 1 pro Sekunde zu 50 Abtastungen über einen 60 Sekunden langen Test führen.

Constant Throughput Timer konvergiert zur angegebenen Rate, erzeugt jedoch in der Regel Samples in gleichmäßigen Intervallen.

Hochlauf und Anlaufspitze

Sie könnten „Ramp-up“ oder ähnliche Ansätze verwenden, um eine Spitze beim Teststart zu vermeiden. Wenn Sie beispielsweise die Thread-Gruppe mit 100 Threads konfigurieren und die Ramp-up-Periode auf 0 (oder auf eine kleine Zahl) setzen, würden alle Threads gleichzeitig starten und es würde eine unerwünschte Lastspitze erzeugen . Wenn Sie Ramp-up Period zu hoch einstellen, kann es außerdem dazu führen, dass ganz am Anfang " zu wenige " Threads verfügbar sind, um die erforderliche Last zu erreichen.

Der Precise Throughput Timer plant die Ausführung auf zufällige Weise, sodass er zur Erzeugung einer konstanten Last verwendet werden kann, und es wird empfohlen, sowohl Ramp-up Period als auch Delay auf 0 zu setzen .

Mehrere Thread-Gruppen beginnen gleichzeitig

Eine Variation des Ramp-up- Problems kann auftreten, wenn der Testplan mehrere Thread-Gruppen enthält . Um dieses Problem abzumildern, fügt man normalerweise jeder Thread-Gruppe eine "zufällige" Verzögerung hinzu, sodass Threads zu unterschiedlichen Zeiten starten.

Precise Throughput Timer vermeidet dieses Problem, da es die Ausführung auf zufällige Weise plant. Sie müssen keine zusätzlichen zufälligen Verzögerungen hinzufügen, um Startspitzen abzumildern

Anzahl der Iterationen pro Stunde

Eine der grundlegenden Anforderungen besteht darin, N Proben pro M Minuten auszugeben. Lassen Sie es 60 Iterationen pro Stunde sein. Geschäftskunden würden es nicht verstehen, wenn Sie Lasttest-Ergebnisse mit 57 Ausführungen melden, „nur weil das Zufallsprinzip zufällig war“. Um 60 Iterationen pro Stunde zu generieren, müssen Sie wie folgt konfigurieren (andere Parameter können auf ihren Standardwerten belassen werden)

  • Zieldurchsatz (Proben) : 60
  • Durchlaufzeit (Sekunden) : 3600
  • Testdauer (Sekunden) : 3600

Die ersten beiden Optionen legen den Durchsatz fest. Auch wenn 60/3600, 30/1800 und 120/7200 genau das gleiche Lastniveau darstellen, wählen Sie dasjenige aus, das die Geschäftsanforderungen besser darstellt. Wenn beispielsweise "60 Proben pro Stunde" getestet werden sollen, stellen Sie 60/3600 ein. Wenn "1 Probe pro Minute" getestet werden soll, stellen Sie 1/60 ein.

Die Testdauer (Sekunden) ist vorhanden, damit der Timer eine genaue Anzahl von Proben für eine bestimmte Testdauer sicherstellt. Precise Throughput Timer erstellt einen Zeitplan für die Proben beim Teststart. Wenn Sie beispielsweise einen 5-Minuten-Test mit einem Durchsatz von 60 pro Stunde durchführen möchten, würden Sie die Testdauer (Sekunden) auf 300 festlegen. Dies ermöglicht eine unternehmensfreundliche Konfiguration des Durchsatzes. Hinweis: Die Testdauer (Sekunden) begrenzt die Testdauer nicht . Es ist nur ein Hinweis für den Timer.

Anzahl der Threads und Bedenkzeiten

Einer der häufigsten Fallstricke besteht darin, die Anzahl der Threads und die Bedenkzeiten anzupassen, um am Ende den gewünschten Durchsatz zu erzielen. Auch wenn es funktionieren könnte, führt dieser Ansatz dazu, dass viel Zeit für die Testläufe aufgewendet wird. Möglicherweise müssen Threads und Verzögerungen erneut angepasst werden, wenn eine neue Anwendungsversion eintrifft.

Der präzise Durchsatz-Timer ermöglicht es, ein Durchsatzziel festzulegen und es zu erreichen, unabhängig davon, wie gut die Anwendung funktioniert. Dazu erstellt Precise Throughput Timer beim Teststart einen Zeitplan und verwendet diesen Zeitplan dann zum Freigeben von Threads. Der Hauptgrund für die Bedenkzeiten und die Anzahl der Threads sollten geschäftliche Anforderungen sein, nicht der Wunsch, den Durchsatz irgendwie anzupassen.

Zum Beispiel, wenn Ihre Anwendung von Supporttechnikern in einem Callcenter verwendet wird. Angenommen, es gibt 2 Techniker im Callcenter und der angestrebte Durchsatz beträgt 1 Techniker pro Minute. Angenommen, der Techniker braucht 4 Minuten, um die Webseite zu lesen und zu überprüfen. Für diesen Fall sollten Sie 2 Threads in der Gruppe festlegen, 4 Minuten für Denkzeitverzögerungen verwenden und 1 pro Minute in Precise Throughput Timer angeben . Natürlich würde dies etwa 2 Proben/4 Minuten = 0,5 pro Minute ergeben, und das Ergebnis eines solchen Tests bedeutet „Sie brauchen mehr Support-Techniker in einem Callcenter“ oder „Sie müssen die Zeit reduzieren, die ein Techniker benötigt, um eine Aufgabe zu erfüllen ".

Testen niedriger Raten und wiederholbarer Tests

Das Testen mit niedrigen Raten (z. B. 60 pro Stunde) erfordert die Kenntnis des gewünschten Testprofils. Wenn Sie beispielsweise Last in gleichmäßigen Intervallen (z. B. 60 Sekunden dazwischen) einspeisen müssen, sollten Sie besser Constant Throughput Timer verwenden . Wenn Sie jedoch einen randomisierten Zeitplan benötigen (z. B. um echte Benutzer zu modellieren, die Berichte ausführen), dann ist Precise Throughput Timer Ihr Freund.

Beim Vergleich der Ergebnisse mehrerer Belastungstests ist es hilfreich, genau dasselbe Testprofil wiederholen zu können. Wenn zum Beispiel Aktion X (z. B. "Gewinnbericht") nach 5 Minuten nach Teststart aufgerufen wird, wäre es schön, dieses Muster für nachfolgende Testausführungen zu replizieren. Die Replikation des gleichen Lastmusters vereinfacht die Analyse der Testergebnisse (z. B. CPU%-Diagramm).

Random Seed (Änderung von 0 auf Random) ermöglicht die Steuerung des Seed-Werts, der von Precise Throughput Timer verwendet wird . Standardmäßig wird es mit 0 initialisiert , was bedeutet, dass für jede Testausführung ein zufälliger Seed verwendet wird. Wenn Sie ein wiederholbares Lademuster benötigen, ändern Sie Random Seed in einen zufälligen Wert. Der allgemeine Rat lautet, einen Seed ungleich Null zu verwenden, und „0 by default“ ist eine Implementierungsgrenze.

Hinweis: Wenn Sie mehrere Thread-Gruppen mit denselben Durchsatzraten und demselben Seed ungleich Null verwenden, kann dies dazu führen, dass die Samples gleichzeitig ungewollt ausgelöst werden.

Testen hoher Raten und/oder langer Testdauern

Der präzise Durchsatz-Timer generiert den Zeitplan und speichert ihn. In den meisten Fällen sollte dies kein Problem darstellen, denken Sie jedoch daran, dass Sie den Zeitplan möglicherweise kürzer als 1.000.000 Abtastungen halten möchten. Es dauert ungefähr 200 ms, um einen Zeitplan für 1.000.000 Abtastungen zu generieren, und der Zeitplan verbraucht 8 Megabyte im Heap. Die Erstellung eines Zeitplans für 10 Millionen Einträge dauert 1-2 Sekunden und verbraucht 80 Megabyte im Heap.

Wenn Sie beispielsweise einen zweiwöchigen Test mit einer Rate von 5.000 pro Stunde durchführen möchten, möchten Sie wahrscheinlich genau 5.000 Proben für jede Stunde haben. Sie können die Eigenschaft Testdauer (Sekunden) des Timers auf 1 Stunde einstellen. Dann würde der Timer einen Zeitplan mit 5.000 Proben für eine Stunde erstellen, und wenn der Zeitplan erschöpft ist, würde der Timer einen Zeitplan für die nächste Stunde generieren.

Gleichzeitig können Sie die Testdauer (Sekunden) auf 2 Wochen einstellen, und der Timer würde einen Zeitplan mit 168.000 Proben = 2 Wochen * 5.000 Proben/Stunde = 2*7*24*500 generieren . Die Generierung des Zeitplans würde ca. 30 ms dauern und etwas mehr als 1 Megabyte verbrauchen.

Burstige Ladung

Es kann Fälle geben, in denen alle Proben paarweise, dreifach usw. kommen sollten. Bestimmte Fälle können über Synchronizing Timer gelöst werden , Precise Throughput Timer hat jedoch eine native Möglichkeit, Anforderungen in Paketen auszugeben. Dieses Verhalten ist standardmäßig deaktiviert und wird mit den Einstellungen für "Sammelabfahrten" gesteuert

  • Anzahl der Threads im Stapel (Threads) . Gibt die Anzahl der Proben in einem Stapel an. Beachten Sie, dass die Gesamtzahl der Proben immer noch dem Zieldurchsatz entspricht
  • Verzögerung zwischen Threads im Stapel (ms) . Wenn zum Beispiel 42 eingestellt ist und die Stapelgröße 3 ist, dann werden Threads bei x, x+42ms, x+84ms abgehen

Variable Laderate

Obwohl Eigenschaftswerte (z. B. Durchsatz) über Ausdrücke definiert werden können, wird empfohlen, den Wert während des Tests mehr oder weniger gleich zu halten, da es einige Zeit dauert, den neuen Zeitplan neu zu berechnen, um neue Werte anzupassen.

Überwachung

Wenn der nächste Zeitplan generiert wird, protokolliert Precise Throughput Timer eine Nachricht an jmeter.log : 2018-01-04 17:34:03,635 INFO oajtConstantPoissonProcessGenerator: Generated 21 timings (... 20 required, rate 1.0, duration 20, exact lim 20000, i21) in 0 ms. First 15 events will be fired at: 1.1869653574244292 (+1.1869653574244292), 1.4691340403043207 (+0.2821686828798915), 3.638151706179226 (+2.169017665874905), 3.836357090410566 (+0.19820538423134026), 4.709330071408575 (+0.8729729809980085), 5.61330076999953 (+0.903970698590955), ... Dies zeigt, dass die Zeitplanerstellung 0 ms gedauert hat, und es zeigt absolute Zeitstempel in Sekunden. Im obigen Fall wurde die Rate auf 1 pro Sekunde eingestellt, und die tatsächlichen Zeitstempel wurden 1,2 Sekunden, 1,5 Sekunden, 3,6 Sekunden, 3,8 Sekunden, 4,7 Sekunden usw.

Screenshot für das Control-Panel von Precise Throughput Timer
Screenshot des Control-Panels von Precise Throughput Timer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird
Nein
Zieldurchsatz (in Stichproben pro „Durchsatzzeitraum“)
Maximale Anzahl von Samples, die Sie pro "Durchsatzzeitraum" erhalten möchten, einschließlich aller Threads in der Gruppe, von allen betroffenen Samplern.
Ja
Durchlaufzeit (Sekunden)
Durchlaufzeit. Wenn beispielsweise „Durchsatz“ auf 42 und „Durchsatzzeitraum“ auf 21 Sekunden eingestellt ist, erhalten Sie 2 Abtastungen pro Sekunde.
Ja
Testdauer (Sekunden)
Dies wird verwendet, um sicherzustellen, dass Sie während des Zeitrahmens „Testdauer“ Durchsatz*Dauer-Beispiele erhalten.
Ja
Anzahl der Threads im Stapel (Threads)
Wenn der Wert 1 überschreitet, verlassen mehrere Threads gleichzeitig den Timer. Der durchschnittliche Durchsatz entspricht immer noch dem "Durchsatz"-Wert.
Ja
Verzögerung zwischen Threads im Batch (ms)
Wenn zum Beispiel 42 eingestellt ist und die Stapelgröße 3 ist, dann werden Threads bei x, x+42ms, x+84ms abgehen.
Ja
Zufallsstartwert (Änderung von 0 auf zufällig)
Hinweis: Unterschiedliche Timer sollten besser unterschiedliche Seed-Werte haben. Constant Seed stellt sicher, dass der Timer bei jedem Teststart die gleichen Verzögerungen generiert. Der Wert "0" bedeutet, dass der Timer wirklich zufällig ist (nicht wiederholbar von einer Ausführung zur nächsten).
Ja
^

Timer synchronisieren

Der Zweck des SyncTimer besteht darin, Threads zu blockieren, bis die Anzahl X von Threads blockiert wurde, und dann werden sie alle auf einmal freigegeben. Ein SyncTimer kann somit an verschiedenen Stellen des Testplans große Momentanlasten erzeugen.

Screenshot für das Bedienfeld des Synchronisierungstimers
Screenshot der Systemsteuerung des Synchronisierungstimers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird.
Nein
Anzahl gleichzeitiger Benutzer, nach denen gruppiert werden soll
Anzahl der gleichzeitig freizugebenden Threads. Das Festlegen auf 0 entspricht dem Festlegen von Anzahl der Threads in der Thread-Gruppe.
Ja
Zeitüberschreitung in Millisekunden
Wenn der Wert auf 0 gesetzt ist, wartet der Timer darauf, dass die Anzahl der Threads den Wert in „ Anzahl der gleichzeitig zu gruppierenden Benutzer “ erreicht. Wenn größer als 0 , dann wartet der Timer bei max " Timeout in Millisekunden " auf die Anzahl der Threads. Wenn nach dem Timeout-Intervall die Anzahl der wartenden Benutzer nicht erreicht ist, hört der Timer auf zu warten. Standardmäßig 0
Nein
Wenn das Zeitlimit in Millisekunden auf 0 gesetzt ist und die Anzahl der Threads niemals " Anzahl der gleichzeitig zu gruppierenden Benutzer " erreicht, wird der Test unendlich angehalten. Nur ein erzwungener Stopp wird es stoppen. Das Festlegen von Timeout in Millisekunden ist eine Option, die in diesem Fall in Betracht gezogen werden sollte.
Synchronisieren von Timer-Blöcken nur innerhalb einer JVM. Wenn Sie also verteiltes Testen verwenden, stellen Sie sicher, dass Sie " Anzahl der gleichzeitig zu gruppierenden Benutzer " niemals auf einen Wert setzen, der höher ist als die Anzahl der Benutzer der enthaltenden Thread-Gruppe, wenn nur 1 Injektor berücksichtigt wird.
^

BeanShell-Timer

Der BeanShell Timer kann verwendet werden, um eine Verzögerung zu erzeugen.

Ausführliche Informationen zur Verwendung von BeanShell finden Sie auf der BeanShell-Website.

Die Migration zu JSR223 Timer + Groovy wird aufgrund der Leistung, der Unterstützung neuer Java-Funktionen und der eingeschränkten Wartung der BeanShell-Bibliothek dringend empfohlen.

Das Testelement unterstützt die Methoden ThreadListener und TestListener . Diese sollten in der Initialisierungsdatei definiert werden. Beispieldefinitionen finden Sie in der Datei BeanShellListeners.bshrc .

Screenshot für das Control-Panel von BeanShell Timer
Screenshot des Control-Panels von BeanShell Timer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird. Der Name wird in der Script-Variablen Label gespeichert
Nein
bsh.Interpreter vor jedem Aufruf zurücksetzen
Wenn diese Option ausgewählt ist, wird der Interpreter für jede Probe neu erstellt. Dies kann für einige lang laufende Skripte erforderlich sein. Weitere Informationen finden Sie unter Best Practices – BeanShell-Skripting .
Ja
Parameter
An das BeanShell-Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • bsh.args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende BeanShell-Skript enthält. Der Dateiname wird in der Skriptvariablen FileName gespeichert. Der Rückgabewert wird als Anzahl der zu wartenden Millisekunden verwendet.
Nein
Skript
Das BeanShell-Skript. Der Rückgabewert wird als Anzahl der zu wartenden Millisekunden verwendet.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Vor dem Aufruf des Skripts werden einige Variablen im BeanShell-Interpreter eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
    
  • props – (JMeterProperties – Klasse java.util.Properties) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - gibt Zugriff auf das vorherige SampleResult (falls vorhanden)

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

Wenn die Eigenschaft beanshell.timer.init definiert ist, wird diese zum Laden einer Initialisierungsdatei verwendet, mit der Methoden usw. zur Verwendung im BeanShell-Skript definiert werden können.

^

JSR223-Timer

Der JSR223-Timer kann verwendet werden, um eine Verzögerung mit einer JSR223-Skriptsprache zu generieren.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Skriptsprache
Die zu verwendende Skriptsprache.
Ja
Parameter
An das Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende Skript enthält, wenn ein relativer Dateipfad verwendet wird, dann ist er relativ zu dem Verzeichnis, auf das durch " user.dir " verwiesen wird. Systemeigenschaft Der Rückgabewert wird in eine lange Ganzzahl umgewandelt und als Anzahl der zu wartenden Millisekunden verwendet .
Nein
Zwischenspeichern der Skriptkompilierung
Eindeutige Zeichenfolge im gesamten Testplan, die JMeter verwendet, um das Ergebnis der Skriptkompilierung zwischenzuspeichern , wenn die verwendete Sprache die kompilierbare Schnittstelle unterstützt (Groovy ist eine davon, Java, Beanshell und Javascript sind es nicht)
Siehe Hinweis in JSR223 Sampler Java System Property, wenn Sie Groovy verwenden, ohne diese Option zu aktivieren
Nein
Skript
Das Drehbuch. Der Rückgabewert wird als Anzahl der zu wartenden Millisekunden verwendet.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Vor dem Aufruf des Skripts werden einige Variablen im Skriptinterpreter eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
  • props – (JMeterProperties – Klasse java.util.Properties) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • sampler - ( Sampler ) - der aktuelle Sampler
  • Label - der Name des Timers
  • FileName - der Dateiname (falls vorhanden)
  • OUT - System.aus

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

^

Poisson-Zufallstimer

Dieser Zeitgeber hält jede Thread-Anforderung für eine zufällige Zeitspanne an, wobei die meisten Zeitintervalle in der Nähe eines bestimmten Werts liegen. Die Gesamtverzögerung ist die Summe aus dem Poisson-verteilten Wert und dem Offset-Wert.

Hinweis: Wenn Sie Poisson-Ankünfte modellieren möchten, sollten Sie stattdessen den Precise Throughput Timer verwenden.

Screenshot für das Control-Panel von Poisson Random Timer
Screenshot des Control-Panels von Poisson Random Timer

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird
Nein
Lambda
Lambdawert in Millisekunden.
Ja
Konstanter Verzögerungs-Offset
Anzahl der Millisekunden, die zusätzlich zur zufälligen Verzögerung angehalten werden sollen.
Ja
^
^

18.7 Präprozessoren


Präprozessoren werden verwendet, um die Sampler in ihrem Geltungsbereich zu modifizieren.

Dieser Modifikator analysiert die HTML-Antwort vom Server und extrahiert Links und Formulare. Ein URL-Testmuster, das diesen Modifikator durchläuft, wird daraufhin untersucht, ob es mit einem der Links oder Formulare „übereinstimmt“, die aus der unmittelbar vorherigen Antwort extrahiert wurden. Es würde dann die Werte im URL-Testbeispiel durch entsprechende Werte aus dem übereinstimmenden Link oder Formular ersetzen. Reguläre Ausdrücke vom Typ Perl werden verwendet, um Übereinstimmungen zu finden.

Screenshot für das Control-Panel des HTML-Link-Parsers
Screenshot des Control-Panels des HTML-Link-Parsers
Übereinstimmungen werden unter Verwendung von Protokoll- , Host- , Pfad- und Parameternamen durchgeführt . Der Ziel-Sampler darf keine Parameter enthalten, die nicht in den Antwortlinks enthalten sind.
Wenn Sie verteiltes Testen verwenden, stellen Sie sicher, dass Sie den Modus wechseln (siehe jmeter.properties ), damit es kein Stripping-Modus ist, siehe Bug 56376
Spidering-Beispiel

Betrachten Sie ein einfaches Beispiel: Nehmen wir an, Sie möchten, dass JMeter durch Ihre Site "spidert" und auf einen Link nach dem anderen trifft, der aus dem von Ihrem Server zurückgegebenen HTML geparst wurde (dies ist eigentlich nicht die nützlichste Sache, aber es dient als gutes Beispiel). . Sie würden einen einfachen Controller erstellen und ihm den "HTML Link Parser" hinzufügen. Erstellen Sie dann eine HTTP-Anforderung und setzen Sie die Domäne auf " .* " und den Pfad ebenfalls. Dadurch stimmt Ihr Testmuster mit jedem Link überein, der auf den zurückgegebenen Seiten gefunden wird. Wenn Sie das Spidering auf eine bestimmte Domäne beschränken möchten, ändern Sie den Domänenwert in den gewünschten Wert. Dann werden nur Links zu dieser Domain verfolgt.

Umfragebeispiel

Ein nützlicheres Beispiel: Bei einer Web-Umfrageanwendung haben Sie möglicherweise eine Seite mit mehreren Umfrageoptionen als Optionsfelder, die der Benutzer auswählen kann. Nehmen wir an, die Werte der Umfrageoptionen sind sehr dynamisch - möglicherweise benutzergeneriert. Wenn Sie möchten, dass JMeter die Umfrage testet, können Sie entweder Testbeispiele mit fest codierten ausgewählten Werten erstellen oder den HTML-Link-Parser das Formular parsen lassen und eine zufällige Umfrageoption in Ihr URL-Testbeispiel einfügen. Befolgen Sie dazu das obige Beispiel, stellen Sie jedoch beim Konfigurieren der URL-Optionen Ihres Webtest-Controllers sicher, dass Sie " POST " als Methode auswählen. Geben Sie fest codierte Werte für die Domäne , den Pfad und alle zusätzlichen Formularparameter ein. Geben Sie dann für den eigentlichen Parameter des Optionsfelds den Namen ein (sagen wir es 'poll_choice ") und dann " .* " für den Wert dieses Parameters. Wenn der Modifizierer dieses URL-Testmuster untersucht, wird er feststellen, dass es mit dem Umfrageformular "übereinstimmt" (und es sollte daher mit keinem anderen Formular übereinstimmen). Sie haben alle anderen Aspekte des URL-Testbeispiels angegeben), und es ersetzt Ihre Formularparameter durch die übereinstimmenden Parameter aus dem Formular. Da der reguläre Ausdruck " .* " mit allem übereinstimmt, hat der Modifikator wahrscheinlich eine Liste von Optionsfeldern zur Auswahl. Es wird nach dem Zufallsprinzip ausgewählt und ersetzt den Wert in Ihrem URL-Testmuster. Bei jedem Testdurchgang wird ein neuer Zufallswert ausgewählt.

Abbildung 18 – Beispiel für eine Online-Umfrage
Abbildung 18 – Beispiel für eine Online-Umfrage
Beachten Sie unbedingt, dass Sie unmittelbar zuvor ein Testbeispiel erstellen müssen, das eine HTML-Seite mit den Links und Formularen zurückgibt, die für Ihr dynamisches Testbeispiel relevant sind.
^

Modifikator zum Umschreiben von HTTP-URLs

Dieser Modifikator funktioniert ähnlich wie der HTML-Link-Parser, außer dass er einen bestimmten Zweck hat, für den er einfacher zu verwenden und effizienter ist als der HTML-Link-Parser. Für Webanwendungen, die URL-Umschreibung verwenden, um Sitzungs-IDs anstelle von Cookies zu speichern, kann dieses Element auf ThreadGroup-Ebene angehängt werden, ähnlich wie der HTTP-Cookie-Manager . Geben Sie ihm einfach den Namen des Sitzungs-ID-Parameters, und er wird ihn auf der Seite finden und das Argument zu jeder Anfrage dieser ThreadGroup hinzufügen.

Alternativ kann dieser Modifikator an ausgewählte Anforderungen angehängt werden und ändert nur diese. Clevere Benutzer werden sogar feststellen, dass dieser Modifikator verwendet werden kann, um Werte zu erfassen, die dem HTML-Link-Parser entgehen .

Screenshot für das Control-Panel des HTTP-URL-Umschreibungsmodifikators
Screenshot der Systemsteuerung des HTTP-URL-Umschreibungsmodifikators

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element im Testbaum.
Nein
Name des Sitzungsarguments
Der Name des Parameters, der aus der vorherigen Antwort abgerufen werden soll. Dieser Modifikator findet den Parameter überall dort, wo er auf der Seite vorhanden ist, und greift den ihm zugewiesenen Wert auf, unabhängig davon, ob er sich in einem HREF oder einem Formular befindet.
Ja
Pfaderweiterung
Einige Web-Apps schreiben URLs um, indem sie ein Semikolon plus den Sitzungs-ID-Parameter anhängen. Aktivieren Sie dieses Kontrollkästchen, wenn dies der Fall ist.
Nein
Verwenden Sie keine Gleichheit in der Pfaderweiterung
Einige Web-Apps schreiben URLs um, ohne ein „ = “-Zeichen zwischen dem Parameternamen und dem Wert zu verwenden (z. B. Intershop Enfinity).
Nein
Verwenden Sie kein Fragezeichen in der Pfaderweiterung
Verhindert, dass die Abfragezeichenfolge in der Pfaderweiterung endet (z. B. Intershop Enfinity).
Nein
Sitzungs-ID zwischenspeichern?
Soll der Wert der Sitzungs-ID zur späteren Verwendung gespeichert werden, wenn die Sitzungs-ID nicht vorhanden ist?
Ja
URL-Codierung
URL-Codierungswert beim Schreiben des Parameters
Nein
Wenn Sie verteiltes Testen verwenden, stellen Sie sicher, dass Sie den Modus wechseln (siehe jmeter.properties ), damit es kein Stripping-Modus ist, siehe Bug 56376 .
^

Benutzerparameter

Ermöglicht dem Benutzer, Werte für Benutzervariablen anzugeben, die für einzelne Threads spezifisch sind.

Benutzervariablen können auch im Testplan angegeben werden, jedoch nicht spezifisch für einzelne Threads. In diesem Bereich können Sie eine Reihe von Werten für jede Benutzervariable angeben. Für jeden Thread wird der Variablen nacheinander einer der Werte aus der Reihe zugewiesen. Wenn es mehr Threads als Werte gibt, werden die Werte wiederverwendet. Dies kann beispielsweise verwendet werden, um jedem Thread eine eindeutige Benutzer-ID zuzuweisen. Benutzervariablen können in jedem Feld einer beliebigen JMeter-Komponente referenziert werden.

Die Variable wird angegeben, indem Sie auf die Schaltfläche „ Variable hinzufügen“ unten im Bedienfeld klicken und den Variablennamen in die Spalte „ Name: “ eingeben. Um der Serie einen neuen Wert hinzuzufügen, klicken Sie auf die Schaltfläche „ Benutzer hinzufügen “ und geben Sie den gewünschten Wert in die neu hinzugefügte Spalte ein.

Auf Werte kann in jeder Testkomponente in derselben Threadgruppe zugegriffen werden, indem die Funktionssyntax verwendet wird : ${variable} .

Siehe auch das Element CSV Data Set Config , das sich eher für eine große Anzahl von Parametern eignet

Screenshot für das Control-Panel der Benutzerparameter
Screenshot des Control-Panels der Benutzerparameter

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Einmal pro Iteration aktualisieren
Ein Flag, das angibt, ob das Benutzerparameterelement seine Variablen nur einmal pro Iteration aktualisieren soll. Wenn Sie Funktionen in das UP einbetten, benötigen Sie möglicherweise eine bessere Kontrolle darüber, wie oft die Werte der Variablen aktualisiert werden. Lassen Sie dieses Kontrollkästchen aktiviert, um sicherzustellen, dass die Werte jedes Mal durch die übergeordnete Steuerung des UP aktualisiert werden. Deaktivieren Sie das Kontrollkästchen, und das UP aktualisiert die Parameter für jede Probenanforderung, die innerhalb seines Bereichs erfolgt .
Ja
^

BeanShell-Vorprozessor

Der BeanShell PreProcessor ermöglicht es, beliebigen Code anzuwenden, bevor ein Sample genommen wird.

Ausführliche Informationen zur Verwendung von BeanShell finden Sie auf der BeanShell-Website.

Die Migration zu JSR223 PreProcessor +Groovy wird aufgrund der Leistung, der Unterstützung neuer Java-Funktionen und der eingeschränkten Wartung der BeanShell-Bibliothek dringend empfohlen.

Das Testelement unterstützt die Methoden ThreadListener und TestListener . Diese sollten in der Initialisierungsdatei definiert werden. Beispieldefinitionen finden Sie in der Datei BeanShellListeners.bshrc .

Screenshot für das Control-Panel des BeanShell PreProcessor
Screenshot des Control-Panels von BeanShell PreProcessor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird. Der Name wird in der Script-Variablen Label gespeichert
Nein
bsh.Interpreter vor jedem Aufruf zurücksetzen
Wenn diese Option ausgewählt ist, wird der Interpreter für jede Probe neu erstellt. Dies kann für einige lang laufende Skripte erforderlich sein. Weitere Informationen finden Sie unter Best Practices – BeanShell-Skripting .
Ja
Parameter
An das BeanShell-Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • bsh.args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende BeanShell-Skript enthält. Der Dateiname wird in der Script-Variablen FileName gespeichert
Nein
Skript
Das BeanShell-Skript. Der Rückgabewert wird ignoriert.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Vor dem Aufruf des Skripts werden einige Variablen im BeanShell-Interpreter eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
  • props – (JMeterProperties – Klasse java.util.Properties) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - gibt Zugriff auf das vorherige SampleResult (falls vorhanden)
  • sampler - ( Sampler )- gibt Zugriff auf den aktuellen Sampler

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

Wenn die Eigenschaft beanshell.preprocessor.init definiert ist, wird diese zum Laden einer Initialisierungsdatei verwendet, mit der Methoden usw. zur Verwendung im BeanShell-Skript definiert werden können.

^

JSR223-Präprozessor

Der JSR223 PreProcessor ermöglicht die Anwendung von JSR223-Skriptcode vor der Entnahme einer Stichprobe.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Sprache
Die zu verwendende JSR223-Sprache
Ja
Parameter
An das Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende Skript enthält, wenn ein relativer Dateipfad verwendet wird, dann ist er relativ zu dem Verzeichnis, auf das durch die Systemeigenschaft " user.dir " verwiesen wird
Nein
Zwischenspeichern der Skriptkompilierung
Eindeutige Zeichenfolge im gesamten Testplan, die JMeter verwendet, um das Ergebnis der Skriptkompilierung zwischenzuspeichern , wenn die verwendete Sprache die kompilierbare Schnittstelle unterstützt (Groovy ist eine davon, Java, Beanshell und Javascript sind es nicht)
Siehe Hinweis in JSR223 Sampler Java System Property, wenn Sie Groovy verwenden, ohne diese Option zu aktivieren
Nein
Skript
Das auszuführende Skript.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Die folgenden JSR223-Variablen werden für die Verwendung durch das Skript eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • Label - das String-Label
  • FileName - der Name der Skriptdatei (falls vorhanden)
  • Parameter - die Parameter (als String)
  • args - die Parameter als String-Array (auf Whitespace aufgeteilt)
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
    vars.getObject("OBJ2");
  • props – (JMeterProperties – Klasse java.util.Properties) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • sampler - ( Sampler )- gibt Zugriff auf den aktuellen Sampler
  • OUT - System.out - zB OUT.println("Nachricht")

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

^

JDBC-Präprozessor

Mit dem JDBC PreProcessor können Sie einige SQL-Anweisungen ausführen, kurz bevor ein Beispiel ausgeführt wird. Dies kann nützlich sein, wenn Ihr JDBC-Beispiel einige Daten in der Datenbank benötigt und Sie diese nicht in einer Setup-Thread-Gruppe berechnen können. Einzelheiten finden Sie unter JDBC-Anfrage .

Siehe folgenden Testplan:

Im verknüpften Testplan " Create Price Cut-Off " ruft der JDBC PreProcessor eine gespeicherte Prozedur auf, um einen Price Cut-Off in der Datenbank zu erstellen, diese wird von " Calculate Price Cut-Off " verwendet.

Erstellen Sie einen Preisabschneide-Präprozessor
Erstellen Sie einen Preisabschneide-Präprozessor
^

RegEx-Benutzerparameter

Ermöglicht die Angabe dynamischer Werte für HTTP-Parameter, die mithilfe regulärer Ausdrücke aus einer anderen HTTP-Anforderung extrahiert wurden. RegEx-Benutzerparameter sind spezifisch für einzelne Threads.

Mit dieser Komponente können Sie den Referenznamen eines regulären Ausdrucks angeben, der Namen und Werte von HTTP-Anforderungsparametern extrahiert. Gruppennummern regulärer Ausdrücke müssen für den Namen des Parameters und auch für den Wert des Parameters angegeben werden. Die Ersetzung erfolgt nur für Parameter in dem Sampler, der diese RegEx-Benutzerparameter verwendet, deren Name übereinstimmt

Screenshot für das Control-Panel der RegEx-Benutzerparameter
Screenshot des Control-Panels der RegEx-Benutzerparameter

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Referenzname für reguläre Ausdrücke
Name einer Referenz auf einen regulären Ausdruck
Ja
Parameternamen Regexp-Gruppennummer
Gruppennummer des regulären Ausdrucks, der zum Extrahieren von Parameternamen verwendet wird
Ja
Parameterwerte Regex-Gruppennummer
Gruppennummer des regulären Ausdrucks, der zum Extrahieren von Parameterwerten verwendet wird
Ja
Regexp-Beispiel

Angenommen, wir haben eine Anfrage, die ein Formular mit 3 Eingabeparametern zurückgibt, und wir möchten den Wert von 2 davon extrahieren, um sie in die nächste Anfrage einzufügen

  1. Regulären Ausdruck des Postprozessors für die erste HTTP-Anforderung erstellen
    • refName - setzt den Namen eines regulären Ausdrucks Expression ( listParams )
    • Regulärer Ausdruck – Ausdruck, der Attribute für Eingabenamen und Eingabewerte extrahiert Beispiel
      : input name="([^"]+?)" value="([^"]+?)"
    • Vorlage - wäre leer
    • match nr - -1 (um alle möglichen Matches zu durchlaufen)
  2. Erstellen Sie Präprozessor-RegEx-Benutzerparameter für die zweite HTTP-Anforderung
    • refName - setzt den gleichen Referenznamen eines regulären Ausdrucks, wäre in unserem Beispiel listParams
    • Parameternamen-Gruppennummer - Gruppennummer des regulären Ausdrucks für Parameternamen, wäre in unserem Beispiel 1
    • Gruppennummer der Parameterwerte - Gruppennummer des regulären Ausdrucks für Parameterwerte, wäre in unserem Beispiel 2

Siehe auch das Element Regular Expression Extractor , das zum Extrahieren von Parameternamen und -werten verwendet wird

^

Beispiel-Zeitüberschreitung

Dieser Pre-Processor plant eine Timer-Aufgabe, um eine Probe zu unterbrechen, wenn die Fertigstellung zu lange dauert. Das Timeout wird ignoriert, wenn es null oder negativ ist. Damit dies funktioniert, muss der Sampler Interruptible implementieren. Die folgenden Sampler sind dafür bekannt:
AJP, BeanShell, FTP, HTTP, Soap, AccessLog, MailReader, JMS Subscriber, TCPSampler, TestAction, JavaSampler

Das Testelement ist für den Einsatz vorgesehen, wo individuelle Timeouts wie Connection Timeout oder Response Timeout nicht ausreichen oder der Sampler keine Timeouts unterstützt. Das Timeout sollte ausreichend lang eingestellt werden, damit es bei normalen Tests nicht ausgelöst wird, aber kurz genug, um festgefahrene Samples zu unterbrechen.

[Standardmäßig verwendet JMeter ein Callable, um den Sampler zu unterbrechen. Dies wird im selben Thread wie der Timer ausgeführt. Wenn der Interrupt also lange dauert, kann dies die Verarbeitung nachfolgender Timeouts verzögern. Es wird nicht erwartet, dass dies ein Problem darstellt, aber bei Bedarf kann die Eigenschaft InterruptTimer.useRunnable auf „ true “ gesetzt werden , um einen separaten Runnable-Thread anstelle des Callable zu verwenden.]

Screenshot für das Control-Panel von Sample Timeout
Screenshot des Control-Panels von Sample Timeout

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für diesen Timer, der in der Baumstruktur angezeigt wird.
Nein
Beispiel-Zeitüberschreitung
Wenn die Probe länger dauert, wird sie unterbrochen.
Ja
^
^

18.8 Postprozessoren

Wie der Name schon sagt, werden Postprozessoren nach Samplern angewendet. Beachten Sie, dass sie auf alle Sampler im selben Bereich angewendet werden. Um sicherzustellen, dass ein Postprozessor nur auf einen bestimmten Sampler angewendet wird, fügen Sie ihn als untergeordnetes Element des Samplers hinzu.

Hinweis: Sofern nicht anders dokumentiert, werden Postprozessoren nicht auf Sub-Samples (untergeordnete Samples) angewendet, sondern nur auf das Parent-Sample. Im Fall von JSR223- und BeanShell-Postprozessoren kann das Skript Teilproben mithilfe der Methode prev.getSubResults() abrufen , die ein Array von SampleResults zurückgibt. Das Array ist leer, wenn es keine gibt.

Postprozessoren werden vor Assertionen ausgeführt, sodass sie keinen Zugriff auf Assertion-Ergebnisse haben und der Stichprobenstatus auch nicht die Ergebnisse von Assertions widerspiegelt. Wenn Sie Zugriff auf Assertionsergebnisse benötigen, versuchen Sie es stattdessen mit einem Listener. Beachten Sie auch, dass die Variable JMeterThread.last_sample_ok auf „ true “ oder „ false “ gesetzt wird, nachdem alle Assertions ausgeführt wurden.

Extraktor für reguläre Ausdrücke

Ermöglicht dem Benutzer das Extrahieren von Werten aus einer Serverantwort mithilfe eines regulären Ausdrucks vom Typ Perl. Als Postprozessor wird dieses Element nach jeder Beispielanforderung in seinem Geltungsbereich ausgeführt, wendet den regulären Ausdruck an, extrahiert die angeforderten Werte, generiert die Vorlagenzeichenfolge und speichert das Ergebnis im angegebenen Variablennamen.

Screenshot für das Control-Panel des Regular Expression Extractor
Screenshot der Systemsteuerung des Regular Expression Extractor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname - Die Extraktion soll auf den Inhalt der benannten Variablen angewendet werden
Der Abgleich wird der Reihe nach auf alle qualifizierenden Proben angewendet. Zum Beispiel, wenn es eine Hauptstichprobe und 3 Unterstichproben gibt, von denen jede eine einzige Übereinstimmung für die Regex enthält (dh insgesamt 4 Übereinstimmungen). Für Übereinstimmungsnummer = 3 , nur Unterstichproben, stimmt der Extraktor mit der 3. Unterstichprobe überein. Für Übereinstimmungsnummer = 3 , Hauptprobe und Unterproben gleicht der Extraktor die 2. Unterprobe ab ( 1. Übereinstimmung ist Hauptprobe). Bei Übereinstimmungsnummer = 0 oder negativ werden alle qualifizierenden Proben verarbeitet. Bei Übereinstimmungsnummer > 0 wird der Vergleich beendet, sobald genügend Übereinstimmungen gefunden wurden.
Ja
Zu prüfendes Feld
Folgende Felder können überprüft werden:
  • Body – der Text der Antwort, z. B. der Inhalt einer Webseite (ohne Kopfzeilen)
  • Body (ohne Escapezeichen) – der Text der Antwort, wobei alle Html-Escape-Codes ersetzt wurden. Beachten Sie, dass HTML-Escapezeichen ohne Berücksichtigung des Kontexts verarbeitet werden, sodass einige falsche Ersetzungen vorgenommen werden können.
    Beachten Sie, dass sich diese Option stark auf die Leistung auswirkt. Verwenden Sie sie daher nur, wenn es unbedingt erforderlich ist, und seien Sie sich ihrer Auswirkungen bewusst
  • Body as a Document - der extrahierte Text aus verschiedenen Arten von Dokumenten über Apache Tika (siehe Abschnitt View Results Tree Document View).
    Beachten Sie, dass die Option Body as a Document die Leistung beeinträchtigen kann, stellen Sie also sicher, dass sie für Ihren Test geeignet ist
  • Anforderungsheader – möglicherweise nicht für Nicht-HTTP-Beispiele vorhanden
  • Response Header – möglicherweise nicht vorhanden für Nicht-HTTP-Beispiele
  • URL
  • Antwortcode - z . B. 200
  • Antwortnachricht - zB OK
Header können für HTTP-Beispiele nützlich sein; bei anderen Probenarten ist sie möglicherweise nicht vorhanden.
Ja
Name der erstellten Variable
Der Name der JMeter-Variablen, in der das Ergebnis gespeichert werden soll. Beachten Sie auch, dass jede Gruppe als [refname]_g# gespeichert wird , wobei [refname] die Zeichenfolge ist, die Sie als Referenznamen eingegeben haben, und # die Gruppennummer ist, wobei Gruppe 0 die gesamte Übereinstimmung ist, Gruppe 1 die Übereinstimmung aus der erste Klammer usw.
Ja
Regulären Ausdruck
Der reguläre Ausdruck, der zum Analysieren der Antwortdaten verwendet wird. Dies muss mindestens einen Satz Klammern " () " enthalten, um einen Teil der Zeichenfolge zu erfassen, es sei denn, es wird die Gruppe $0$ verwendet . Schließen Sie den Ausdruck nicht in / / ein , es sei denn, Sie möchten diese Zeichen ebenfalls abgleichen.
Ja
Schablone
Die Vorlage, die zum Erstellen einer Zeichenfolge aus den gefundenen Übereinstimmungen verwendet wird. Dies ist eine beliebige Zeichenfolge mit speziellen Elementen, um innerhalb des regulären Ausdrucks auf Gruppen zu verweisen. Die Syntax zum Verweisen auf eine Gruppe lautet: ' $1$ ' zum Verweisen auf Gruppe 1 , ' $2$ ' zum Verweisen auf Gruppe 2 usw. $0$ bezieht sich auf alles, was der gesamte Ausdruck zutrifft.
Ja
Spiel Nr. (0 für Random)
Gibt an, welche Übereinstimmung verwendet werden soll. Der reguläre Ausdruck kann mehrfach übereinstimmen.
  • Verwenden Sie einen Wert von Null, um anzugeben, dass JMeter zufällig eine Übereinstimmung auswählen soll.
  • Eine positive Zahl N bedeutet, dass die n -te Übereinstimmung ausgewählt wird.
  • Negative Zahlen werden in Verbindung mit dem ForEach-Controller verwendet - siehe unten.
Ja
Standardwert
Wenn der reguläre Ausdruck nicht übereinstimmt, wird die Referenzvariable auf den Standardwert gesetzt. Dies ist besonders nützlich für Debugging-Tests. Wenn kein Standardwert angegeben ist, ist es schwierig festzustellen, ob der reguläre Ausdruck nicht übereinstimmte, das RE-Element nicht verarbeitet wurde oder vielleicht die falsche Variable verwendet wird.

Wenn Sie jedoch mehrere Testelemente haben, die dieselbe Variable setzen, möchten Sie die Variable möglicherweise unverändert lassen, wenn der Ausdruck nicht übereinstimmt. Entfernen Sie in diesem Fall den Standardwert, sobald das Debuggen abgeschlossen ist.

Nein, aber empfehlenswert
Leeren Standardwert verwenden
Wenn das Kontrollkästchen aktiviert und der Standardwert leer ist, setzt JMeter die Variable auf eine leere Zeichenfolge, anstatt sie nicht zu setzen. Wenn Sie also beispielsweise ${var} (wenn der Referenzname var ist) in Ihrem Testplan verwenden und der extrahierte Wert nicht gefunden wird, ist ${var} gleich einer leeren Zeichenfolge, anstatt ${var} zu enthalten , was möglicherweise der Fall ist nützlich sein, wenn der extrahierte Wert optional ist.
Nein

Wenn die Übereinstimmungsnummer auf eine nicht negative Zahl gesetzt ist und eine Übereinstimmung auftritt, werden die Variablen wie folgt festgelegt:

  • refName - der Wert der Vorlage
  • refName_g n , wobei n = 0 , 1 , 2 - die Gruppen für die Übereinstimmung
  • refName_g - die Anzahl der Gruppen in der Regex (außer 0 )

Wenn keine Übereinstimmung auftritt, wird die refName- Variable auf den Standardwert gesetzt (es sei denn, dieser ist nicht vorhanden). Außerdem werden die folgenden Variablen entfernt:

  • refName_g0
  • refName_g1
  • refName_g

Wenn die Übereinstimmungsnummer auf eine negative Zahl eingestellt ist, werden alle möglichen Übereinstimmungen in den Sampler-Daten verarbeitet. Die Variablen werden wie folgt gesetzt:

  • refName_matchNr – die Anzahl der gefundenen Übereinstimmungen; könnte 0 sein
  • refName_ n , wobei n = 1 , 2 , 3 usw. - die Zeichenfolgen, wie sie von der Vorlage generiert wurden
  • refName_ n _g m , wobei m = 0 , 1 , 2 - die Gruppen für Übereinstimmung n
  • refName - immer auf den Standardwert gesetzt
  • refName_g n - nicht gesetzt

Beachten Sie, dass die Variable refName in diesem Fall immer auf den Standardwert gesetzt ist und die zugehörigen Gruppenvariablen nicht gesetzt sind.

Siehe auch Response Assertion für einige Beispiele zur Angabe von Modifikatoren und für weitere Informationen zu regulären JMeter-Ausdrücken.

^

CSS-Selektor-Extraktor (früher: CSS/JQuery-Extraktor )

Ermöglicht dem Benutzer das Extrahieren von Werten aus einer Server-HTML-Antwort mithilfe einer CSS-Selektorsyntax. Als Postprozessor wird dieses Element nach jeder Beispielanforderung in seinem Geltungsbereich ausgeführt, wendet den CSS/JQuery-Ausdruck an, extrahiert die angeforderten Knoten, extrahiert den Knoten als Text oder Attributwert und speichert das Ergebnis im angegebenen Variablennamen.

Screenshot für das Control-Panel des CSS Selector Extractor
Screenshot der Systemsteuerung des CSS Selector Extractor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname - Die Extraktion soll auf den Inhalt der benannten Variablen angewendet werden
Der Abgleich wird der Reihe nach auf alle qualifizierenden Proben angewendet. Zum Beispiel, wenn es eine Hauptstichprobe und 3 Unterstichproben gibt, von denen jede eine einzige Übereinstimmung für die Regex enthält (dh insgesamt 4 Übereinstimmungen). Für Übereinstimmungsnummer = 3 , nur Unterstichproben, stimmt der Extraktor mit der 3. Unterstichprobe überein. Für Übereinstimmungsnummer = 3 , Hauptprobe und Unterproben gleicht der Extraktor die 2. Unterprobe ab ( 1. Übereinstimmung ist Hauptprobe). Bei Übereinstimmungsnummer = 0 oder negativ werden alle qualifizierenden Proben verarbeitet. Bei Übereinstimmungsnummer > 0 wird der Vergleich beendet, sobald genügend Übereinstimmungen gefunden wurden.
Ja
CSS-Selektor-Implementierung
2 Implementierungen für CSS/JQuery-basierte Syntax werden unterstützt: Wenn der Selektor auf leer gesetzt ist, wird die Standardimplementierung (JSoup) verwendet.
FALSCH
Name der erstellten Variable
Der Name der JMeter-Variablen, in der das Ergebnis gespeichert werden soll.
Ja
CSS/JQuery-Ausdruck
Der CSS/JQuery-Selektor, der verwendet wird, um Knoten aus den Antwortdaten auszuwählen. Selektoren, Selektorenkombinationen und Pseudoselektoren werden unterstützt, Beispiele:
  • E[foo] – ein E - Element mit einem „ foo “-Attribut
  • ancestor child - untergeordnete Elemente, die vom Vorfahren abstammen, z. B. .body p findet p Elemente irgendwo unter einem Block mit der Klasse " body "
  • :lt(n) - Elemente finden, deren Geschwisterindex (dh ihre Position im DOM-Baum relativ zu ihrem Elternteil) kleiner als n ist ; zB td:lt(3)
  • :contains(text) - findet Elemente, die den angegebenen Text enthalten . Bei der Suche wird die Groß-/Kleinschreibung nicht beachtet; zB p:contains(jsoup)
Weitere Einzelheiten zur Syntax finden Sie unter:
Ja
Attribut
Name des Attributs (gemäß HTML-Syntax), das aus Knoten extrahiert werden soll, die mit dem Selektor übereinstimmen. Wenn leer, wird der kombinierte Text dieses Elements und aller seiner untergeordneten Elemente zurückgegeben.
Dies ist die äquivalente Element#attr(name) -Funktion für JSoup, wenn ein Attribut gesetzt ist.
CSS-Extraktor mit festgelegtem Attributwert
CSS-Extraktor mit festgelegtem Attributwert

Wenn leer, entspricht dies der Funktion Element#text() für JSoup, wenn für das Attribut kein Wert festgelegt ist.
CSS-Extraktor ohne Attributsatz
CSS-Extraktor ohne Attributsatz
FALSCH
Spiel Nr. (0 für Random)
Gibt an, welche Übereinstimmung verwendet werden soll. Der CSS/JQuery-Selektor kann mehrfach übereinstimmen.
  • Verwenden Sie einen Wert von Null, um anzugeben, dass JMeter zufällig eine Übereinstimmung auswählen soll.
  • Eine positive Zahl N bedeutet, dass die n -te Übereinstimmung ausgewählt wird.
  • Negative Zahlen werden in Verbindung mit dem ForEach-Controller verwendet - siehe unten.
Ja
Standardwert
Wenn der Ausdruck nicht übereinstimmt, wird die Referenzvariable auf den Standardwert gesetzt. Dies ist besonders nützlich für Debugging-Tests. Wenn kein Standardwert angegeben ist, ist es schwierig festzustellen, ob der Ausdruck nicht übereinstimmte, das CSS/JQuery-Element nicht verarbeitet wurde oder vielleicht die falsche Variable verwendet wird.

Wenn Sie jedoch mehrere Testelemente haben, die dieselbe Variable setzen, möchten Sie die Variable möglicherweise unverändert lassen, wenn der Ausdruck nicht übereinstimmt. Entfernen Sie in diesem Fall den Standardwert, sobald das Debuggen abgeschlossen ist.

Nein, aber empfehlenswert
Leeren Standardwert verwenden
Wenn das Kontrollkästchen aktiviert und der Standardwert leer ist, setzt JMeter die Variable auf eine leere Zeichenfolge, anstatt sie nicht zu setzen. Wenn Sie also beispielsweise ${var} (wenn der Referenzname var ist) in Ihrem Testplan verwenden und der extrahierte Wert nicht gefunden wird, ist ${var} gleich einer leeren Zeichenfolge, anstatt ${var} zu enthalten , was möglicherweise der Fall ist nützlich sein, wenn der extrahierte Wert optional ist.
Nein

Wenn die Übereinstimmungsnummer auf eine nicht negative Zahl gesetzt ist und eine Übereinstimmung auftritt, werden die Variablen wie folgt festgelegt:

  • refName - der Wert der Vorlage

Wenn keine Übereinstimmung auftritt, wird die refName- Variable auf den Standardwert gesetzt (es sei denn, dieser ist nicht vorhanden).

Wenn die Übereinstimmungsnummer auf eine negative Zahl eingestellt ist, werden alle möglichen Übereinstimmungen in den Sampler-Daten verarbeitet. Die Variablen werden wie folgt gesetzt:

  • refName_matchNr – die Anzahl der gefundenen Übereinstimmungen; könnte 0 sein
  • refName_n , wobei n = 1 , 2 , 3 usw. - die Zeichenfolgen, wie sie von der Vorlage generiert wurden
  • refName - immer auf den Standardwert gesetzt

Beachten Sie, dass die Variable refName in diesem Fall immer auf den Standardwert gesetzt ist.

^

XPath2-Extraktor

Mit diesem Testelement kann der Benutzer mithilfe der Abfragesprache XPath2 Werte aus einer strukturierten Antwort – XML oder (X)HTML – extrahieren.
Screenshot für das Control-Panel von XPath2 Extractor
Screenshot der Systemsteuerung von XPath2 Extractor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname - Die Extraktion soll auf den Inhalt der benannten Variablen angewendet werden
Der XPath-Abgleich wird der Reihe nach auf alle qualifizierenden Proben angewendet, und alle übereinstimmenden Ergebnisse werden zurückgegeben.
Ja
Ganzes XPath-Fragment statt Textinhalt zurückgeben?
Wenn diese Option ausgewählt ist, wird das Fragment anstelle des Textinhalts zurückgegeben.
Zum Beispiel würde //title " <title>Apache JMeter</title> " statt " Apache JMeter " zurückgeben.
In diesem Fall würde //title/text() " Apache JMeter " zurückgeben.
Ja
Name der erstellten Variable
Der Name der JMeter-Variablen, in der das Ergebnis gespeichert werden soll.
Ja
XPath-Abfrage
Elementabfrage in der Sprache XPath 2.0. Kann mehr als eine Übereinstimmung zurückgeben.
Ja
Spiel Nr. (0 für Random)
Wenn die XPath-Pfad-Abfrage zu vielen Ergebnissen führt, können Sie auswählen, welche als Variablen extrahiert werden sollen:
  • 0 : bedeutet zufällig (Standardwert)
  • -1 bedeutet, dass alle Ergebnisse extrahiert werden, sie werden als <Variablenname> _N benannt (wobei N von 1 bis Anzahl der Ergebnisse reicht) .
  • X : bedeutet, das X -te Ergebnis zu extrahieren . Wenn dieses X größer als die Anzahl der Übereinstimmungen ist, wird nichts zurückgegeben. Der Standardwert wird verwendet
Nein
Standardwert
Zurückgegebener Standardwert, wenn keine Übereinstimmung gefunden wird. Es wird auch zurückgegeben, wenn der Knoten keinen Wert hat und die Fragmentoption nicht ausgewählt ist.
Jawohl
Liste der Namensraum-Aliase
Liste der Namespace-Aliase, die Sie zum Analysieren des Dokuments verwenden möchten, eine Zeile pro Deklaration. Sie müssen sie wie folgt angeben: prefix=namespace . Diese Implementierung erleichtert die Verwendung von Namensräumen als mit der alten XPathExtractor-Version.
Nein

Um die Verwendung in einem ForEach Controller zu ermöglichen , funktioniert es genauso wie der obige XPath Extractor

XPath2 Extractor bietet einige interessante Werkzeuge wie eine verbesserte Syntax und viel mehr Funktionen als in seiner ersten Version.

Hier sind einige Beispiele:

abs(/Buch/Seite[2])
extrahiert den 2. Absolutwert der Seite aus einem Buch
avg(/Bibliothek/Buch/Seite)
extrahiert die durchschnittliche Seitenzahl aus allen Büchern in den Bibliotheken
vergleichen(/buch[1]/seite[2],/buch[2]/seite[2])
Ganzzahliger Wert gleich 0 zurückgeben, wenn die 2. Seite des ersten Buches gleich der 2. Seite des 2. Buches ist, ansonsten -1 zurückgeben.

Weitere Informationen zu diesen Funktionen finden Sie unter xPath2-Funktionen

^

XPath-Extraktor

Dieses Testelement ermöglicht es dem Benutzer, Werte aus einer strukturierten Antwort – XML oder (X)HTML – mithilfe der XPath-Abfragesprache zu extrahieren.
Seit JMeter 5.0 sollten Sie XPath2 Extractor verwenden, da es eine bessere und einfachere Namensraumverwaltung, bessere Leistung und Unterstützung für XPath 2.0 bietet
Screenshot für das Control-Panel von XPath Extractor
Screenshot der Systemsteuerung von XPath Extractor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname - Die Extraktion soll auf den Inhalt der benannten Variablen angewendet werden
Der XPath-Abgleich wird der Reihe nach auf alle qualifizierenden Proben angewendet, und alle übereinstimmenden Ergebnisse werden zurückgegeben.
Ja
Verwenden Sie Tidy (toleranter Parser)
Wenn aktiviert, verwenden Sie Tidy, um die HTML-Antwort in XHTML zu parsen.
  • " Use Tidy " sollte für die HTML-Antwort aktiviert sein. Eine solche Antwort wird mit Tidy in gültiges XHTML (XML-kompatibles HTML) umgewandelt
  • " Tidy verwenden " sollte sowohl für XHTML- als auch für XML-Antworten (z. B. RSS) deaktiviert sein.
Für HTML ist CSS Selector Extractor die richtige und leistungsfähige Lösung. Verwenden Sie XPath nicht für HTML-Extraktionen.
Ja
Ruhig
Setzt das Tidy Quiet-Flag
Wenn Tidy ausgewählt ist
Fehler melden
Wenn ein Tidy-Fehler auftritt, setzen Sie die Assertion entsprechend
Wenn Tidy ausgewählt ist
Warnungen anzeigen
Legt die Option Tidy showWarnings fest
Wenn Tidy ausgewählt ist
Verwenden Sie Namensräume
Wenn diese Option aktiviert ist, verwendet der XML-Parser die Namespace-Auflösung. (siehe Hinweis unten zu NAMESPACES) Beachten Sie, dass derzeit nur Namespaces erkannt werden, die im Root-Element deklariert sind. Siehe unten für die Benutzerdefinition zusätzlicher Arbeitsbereichsnamen.
Wenn Tidy nicht ausgewählt ist
XML validieren
Überprüfen Sie das Dokument anhand seines Schemas.
Wenn Tidy nicht ausgewählt ist
Leerzeichen ignorieren
Element-Leerzeichen ignorieren.
Wenn Tidy nicht ausgewählt ist
Externe DTDs abrufen
Wenn ausgewählt, werden externe DTDs geholt.
Wenn Tidy nicht ausgewählt ist
Ganzes XPath-Fragment statt Textinhalt zurückgeben?
Wenn diese Option ausgewählt ist, wird das Fragment anstelle des Textinhalts zurückgegeben.
Zum Beispiel würde //title " <title>Apache JMeter</title> " statt " Apache JMeter " zurückgeben.
In diesem Fall würde //title/text() " Apache JMeter " zurückgeben.
Ja
Name der erstellten Variable
Der Name der JMeter-Variablen, in der das Ergebnis gespeichert werden soll.
Ja
XPath-Abfrage
Elementabfrage in der Sprache XPath. Kann mehr als eine Übereinstimmung zurückgeben.
Ja
Spiel Nr. (0 für Random)
Wenn die XPath-Pfad-Abfrage zu vielen Ergebnissen führt, können Sie auswählen, welche als Variablen extrahiert werden sollen:
  • 0 : bedeutet zufällig
  • -1 bedeutet, alle Ergebnisse zu extrahieren (Standardwert), sie werden als <Variablenname> _N benannt (wobei N von 1 bis Anzahl der Ergebnisse geht)
  • X : bedeutet, das X -te Ergebnis zu extrahieren . Wenn dieses X größer als die Anzahl der Übereinstimmungen ist, wird nichts zurückgegeben. Der Standardwert wird verwendet
Nein
Standardwert
Zurückgegebener Standardwert, wenn keine Übereinstimmung gefunden wird. Es wird auch zurückgegeben, wenn der Knoten keinen Wert hat und die Fragmentoption nicht ausgewählt ist.

Um die Verwendung in einem ForEach Controller zu ermöglichen , werden die folgenden Variablen bei der Rückgabe gesetzt:

  • refName - auf erste (oder einzige) Übereinstimmung gesetzt; wenn keine Übereinstimmung, dann auf Standard setzen
  • refName_matchNr - auf Anzahl der Übereinstimmungen gesetzt (kann 0 sein )
  • refName_n - n = 1 , 2 , 3 usw. Auf die 1. , 2., 3. Übereinstimmung usw. setzen.
Hinweis: Die nächste Variable refName_n wird auf null gesetzt – zB wenn es 2 Übereinstimmungen gibt, wird refName_3 auf null gesetzt , und wenn es keine Übereinstimmungen gibt, wird refName_1 auf null gesetzt .

XPath ist eine Abfragesprache, die hauptsächlich auf XSLT-Transformationen ausgerichtet ist. Es ist jedoch auch als generische Abfragesprache für strukturierte Daten nützlich. Weitere Informationen finden Sie unter XPath -Referenz oder XPath-Spezifikation . Hier sind einige Beispiele:

/html/head/titel
extrahiert das Titelelement aus der HTML-Antwort
/buch/seite[2]
extrahiert 2. Seite aus einem Buch
/Buchseite
extrahiert alle Seiten aus einem Buch
//form[@name='countryForm']//select[@name='country']/option[text()='Tschechische Republik'])/@value
extrahiert das Wertattribut des Optionselements, das mit dem Text „ Tschechische Republik “ innerhalb des Auswahlelements mit dem Namensattribut „ Land “ innerhalb des Formulars mit dem Namensattribut „ LandForm “ übereinstimmt
Wenn " Tidy verwenden " aktiviert ist, kann das resultierende XML-Dokument leicht von der ursprünglichen HTML-Antwort abweichen:
  • Alle Element- und Attributnamen werden in Kleinbuchstaben umgewandelt
  • Tidy versucht, falsch verschachtelte Elemente zu korrigieren. Zum Beispiel - das ursprüngliche (falsche) ul/font/li wird zum korrekten ul/li/font
Weitere Informationen finden Sie auf der Tidy -Homepage .
NAMESPACES
Als Umgehung für Namespace-Einschränkungen des Xalan XPath-Parsers (Implementierung, auf der JMeter basiert) müssen Sie:
  • Stellen Sie eine Eigenschaftendatei bereit (wenn Ihre Datei beispielsweise namespaces.properties heißt ), die Zuordnungen für die Namespace-Präfixe enthält:
    prefix1=http\://foo.apache.org
    prefix2=http\://toto.apache.org
    …
    
  • Verweisen Sie auf diese Datei in der Datei user.properties mit der Eigenschaft:
    xpath.namespace.config=Namespaces.Eigenschaften

//meinnamespace:tagname
//*[lokaler-name()='tagname' und namespace-uri()='uri-for-namespace']
uri-für-namespace meinnamespace
^

JSON JMESPath-Extraktor

Mit diesem Testelement kann der Benutzer mithilfe der Abfragesprache JMESPath Werte aus einer strukturierten Antwort – XML oder (X)HTML – extrahieren.
Screenshot für das Control-Panel von JSON JMESPath Extractor
Screenshot des Control-Panels von JSON JMESPath Extractor
Im XPATH-Extraktor unterstützen wir das gleichzeitige Extrahieren mehrerer xpaths, aber im JMES-Extraktor kann jeweils nur ein JMES-Ausdruck eingegeben werden.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname - Die Extraktion soll auf den Inhalt der benannten Variablen angewendet werden
Ja
Name der erstellten Variable
Der Name der JMeter-Variablen, in der das Ergebnis gespeichert werden soll.
Ja
JMESPath-Ausdrücke
Elementabfrage in der Abfragesprache JMESPath. Kann das übereinstimmende Ergebnis zurückgeben.
Ja
Spiel Nr. (0 für Random)
Wenn die JMESPath-Abfrage zu vielen Ergebnissen führt, können Sie auswählen, welche als Variablen extrahiert werden sollen:
  • 0 : bedeutet zufällig
  • -1 bedeutet, alle Ergebnisse zu extrahieren (Standardwert), sie werden als <Variablenname> _N benannt (wobei N von 1 bis Anzahl der Ergebnisse geht)
  • X : bedeutet, das X -te Ergebnis zu extrahieren . Wenn dieses X größer als die Anzahl der Übereinstimmungen ist, wird nichts zurückgegeben. Der Standardwert wird verwendet
Nein
Standardwert
Zurückgegebener Standardwert, wenn keine Übereinstimmung gefunden wird. Es wird auch zurückgegeben, wenn der Knoten keinen Wert hat und die Fragmentoption nicht ausgewählt ist.

JMESPath ist eine Abfragesprache für JSON. Es ist in einer ABNF-Grammatik mit vollständiger Spezifikation beschrieben. Dadurch wird sichergestellt, dass die Sprachsyntax genau definiert ist. Weitere Informationen finden Sie in der JMESPath -Referenz . Hier sind auch einige Beispiele JMESPath Example .

^

Aktionshandler für Ergebnisstatus

Dieses Testelement ermöglicht es dem Benutzer, den Thread oder den gesamten Test zu stoppen, wenn der entsprechende Sampler fehlgeschlagen ist.
Screenshot für das Bedienfeld des Ergebnisstatus-Aktionshandlers
Screenshot des Bedienfelds des Ergebnisstatus-Aktionshandlers

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nach einem Sampler-Fehler zu ergreifende Aktion
Legt fest, was passiert, wenn ein Sampler-Fehler auftritt, entweder weil das Sample selbst fehlgeschlagen ist oder eine Assertion fehlgeschlagen ist. Die Auswahlmöglichkeiten sind:
  • Fortfahren - Ignorieren Sie den Fehler und fahren Sie mit dem Test fort
  • Starte nächste Thread-Schleife – führt keine Abtaster aus, die dem fehlerhaften Abtaster für die aktuelle Iteration folgen, und startet die Schleife bei der nächsten Iteration neu
  • Thread stoppen – aktueller Thread wird beendet
  • Test stoppen – der gesamte Test wird am Ende aller aktuellen Proben gestoppt.
  • Test jetzt stoppen – Der gesamte Test wird abrupt beendet. Eventuell laufende Sampler werden nach Möglichkeit unterbrochen.
Nein
^

BeanShell-Postprozessor

Der BeanShell PreProcessor ermöglicht die Anwendung von beliebigem Code nach der Entnahme eines Samples.

BeanShell Post-Processor ignoriert Proben mit Null-Längen-Ergebnisdaten nicht mehr

Ausführliche Informationen zur Verwendung von BeanShell finden Sie auf der BeanShell-Website.

Die Migration zu JSR223 PostProcessor +Groovy wird aufgrund der Leistung, der Unterstützung neuer Java-Funktionen und der eingeschränkten Wartung der BeanShell-Bibliothek dringend empfohlen.

Das Testelement unterstützt die Methoden ThreadListener und TestListener . Diese sollten in der Initialisierungsdatei definiert werden. Beispieldefinitionen finden Sie in der Datei BeanShellListeners.bshrc .

Screenshot für das Control-Panel von BeanShell PostProcessor
Screenshot des Control-Panels von BeanShell PostProcessor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird. Der Name wird in der Script-Variablen Label gespeichert
Nein
bsh.Interpreter vor jedem Aufruf zurücksetzen
Wenn diese Option ausgewählt ist, wird der Interpreter für jede Probe neu erstellt. Dies kann für einige lang laufende Skripte erforderlich sein. Weitere Informationen finden Sie unter Best Practices – BeanShell-Skripting .
Ja
Parameter
An das BeanShell-Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • bsh.args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende BeanShell-Skript enthält. Der Dateiname wird in der Script-Variablen FileName gespeichert
Nein
Skript
Das BeanShell-Skript. Der Rückgabewert wird ignoriert.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Die folgenden BeanShell-Variablen werden für die Verwendung durch das Skript eingerichtet:

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
  • props – (JMeterProperties – Klasse java.util.Properties) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - gibt Zugriff auf das vorherige SampleResult
  • data - (Byte []) - bietet Zugriff auf die aktuellen Beispieldaten

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

Wenn die Eigenschaft beanshell.postprocessor.init definiert ist, wird diese zum Laden einer Initialisierungsdatei verwendet, mit der Methoden usw. zur Verwendung im BeanShell-Skript definiert werden können.

^

JSR223-Postprozessor

Der JSR223 PostProcessor ermöglicht die Anwendung von JSR223-Skriptcode nach der Entnahme eines Samples.

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Sprache
Die zu verwendende JSR223-Sprache
Ja
Parameter
An das Skript zu übergebende Parameter. Die Parameter werden in folgenden Variablen gespeichert:
  • Parameter - Zeichenfolge, die die Parameter als einzelne Variable enthält
  • args - String-Array mit Parametern, aufgeteilt auf Leerzeichen
Nein
Skriptdatei
Eine Datei, die das auszuführende Skript enthält, wenn ein relativer Dateipfad verwendet wird, dann ist er relativ zu dem Verzeichnis, auf das durch die Systemeigenschaft " user.dir " verwiesen wird
Nein
Zwischenspeichern der Skriptkompilierung
Eindeutige Zeichenfolge im gesamten Testplan, die JMeter verwendet, um das Ergebnis der Skriptkompilierung zwischenzuspeichern , wenn die verwendete Sprache die kompilierbare Schnittstelle unterstützt (Groovy ist eine davon, Java, Beanshell und Javascript sind es nicht)
Siehe Hinweis in JSR223 Sampler Java System Property, wenn Sie Groovy verwenden, ohne diese Option zu aktivieren
Nein
Skript
Das auszuführende Skript.
Ja (sofern keine Skriptdatei bereitgestellt wird)

Vor dem Aufruf des Skripts werden einige Variablen eingerichtet. Beachten Sie, dass dies JSR223-Variablen sind - dh sie können direkt im Skript verwendet werden.

  • log - ( Logger ) - kann verwendet werden, um in die Protokolldatei zu schreiben
  • Label - das String-Label
  • FileName - der Name der Skriptdatei (falls vorhanden)
  • Parameter - die Parameter (als String)
  • args - die Parameter als String-Array (auf Whitespace aufgeteilt)
  • ctx – ( JMeterContext ) – gibt Zugriff auf den Kontext
  • vars - ( JMeterVariables ) - gibt Lese-/Schreibzugriff auf Variablen:
    vars.get (Schlüssel);
    vars.put (Schlüssel, Wert);
    vars.putObject("OBJ1",neues Objekt());
    vars.getObject("OBJ2");
  • props – (JMeterProperties – Klasse java.util.Properties) – zB props.get("START.HMS"); props.put("PROP1","1234");
  • prev - ( SampleResult ) - gibt Zugriff auf das vorherige SampleResult (falls vorhanden)
  • sampler - ( Sampler )- gibt Zugriff auf den aktuellen Sampler
  • OUT - System.out - zB OUT.println("Nachricht")

Einzelheiten zu allen Methoden, die für jede der oben genannten Variablen verfügbar sind, finden Sie im Javadoc

^

JDBC-Postprozessor

Mit dem JDBC PostProcessor können Sie einige SQL-Anweisungen direkt nach der Ausführung eines Beispiels ausführen. Dies kann nützlich sein, wenn Ihr JDBC-Beispiel einige Daten ändert und Sie den Status auf den Stand vor der Ausführung des JDBC-Beispiels zurücksetzen möchten.

Im verknüpften Testplan "JDBC PostProcessor" ruft der JDBC PostProcessor eine gespeicherte Prozedur auf, um den vom PreProcessor erstellten Price Cut-Off aus der Datenbank zu löschen.

JDBC-Postprozessor
JDBC-Postprozessor
^

JSON-Extraktor

Mit dem JSON PostProcessor können Sie Daten aus JSON-Antworten mithilfe der JSON-PATH-Syntax extrahieren. Dieser Postprozessor ist dem Extraktor für reguläre Ausdrücke sehr ähnlich. Es muss als untergeordnetes Element von HTTP Sampler oder einem anderen Sampler mit Antworten platziert werden. Damit können Sie auf sehr einfache Weise Textinhalte extrahieren, siehe JSON-Pfadsyntax .

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Namen der erstellten Variablen
Durch Semikolon getrennte Namen von Variablen, die die Ergebnisse von JSON-PATH-Ausdrücken enthalten (muss mit der Anzahl von JSON-PATH-Ausdrücken übereinstimmen)
Ja
JSON-Pfadausdrücke
Durch Semikolon getrennte JSON-PATH-Ausdrücke (muss mit der Anzahl der Variablen übereinstimmen)
Ja
Standardwerte
Durch Semikolon getrennte Standardwerte, wenn JSON-PATH-Ausdrücke kein Ergebnis zurückgeben (muss mit der Anzahl der Variablen übereinstimmen)
Nein
Spiel Nr. (0 für Random)
Wenn die JSON-Pfadabfrage zu vielen Ergebnissen führt, können Sie auswählen, welche als Variablen extrahiert werden sollen:
  • 0 : bedeutet zufällig (Standardwert)
  • -1 bedeutet, dass alle Ergebnisse extrahiert werden, sie werden als <Variablenname> _N benannt (wobei N von 1 bis Anzahl der Ergebnisse reicht) .
  • X : bedeutet, das X -te Ergebnis zu extrahieren . Wenn dieses X größer als die Anzahl der Übereinstimmungen ist, wird nichts zurückgegeben. Der Standardwert wird verwendet
Nein
Verkettung berechnen var
Wenn viele Ergebnisse gefunden werden, verkettet das Plugin sie mit dem Trennzeichen ' , ' und speichert sie in einer Variablen namens <Variablenname> _ALL
Nein
JSON-Postprozessor
JSON-Postprozessor
^

Grenzextraktor

Ermöglicht dem Benutzer das Extrahieren von Werten aus einer Serverantwort unter Verwendung linker und rechter Grenzen. Als Postprozessor wird dieses Element nach jeder Beispielanforderung in seinem Geltungsbereich ausgeführt, testet die Grenzen, extrahiert die angeforderten Werte, generiert die Vorlagenzeichenfolge und speichert das Ergebnis im angegebenen Variablennamen.

Screenshot für das Control-Panel des Boundary Extractor
Screenshot des Control-Panels des Boundary Extractor

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Gelten:
Dies ist für die Verwendung mit Samplern gedacht, die Sub-Samples generieren können, z. B. HTTP-Sampler mit eingebetteten Ressourcen, Mail Reader oder vom Transaction Controller generierte Samples.
  • Nur Hauptprobe - gilt nur für die Hauptprobe
  • Nur Unterproben - gilt nur für die Unterproben
  • Hauptprobe und Unterproben - gilt für beide.
  • Zu verwendender JMeter-Variablenname – Die Assertion muss auf den Inhalt der benannten Variablen angewendet werden
Der Abgleich wird der Reihe nach auf alle qualifizierenden Proben angewendet. Zum Beispiel, wenn es eine Hauptstichprobe und 3 Unterstichproben gibt, die jeweils einen einzelnen Übereinstimmungstest enthalten (dh insgesamt 4 Übereinstimmungen). Für Übereinstimmungsnummer = 3 , nur Unterstichproben, stimmt der Extraktor mit der 3. Unterstichprobe überein. Für Übereinstimmungsnummer = 3 , Hauptprobe und Unterproben gleicht der Extraktor die 2. Unterprobe ab ( 1. Übereinstimmung ist Hauptprobe). Bei Übereinstimmungsnummer = 0 oder negativ werden alle qualifizierenden Proben verarbeitet. Bei Übereinstimmungsnummer > 0 wird der Vergleich beendet, sobald genügend Übereinstimmungen gefunden wurden.
Ja
Zu prüfendes Feld
Folgende Felder können überprüft werden:
  • Body – der Text der Antwort, z. B. der Inhalt einer Webseite (ohne Kopfzeilen)
  • Body (ohne Escapezeichen) – der Text der Antwort, wobei alle Html-Escape-Codes ersetzt wurden. Beachten Sie, dass HTML-Escapezeichen ohne Berücksichtigung des Kontexts verarbeitet werden, sodass einige falsche Ersetzungen vorgenommen werden können.
    Beachten Sie, dass sich diese Option stark auf die Leistung auswirkt. Verwenden Sie sie daher nur, wenn es unbedingt erforderlich ist, und seien Sie sich ihrer Auswirkungen bewusst
  • Body as a Document - der extrahierte Text aus verschiedenen Arten von Dokumenten über Apache Tika (siehe Abschnitt View Results Tree Document View).
    Beachten Sie, dass die Option Body as a Document die Leistung beeinträchtigen kann, stellen Sie also sicher, dass sie für Ihren Test geeignet ist
  • Anforderungsheader – möglicherweise nicht für Nicht-HTTP-Beispiele vorhanden
  • Response Header – möglicherweise nicht vorhanden für Nicht-HTTP-Beispiele
  • URL
  • Antwortcode - z . B. 200
  • Antwortnachricht - zB OK
Header können für HTTP-Beispiele nützlich sein; bei anderen Probenarten ist sie möglicherweise nicht vorhanden.
Ja
Name der erstellten Variable
Der Name der JMeter-Variablen, in der das Ergebnis gespeichert werden soll. Beachten Sie auch, dass jede Gruppe als [refname]_g# gespeichert wird , wobei [refname] die Zeichenfolge ist, die Sie als Referenznamen eingegeben haben, und # die Gruppennummer ist, wobei Gruppe 0 die gesamte Übereinstimmung ist, Gruppe 1 die Übereinstimmung aus der erste Klammer usw.
Ja
Linke Grenze
Linke Grenze des zu findenden Werts
Nein
Rechte Grenze
Zu findende rechte Wertgrenze
Nein
Spiel Nr. (0 für Random)
Gibt an, welche Übereinstimmung verwendet werden soll. Die Grenzen können mehrfach übereinstimmen.
  • Verwenden Sie einen Wert von Null, um anzugeben, dass JMeter zufällig eine Übereinstimmung auswählen soll.
  • Eine positive Zahl N bedeutet, dass die n -te Übereinstimmung ausgewählt wird.
  • Negative Zahlen werden in Verbindung mit dem ForEach-Controller verwendet - siehe unten.
Ja
Standardwert
Wenn die Grenzen nicht übereinstimmen, wird die Referenzvariable auf den Standardwert gesetzt. Dies ist besonders nützlich für Debugging-Tests. Wenn kein Standardwert angegeben ist, ist es schwierig festzustellen, ob die Grenzen nicht übereinstimmen oder ob möglicherweise die falsche Variable verwendet wird.

Wenn Sie jedoch mehrere Testelemente haben, die dieselbe Variable setzen, möchten Sie die Variable möglicherweise unverändert lassen, wenn der Ausdruck nicht übereinstimmt. Entfernen Sie in diesem Fall den Standardwert, sobald das Debuggen abgeschlossen ist.

Nein, aber empfehlenswert

Wenn die Übereinstimmungsnummer auf eine nicht negative Zahl gesetzt ist und eine Übereinstimmung auftritt, werden die Variablen wie folgt festgelegt:

  • refName – der Wert der Extraktion

Wenn keine Übereinstimmung auftritt, wird die refName- Variable auf den Standardwert gesetzt (es sei denn, dieser ist nicht vorhanden).

Wenn die Übereinstimmungsnummer auf eine negative Zahl eingestellt ist, werden alle möglichen Übereinstimmungen in den Sampler-Daten verarbeitet. Die Variablen werden wie folgt gesetzt:

  • refName_matchNr – die Anzahl der gefundenen Übereinstimmungen; könnte 0 sein
  • refName_ n , wobei n = 1 , 2 , 3 usw. - die Zeichenfolgen, wie sie von der Vorlage generiert wurden
  • refName_ n _g m , wobei m = 0 , 1 , 2 - die Gruppen für Übereinstimmung n
  • refName - immer auf den Standardwert gesetzt

Beachten Sie, dass die Variable refName in diesem Fall immer auf den Standardwert gesetzt ist und die zugehörigen Gruppenvariablen nicht gesetzt sind.

Wenn sowohl die linke als auch die rechte Grenze null sind, werden die gesamten im Bereich ausgewählten Daten zurückgegeben
^

18.9 Verschiedene Funktionen


Testplan

Im Testplan werden die allgemeinen Einstellungen für einen Test festgelegt.

Statische Variablen können für Werte definiert werden, die während eines Tests wiederholt werden, z. B. Servernamen. Beispielsweise könnte die Variable SERVER als www.example.com definiert werden und der Rest des Testplans könnte darauf als ${SERVER} verweisen . Dies vereinfacht spätere Namensänderungen.

Wenn derselbe Variablenname für eines oder mehrere Elemente der benutzerdefinierten Variablenkonfiguration wiederverwendet wird , wird der Wert auf die letzte Definition im Testplan gesetzt (von oben nach unten gelesen). Solche Variablen sollten für Elemente verwendet werden, die sich zwischen Testläufen ändern können, aber während eines Testlaufs gleich bleiben.

Beachten Sie, dass der Testplan nicht auf die von ihm definierten Variablen verweisen kann.
Wenn Sie andere Variablen aus den Testplanvariablen erstellen müssen, verwenden Sie ein Testelement für benutzerdefinierte Variablen .

Die Auswahl von Functional Testing weist JMeter an, die zusätzlichen Probeninformationen – Response Data und Sampler Data – in allen Ergebnisdateien zu speichern. Dies erhöht die zum Ausführen eines Tests erforderlichen Ressourcen und kann die Leistung von JMeter beeinträchtigen. Wenn nur für einen bestimmten Sampler mehr Daten erforderlich sind, fügen Sie ihm einen Listener hinzu und konfigurieren Sie die Felder nach Bedarf.

Die Option wirkt sich nicht auf CSV-Ergebnisdateien aus, die solche Informationen derzeit nicht speichern können.

Außerdem gibt es hier eine Option, um JMeter anzuweisen, die Thread-Gruppe seriell statt parallel auszuführen.

TearDown-Thread-Gruppen nach dem Herunterfahren der Haupt-Threads ausführen: Wenn diese Option ausgewählt ist, werden die TearDown-Gruppen (falls vorhanden) nach dem ordnungsgemäßen Herunterfahren der Haupt-Threads ausgeführt. Die TearDown-Threads werden nicht ausgeführt, wenn der Test zwangsweise beendet wird.

Testplan bietet jetzt eine einfache Möglichkeit, Klassenpfadeinstellungen zu einem bestimmten Testplan hinzuzufügen. Die Funktion ist additiv, was bedeutet, dass Sie JAR-Dateien oder Verzeichnisse hinzufügen können, aber das Entfernen eines Eintrags erfordert einen Neustart von JMeter.

Beachten Sie, dass dies nicht zum Hinzufügen von JMeter-GUI-Plugins verwendet werden kann, da diese früher verarbeitet werden.
Es kann jedoch für Utility-Jars wie JDBC-Treiber nützlich sein. Die JAR-Dateien werden nur zum Suchpfad für den JMeter-Loader hinzugefügt, nicht für den Systemklassenlader.

JMeter-Eigenschaften bieten auch einen Eintrag zum Laden zusätzlicher Klassenpfade. Bearbeiten Sie in jmeter.propertiesuser.classpath “ oder „ plugin_dependency_paths “, um zusätzliche Bibliotheken einzuschließen. Weitere Informationen finden Sie unter Klassenpfad von JMeter und Konfigurieren von JMeter.

Screenshot für das Control-Panel des Testplans
Screenshot des Control-Panels des Testplans
^

Themengruppe

Eine Thread-Gruppe definiert einen Pool von Benutzern, die einen bestimmten Testfall auf Ihrem Server ausführen. In der Thread-Gruppen-GUI können Sie die Anzahl der simulierten Benutzer (Anzahl der Threads), die Hochlaufzeit (wie lange es dauert, alle Threads zu starten), die Anzahl der Testdurchführungen und optional einen Start steuern und stoppen Sie die Zeit für den Test.

Siehe auch TearDown-Thread-Gruppe und SetUp-Thread-Gruppe .

Bei Verwendung des Schedulers führt JMeter die Thread-Gruppe aus, bis entweder die Anzahl der Schleifen oder die Dauer/Endzeit erreicht ist – je nachdem, was zuerst eintritt. Beachten Sie, dass die Bedingung nur zwischen Proben überprüft wird; Wenn die Endbedingung erreicht ist, wird dieser Thread beendet. JMeter unterbricht keine Sampler, die auf eine Antwort warten, daher kann die Endzeit beliebig verzögert werden.

Screenshot für das Control-Panel der Thread-Gruppe
Screenshot des Control-Panels der Thread-Gruppe

Seit JMeter 3.0 können Sie eine Auswahl von Thread-Gruppen ausführen, indem Sie sie auswählen und mit der rechten Maustaste klicken. Ein Popup-Menü wird angezeigt:

Popup-Menü zum Starten einer Auswahl von Thread-Gruppen
Popup-Menü zum Starten einer Auswahl von Thread-Gruppen

Beachten Sie, dass Sie drei Optionen haben, um die Auswahl von Thread-Gruppen auszuführen:
Anfang
Starten Sie nur die ausgewählten Thread-Gruppen
Starten Sie ohne Pausen
Starten Sie nur die ausgewählten Thread-Gruppen, aber ohne die Timer auszuführen
Bestätigen
Starten Sie die ausgewählten Thread-Gruppen nur im Validierungsmodus. Standardmäßig führt dies die Thread-Gruppe im Validierungsmodus aus (siehe unten).
Validierungsmodus:
Dieser Modus ermöglicht die schnelle Validierung einer Thread-Gruppe, indem er mit einem Thread, einer Iteration, ohne Timer und ohne auf 0 gesetzte Startverzögerung ausgeführt wird . Das Verhalten kann mit einigen Eigenschaften durch Einstellung in user.properties geändert werden :
testplan_validation.nb_threads_per_thread_group
Anzahl der Threads, die zum Validieren einer Thread-Gruppe verwendet werden sollen, standardmäßig 1
testplan_validation.ignore_timers
Timer ignorieren, wenn die Thread-Gruppe des Plans validiert wird, standardmäßig 1
testplan_validation.number_iterations
Anzahl der zur Validierung einer Thread-Gruppe zu verwendenden Iterationen
testplan_validation.tpc_force_100_pct
Ob der Durchsatzcontroller im Prozentmodus so ausgeführt werden soll, als ob der Prozentsatz 100 % wäre. Standardmäßig falsch

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nach einem Sampler-Fehler zu ergreifende Aktion
Legt fest, was passiert, wenn ein Sampler-Fehler auftritt, entweder weil das Sample selbst fehlgeschlagen ist oder eine Assertion fehlgeschlagen ist. Die Auswahlmöglichkeiten sind:
  • Fortfahren - Ignorieren Sie den Fehler und fahren Sie mit dem Test fort
  • Nächste Thread-Schleife starten – Ignorieren Sie den Fehler, starten Sie die nächste Schleife und fahren Sie mit dem Test fort
  • Thread stoppen – aktueller Thread wird beendet
  • Test stoppen – der gesamte Test wird am Ende aller aktuellen Proben gestoppt.
  • Test jetzt stoppen – Der gesamte Test wird abrupt beendet. Eventuell laufende Sampler werden nach Möglichkeit unterbrochen.
Nein
Anzahl der Themen
Anzahl der zu simulierenden Benutzer.
Ja
Anlaufphase
Wie lange JMeter brauchen sollte, um alle Threads zu starten. Wenn es 10 Threads und eine Hochlaufzeit von 100 Sekunden gibt, beginnt jeder Thread 10 Sekunden nach dem Start des vorherigen Threads, was eine Gesamtzeit von 100 Sekunden ergibt, um den Test vollständig auf Hochtouren zu bringen.
Der erste Thread startet immer direkt. Wenn Sie also einen Thread konfiguriert haben, ist die Hochlaufzeit effektiv null . Aus dem gleichen Grund wird der zehnte Thread im obigen Beispiel tatsächlich nach 90 Sekunden und nicht nach 100 Sekunden gestartet.
Ja
Schleifenanzahl
Anzahl der Wiederholungen des Testfalls. Alternativ kann „ unendlich “ ausgewählt werden, wodurch der Test ausgeführt wird, bis er manuell angehalten oder das Ende der Lebensdauer des Threads erreicht wird.
Ja, es sei denn, Unendlich ist ausgewählt
Verzögern Sie die Thread-Erstellung, bis sie benötigt wird
Wenn diese Option ausgewählt ist, werden Threads nur erstellt, wenn der entsprechende Anteil der Hochlaufzeit verstrichen ist. Dies eignet sich am besten für Tests mit einer Anstiegszeit, die deutlich länger ist als die Zeit zum Ausführen eines einzelnen Threads. Das heißt, wo frühere Threads enden, bevor spätere beginnen.
Wenn diese Option nicht ausgewählt ist, werden alle Threads erstellt, wenn der Test beginnt (sie pausieren dann für den entsprechenden Anteil der Hochlaufzeit). Dies ist die ursprüngliche Standardeinstellung und eignet sich für Tests, bei denen Threads während des größten Teils des Tests aktiv sind.
Ja
Geben Sie die Lebensdauer des Threads an
Wenn diese Option ausgewählt ist, wird die Thread-Operationszeit auf die angegebenen Grenzen beschränkt
Ja
Dauer (Sekunden)
Wenn das Kontrollkästchen Scheduler aktiviert ist, kann eine relative Endzeit ausgewählt werden. JMeter verwendet dies, um die Endzeit zu berechnen.
Nein
Startverzögerung (Sekunden)
Wenn das Kontrollkästchen Scheduler aktiviert ist, kann eine relative Startverzögerung gewählt werden. JMeter verwendet dies, um die Startzeit zu berechnen.
Nein
^

Werkbank

^

SSL-Manager

Der SSL-Manager ist eine Möglichkeit, ein Client-Zertifikat auszuwählen, damit Sie Anwendungen testen können, die Public Key Infrastructure (PKI) verwenden. Es wird nur benötigt, wenn Sie die entsprechenden Systemeigenschaften nicht eingerichtet haben.

Wenn Sie die Client-Zertifikatsauthentifizierung testen möchten, lesen Sie die Keystore-Konfiguration
Auswählen eines Client-Zertifikats

Sie können entweder einen Schlüsselspeicher im Java Key Store (JKS)-Format oder eine Public Key Certificate Standard #12 (PKCS12)-Datei für Ihre Client-Zertifikate verwenden. Es gibt eine Funktion der JSSE-Bibliotheken, die erfordert, dass Sie ein mindestens sechsstelliges Passwort auf Ihrem Schlüssel haben (zumindest für das Keytool-Dienstprogramm, das mit Ihrem JDK geliefert wird).

Um das Client-Zertifikat auszuwählen, wählen Sie in der Menüleiste Optionen  →  SSL-Manager . Ihnen wird ein Dateifinder angezeigt, der standardmäßig nach PKCS12-Dateien sucht. Ihre PKCS12-Datei muss die Erweiterung „ .p12 “ haben, damit SSL Manager sie als PKCS12-Datei erkennt. Jede andere Datei wird wie ein durchschnittlicher JKS-Schlüsselspeicher behandelt. Wenn JSSE korrekt installiert ist, werden Sie zur Eingabe des Kennworts aufgefordert. Das Textfeld verdeckt die Zeichen, die Sie an dieser Stelle eingeben, nicht – stellen Sie also sicher, dass Ihnen niemand über die Schulter schaut. Die aktuelle Implementierung geht davon aus, dass das Passwort für den Schlüsselspeicher auch das Passwort für den privaten Schlüssel des Clients ist, als der Sie sich authentifizieren möchten.

Oder Sie können die entsprechenden Systemeigenschaften festlegen – siehe die Datei system.properties .

Wenn Sie Ihren Test das nächste Mal ausführen, untersucht der SSL-Manager Ihren Schlüsselspeicher, um festzustellen, ob ihm mindestens ein Schlüssel zur Verfügung steht. Wenn es nur einen Schlüssel gibt, wählt SSL Manager ihn für Sie aus. Wenn es mehr als einen Schlüssel gibt, wählt er gegenwärtig den ersten Schlüssel aus. Es gibt derzeit keine Möglichkeit, andere Einträge im Schlüsselspeicher auszuwählen, daher muss der gewünschte Schlüssel der erste sein.

Dinge, auf die Sie achten sollten

Sie müssen Ihr Zertifizierungsstellenzertifikat (CA) ordnungsgemäß installiert haben, wenn es nicht von einem der fünf CA-Zertifikate signiert ist, die mit Ihrem JDK geliefert werden. Eine Methode zur Installation besteht darin, Ihr CA-Zertifikat in eine JKS-Datei zu importieren und die JKS-Datei " jssecacerts " zu nennen. Legen Sie die Datei im lib/security - Ordner Ihrer JRE ab . Diese Datei wird vor der Datei " cacerts " im selben Verzeichnis gelesen. Beachten Sie, dass die in „ cacerts “ installierten Zertifikate nicht verwendet werden , solange die Datei „ jssecacerts “ existiert. Dies kann zu Problemen für Sie führen. Wenn es Ihnen nichts ausmacht, Ihr CA-Zertifikat in die Datei " cacerts"-Datei, dann können Sie sich mit allen installierten CA-Zertifikaten authentifizieren.

^

HTTP(S) Test Script Recorder (früher: HTTP Proxy Server )

Der HTTP(S) Test Script Recorder ermöglicht es JMeter, Ihre Aktionen abzufangen und aufzuzeichnen, während Sie Ihre Webanwendung mit Ihrem normalen Browser durchsuchen. JMeter erstellt Testmusterobjekte und speichert sie direkt in Ihrem Testplan, während Sie fortfahren (so dass Sie Muster interaktiv anzeigen können, während Sie sie erstellen). Stellen Sie sicher, dass Sie diese Wiki-Seite
lesen , um JMeter korrekt einzurichten.

Um den Recorder zu verwenden, fügen Sie das Element HTTP(S) Test Script Recorder hinzu. Klicken Sie mit der rechten Maustaste auf das Testplanelement, um das Menü „Hinzufügen“ aufzurufen: ( Hinzufügen  →  Nicht-Testelemente  →  HTTP(S)-Testskriptaufzeichnung ).

Der Rekorder ist als HTTP(S)-Proxy-Server implementiert. Sie müssen Ihren Browser so einrichten, dass er den Proxy für alle HTTP- und HTTPS-Anforderungen verwendet.

Verwenden Sie JMeter nicht als Proxy für andere Anforderungstypen – FTP usw. – da JMeter diese nicht verarbeiten kann.

Verwenden Sie idealerweise den privaten Browsermodus, wenn Sie die Sitzung aufzeichnen. Dies soll sicherstellen, dass der Browser ohne gespeicherte Cookies startet und verhindert, dass bestimmte Änderungen gespeichert werden. Beispielsweise lässt Firefox nicht zu, dass Zertifikatsüberschreibungen dauerhaft gespeichert werden.

HTTPS-Aufzeichnung und Zertifikate

HTTPS-Verbindungen verwenden Zertifikate, um die Verbindung zwischen dem Browser und dem Webserver zu authentifizieren. Bei einer Verbindung über HTTPS präsentiert der Server dem Browser das Zertifikat. Um das Zertifikat zu authentifizieren, überprüft der Browser, ob das Serverzertifikat von einer Zertifizierungsstelle (CA) signiert ist, die mit einer ihrer integrierten Stammzertifizierungsstellen verknüpft ist.

Browser überprüfen auch, ob das Zertifikat für den richtigen Host oder die richtige Domäne gilt und ob es gültig und nicht abgelaufen ist.
Wenn eine der Browserprüfungen fehlschlägt, wird der Benutzer aufgefordert, der dann entscheiden kann, ob die Verbindung fortgesetzt werden soll.

JMeter muss ein eigenes Zertifikat verwenden, damit es die HTTPS-Verbindung vom Browser abfangen kann. Tatsächlich muss JMeter vorgeben, der Zielserver zu sein.

JMeter generiert seine eigenen Zertifikate. Diese werden mit einer durch die Eigenschaft proxy.cert.validity definierten Gültigkeitsdauer , standardmäßig 7 Tagen und zufälligen Passwörtern generiert. Wenn JMeter erkennt, dass es unter Java 8 oder höher ausgeführt wird, generiert es nach Bedarf Zertifikate für jeden Zielserver (dynamischer Modus), es sei denn, die folgende Eigenschaft ist definiert: proxy.cert.dynamic_keys=false. Bei Verwendung des dynamischen Modus gilt das Zertifikat für den richtigen Hostnamen und wird von einem JMeter-generierten CA-Zertifikat signiert. Standardmäßig wird dieses CA-Zertifikat vom Browser nicht als vertrauenswürdig eingestuft, es kann jedoch als vertrauenswürdiges Zertifikat installiert werden. Sobald dies geschehen ist, werden die generierten Serverzertifikate vom Browser akzeptiert. Das hat den Vorteil, dass auch eingebettete HTTPS-Ressourcen abgefangen werden können und die Browser-Checks nicht für jeden neuen Server überschrieben werden müssen.

Browser fordern keine eingebetteten Ressourcen an. Bei früheren Versionen wurden eingebettete Ressourcen also nur für Server heruntergeladen, die dem Browser bereits „bekannt“ waren

Sofern kein Keystore bereitgestellt wird (und Sie die Eigenschaft proxy.cert.alias definieren ), muss JMeter die Keytool-Anwendung verwenden, um die Keystore-Einträge zu erstellen. JMeter enthält Code, um zu überprüfen, ob keytool verfügbar ist, indem an verschiedenen Standardorten gesucht wird. Wenn JMeter die Keytool-Anwendung nicht finden kann, wird ein Fehler gemeldet. Bei Bedarf kann die Systemeigenschaft keytool.directory verwendet werden, um JMeter mitzuteilen, wo Keytool zu finden ist. Dies sollte in der Datei system.properties definiert werden .

Die JMeter-Zertifikate werden (falls erforderlich) generiert, wenn die Schaltfläche Start gedrückt wird.

Die Zertifikatsgenerierung kann einige Zeit dauern, während dieser Zeit reagiert die GUI nicht.
Der Cursor verwandelt sich dabei in eine Sanduhr. Wenn die Zertifikatsgenerierung abgeschlossen ist, zeigt die GUI einen Popup-Dialog mit den Details des Zertifikats für die Root-CA an. Dieses Zertifikat muss vom Browser installiert werden, damit er die von JMeter generierten Hostzertifikate akzeptiert; siehe unten für Details.

Bei Bedarf können Sie JMeter dazu zwingen, den Keystore (und die exportierten Zertifikate – ApacheJMeterTemporaryRootCA[.usr|.crt] ) neu zu generieren, indem Sie die Keystore-Datei proxyserver.jks aus dem JMeter-Verzeichnis löschen.

Dieses Zertifikat gehört nicht zu den Zertifikaten, denen Browser normalerweise vertrauen, und ist nicht für den richtigen Host bestimmt.
Als Konsequenz:

  • Der Browser sollte einen Dialog anzeigen, in dem Sie gefragt werden, ob Sie das Zertifikat akzeptieren möchten oder nicht. Zum Beispiel:
    1) Der Name des Servers „ www.example.com “ stimmt nicht mit dem Namen des Zertifikats überein
       " _ JMeter Root CA für Aufzeichnung (NUR INSTALLIEREN, WENN ES IHNEN IST) ". Vielleicht versucht jemand, Sie zu belauschen.
    2) Das Zertifikat für „ _ JMeter Root CA for recording (INSTALL ONLY IF IT S YOURS) “ ist von der unbekannten Zertifizierungsstelle signiert
       " _ JMeter Root CA für Aufzeichnung (NUR INSTALLIEREN, WENN ES IHNEN IST) ". Es kann nicht überprüft werden, ob es sich um ein gültiges Zertifikat handelt.
    
    Sie müssen das Zertifikat akzeptieren, damit der JMeter-Proxy den SSL-Datenverkehr abfangen kann, um ihn aufzuzeichnen. Akzeptieren Sie dieses Zertifikat jedoch nicht dauerhaft; es sollte nur vorübergehend akzeptiert werden. Browser fordern diesen Dialog nur für das Zertifikat der Haupt-URL an, nicht für die auf der Seite geladenen Ressourcen wie Bilder, CSS- oder JavaScript-Dateien, die auf einem gesicherten externen CDN gehostet werden. Wenn Sie über solche Ressourcen verfügen (z. B. Google Mail), müssen Sie zuerst manuell zu diesen anderen Domänen navigieren, um das Zertifikat von JMeter für sie zu akzeptieren. Suchen Sie in jmeter.log nach sicheren Domänen, für die Sie ein Zertifikat registrieren müssen.
  • Wenn der Browser bereits ein validiertes Zertifikat für diese Domain registriert hat, erkennt der Browser JMeter als Sicherheitsverletzung und weigert sich, die Seite zu laden. In diesem Fall müssen Sie das vertrauenswürdige Zertifikat aus dem Schlüsselspeicher Ihres Browsers entfernen.

Versionen von JMeter ab 2.10 unterstützen diese Methode weiterhin und werden dies auch weiterhin tun, wenn Sie die folgende Eigenschaft definieren: proxy.cert.alias Die folgenden Eigenschaften können verwendet werden, um das verwendete Zertifikat zu ändern:

  • proxy.cert.directory – das Verzeichnis, in dem das Zertifikat zu finden ist (Standard = JMeter bin/ )
  • proxy.cert.file – Name der Keystore-Datei (Standard „ proxyserver.jks “)
  • proxy.cert.keystorepass - Keystore-Passwort (Standard " password ") [Ignoriert bei Verwendung des JMeter-Zertifikats]
  • proxy.cert.keypassword - Zertifikatsschlüssel-Passwort (Standard " password ") [Ignoriert bei Verwendung des JMeter-Zertifikats]
  • proxy.cert.type – der Zertifikatstyp (Standard „ JKS “) [Ignoriert bei Verwendung des JMeter-Zertifikats]
  • proxy.cert.factory – die Fabrik (Standard „ SunX509 “) [Ignoriert bei Verwendung des JMeter-Zertifikats]
  • proxy.cert.alias – der Alias ​​für den zu verwendenden Schlüssel. Wenn dies definiert ist, versucht JMeter nicht, seine eigenen Zertifikate zu generieren.
  • proxy.ssl.protocol - das zu verwendende Protokoll (Standard " SSLv3 ")
Wenn Ihr Browser derzeit einen Proxy verwendet (z. B. ein Firmen -Intranet kann alle externen Anfragen über einen Proxy weiterleiten), müssen Sie JMeter mit den Befehlszeilenoptionen -H und -P anweisen, diesen Proxy zu verwenden, bevor Sie JMeter starten . Diese Einstellung wird auch beim Ausführen des generierten Testplans benötigt.

Installieren des JMeter-CA-Zertifikats für die HTTPS-Aufzeichnung

Wie oben erwähnt, kann JMeter, wenn es unter Java 8 ausgeführt wird, Zertifikate für jeden Server generieren. Damit dies reibungslos funktioniert, muss das von JMeter verwendete Root-CA-Signaturzertifikat vom Browser als vertrauenswürdig eingestuft werden. Beim ersten Start des Recorders generiert dieser ggf. die Zertifikate. Das Root-CA-Zertifikat wird in eine Datei mit dem Namen ApacheJMeterTemporaryRootCA im aktuellen Startverzeichnis exportiert. Wenn die Zertifikate eingerichtet wurden, zeigt JMeter einen Dialog mit den aktuellen Zertifikatsdetails. An dieser Stelle kann das Zertifikat gemäß den nachstehenden Anweisungen in den Browser importiert werden.

Beachten Sie, dass der Browser nach der Installation des Root-CA-Zertifikats als vertrauenswürdige CA allen von ihm signierten Zertifikaten vertraut. Bis das Zertifikat abläuft oder das Zertifikat aus dem Browser entfernt wird, wird der Benutzer nicht gewarnt, dass auf das Zertifikat vertraut wird. Jeder, der an den Keystore und das Passwort kommt, kann das Zertifikat verwenden, um Zertifikate zu generieren, die von allen Browsern akzeptiert werden, die dem JMeter-Root-CA-Zertifikat vertrauen. Aus diesem Grund werden das Passwort für den Schlüsselspeicher und private Schlüssel zufällig generiert und eine kurze Gültigkeitsdauer verwendet. Die Passwörter werden im lokalen Einstellungsbereich gespeichert. Bitte stellen Sie sicher, dass nur vertrauenswürdige Benutzer Zugriff auf den Host mit dem Schlüsselspeicher haben.

Das Popup, das nach dem Start des Recorders angezeigt wird, ist ein Informations-Popup:
Recorder-Installationszertifikat-Popup
Recorder-Installationszertifikat-Popup
Klicken Sie einfach auf OK und fahren Sie fort.
Installation des Zertifikats in Firefox

Wählen Sie die folgenden Optionen:

  • Werkzeug-Optionen
  • Erweitert / Zertifikate
  • Zertifikate anzeigen
  • Behörden
  • Importieren …
  • Navigieren Sie zum Startverzeichnis von JMeter, klicken Sie auf die Datei ApacheJMeterTemporaryRootCA.crt und drücken Sie auf Öffnen
  • Klicken Sie auf Anzeigen und überprüfen Sie, ob die Zertifikatsdetails mit denen übereinstimmen, die vom JMeter Test Script Recorder angezeigt werden
  • Wenn OK, wählen Sie „ Dieser Zertifizierungsstelle vertrauen, um Websites zu identifizieren “ und drücken Sie OK
  • Schließen Sie Dialoge ggf. durch Drücken von OK
Installation des Zertifikats in Chrome oder Internet Explorer

Sowohl Chrome als auch Internet Explorer verwenden denselben Truststore für Zertifikate.

  • Navigieren Sie zum JMeter-Startverzeichnis, klicken Sie auf die Datei ApacheJMeterTemporaryRootCA.crt und öffnen Sie sie
  • Klicken Sie auf die Registerkarte „ Details “ und überprüfen Sie, ob die Zertifikatsdetails mit denen übereinstimmen, die vom JMeter Test Script Recorder angezeigt werden
  • Wenn OK, gehen Sie zurück zur Registerkarte „ Allgemein “ und klicken Sie auf „ Zertifikat installieren … “ und folgen Sie den Anweisungen des Assistenten
Installation des Zertifikats in Opera
  • Extras / Einstellungen / Erweitert / Sicherheit
  • Zertifikate verwalten …
  • Wählen Sie die Registerkarte " Zwischenprodukt " und klicken Sie auf " Importieren … " .
  • Navigieren Sie zum JMeter-Startverzeichnis, klicken Sie auf die Datei ApacheJMeterTemporaryRootCA.usr und öffnen Sie sie
Screenshot für das Control-Panel des HTTP(S) Test Script Recorders
Screenshot des Control-Panels des HTTP(S) Test Script Recorders

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
Hafen
Der Port, den der HTTP(S) Test Script Recorder überwacht. 8888 ist der Standardwert, aber Sie können ihn ändern.
Ja
HTTPS-Domänen
Liste der Domänen- (oder Host-) Namen für HTTPS. Verwenden Sie dies, um vorab Zertifikate für alle Server zu generieren, die Sie aufzeichnen möchten.
Beispiel: *.example.com,*.subdomain.example.com
Beachten Sie, dass Wildcard-Domains nur auf einer Ebene gelten, dh abc.subdomain.example.com stimmt mit *.subdomain.example.com überein , aber nicht mit *.example.com
Nein
Zielcontroller
Der Controller, auf dem der Proxy die generierten Samples speichert. Standardmäßig sucht es nach einem Recording Controller und speichert sie dort, wo immer sie sich befinden.
Ja
Gruppierung
Ob Sampler für Anfragen mit einem einzigen "Klick" gruppiert werden sollen (Anfragen, die ohne signifikante zeitliche Trennung eingehen) und wie diese Gruppierung in der Aufzeichnung dargestellt wird:
  • Sampler nicht gruppieren – speichert alle aufgenommenen Sampler sequentiell, ohne Gruppierung.
  • Fügen Sie Trennzeichen zwischen Gruppen hinzu - fügen Sie einen Controller mit dem Namen " -------------- " hinzu, um eine visuelle Trennung zwischen den Gruppen zu erstellen. Andernfalls werden die Sampler alle sequentiell gespeichert.
  • Fügen Sie jede Gruppe in einen neuen Controller ein - erstellen Sie einen neuen einfachen Controller für jede Gruppe und speichern Sie alle Sampler für diese Gruppe darin.
  • Nur 1. Probenehmer jeder Gruppe speichern - nur die erste Anfrage in jeder Gruppe wird aufgezeichnet. Die Flags „ Redirects folgen “ und „ Alle eingebetteten Ressourcen abrufen … “ werden in diesen Samplern aktiviert.
  • Fügen Sie jede Gruppe in einen neuen Transaktionscontroller ein - erstellen Sie einen neuen Transaktionscontroller für jede Gruppe und speichern Sie alle Sampler für diese Gruppe darin.
Die Eigenschaft proxy.pause bestimmt die minimale Lücke, die JMeter zwischen Anfragen benötigt, um sie als separate "Klicks" zu behandeln. Der Standardwert ist 5000 (Millisekunden), dh 5 Sekunden. Wenn Sie die Gruppierung verwenden, stellen Sie bitte sicher, dass Sie die erforderliche Lücke zwischen den Klicks lassen.
Ja
Erfassen Sie HTTP-Header
Sollen Kopfzeilen zum Plan hinzugefügt werden? Falls angegeben, wird jedem HTTP-Sampler ein Header-Manager hinzugefügt. Der Proxy-Server entfernt immer Cookie- und Autorisierungs-Header aus den generierten Header-Managern. Standardmäßig werden auch die Header If-Modified-Since und If-None-Match entfernt. Diese werden verwendet, um festzustellen, ob die Browser-Cache-Elemente auf dem neuesten Stand sind; Beim Aufnehmen möchte man normalerweise den gesamten Inhalt herunterladen. Um zu ändern, welche zusätzlichen Header entfernt werden, definieren Sie die JMeter-Eigenschaft proxy.headers.remove als eine durch Kommas getrennte Liste von Headern.
Ja
Behauptungen hinzufügen
Jedem Sampler eine leere Behauptung hinzufügen?
Ja
Regex-Abgleich
Beim Ersetzen von Variablen Regex-Matching verwenden? Wenn diese Option aktiviert ist, werden beim Ersetzen Wortgrenzen verwendet, dh es werden nur Wortübereinstimmungswerte von Variablen ersetzt, nicht Teile eines Wortes. Eine Wortgrenze folgt der Perl5-Definition und entspricht \b . Weitere Informationen weiter unten im Abschnitt über den „ Ersatz benutzerdefinierter Variablen “.
Ja
Präfix/Transaktionsname
Fügen Sie dem Sampler-Namen während der Aufnahme ein Präfix hinzu (Präfix-Modus). Oder ersetzen Sie den Sampler-Namen durch den vom Benutzer gewählten Namen (Transaktionsname)
Nein
Namensschema
Wählen Sie das Benennungsschema für Sampler-Namen während der Aufnahme. Standard ist Transaktionsname
Nein
Benennungsformat
Wenn als Benennungsschema Formatzeichenfolge verwenden ausgewählt ist, kann ein freies Format angegeben werden . Platzhalter für Transaktionsname, Pfad und Zähler können durch #{name} , #{path} und #{counter} angegeben werden . Ein einfaches Format könnte " #{name}-#{counter} " sein, was dem nummerierten Standardbenennungsschema entsprechen würde. Für eine komplexere Formatierung kann die Java-Formatierung für MessageFormat verwendet werden, wie in " #{counter,number,000}: #{name}-#{path} ", wodurch der Zähler mit bis zu drei Nullen gefüllt ausgegeben würde. Standard ist eine leere Zeichenfolge.
Nein
Startwert des Zählers
Kann verwendet werden, um den Zähler auf einen bestimmten Wert zurückzusetzen. Beachten Sie, dass das nächste Sample zuerst den Wert erhöht und dann verwendet. Wenn der erste Sampler bei 1 beginnen soll , setzen Sie den Zähler auf 0 zurück .
Nein
Neue Transaktion nach Anfrage erstellen (ms)
Inaktivitätszeit zwischen zwei Anforderungen, die benötigt werden, um sie in zwei getrennten Gruppen zu berücksichtigen.
Nein
Typ
Welche Art von Sampler generiert werden soll (HTTPClient-Standard oder Java)
Ja
Automatisch umleiten
Umleitung automatisch in den generierten Samplern setzen?
Ja
Weiterleitungen folgen
Follow Redirects in den generierten Samplern setzen?
Hinweis: Wichtige Informationen finden Sie im Abschnitt „Aufzeichnung und Weiterleitungen“ weiter unten.
Ja
Verwenden Sie Keep-Alive
Verwenden Sie Keep-Alive in den generierten Samplern?
Ja
Rufen Sie alle eingebetteten Ressourcen ab
Alle eingebetteten Ressourcen in den generierten Samplern abrufen?
Ja
Inhaltstyp-Filter
Filtern Sie die Anfragen basierend auf dem Inhaltstyp - zB " text/html [;charset=utf-8 ] ". Die Felder sind reguläre Ausdrücke, die daraufhin überprüft werden, ob sie im Inhaltstyp enthalten sind . [Muss nicht mit dem gesamten Feld übereinstimmen]. Zuerst wird der Include-Filter überprüft, dann der Exclude-Filter. Ausgefilterte Proben werden nicht gespeichert.
Hinweis: Diese Filterung wird auf den Inhaltstyp der Antwort angewendet
Nein
Einzuschließende Muster
Reguläre Ausdrücke, die mit der vollständigen abgetasteten URL abgeglichen werden. Ermöglicht das Filtern von aufgezeichneten Anfragen. Alle Anfragen werden durchgelassen, aber nur diejenigen, die die Anforderungen der Einschluss- / Ausschlussfelder erfüllen , werden aufgezeichnet . Wenn sowohl Einschließen als auch Ausschließen leer gelassen werden, wird alles aufgezeichnet (was dazu führen kann, dass Dutzende von Beispielen für jede Seite aufgezeichnet werden, wenn Bilder, Stylesheets usw. aufgezeichnet werden).
Wenn im Feld Include mindestens ein Eintrag vorhanden ist , werden nur Anfragen erfasst, die einem oder mehreren Include - Mustern entsprechen
.
Nein
Auszuschließende Muster
Reguläre Ausdrücke, die mit der abgetasteten URL abgeglichen werden.
Alle Anforderungen, die einem oder mehreren Ausschlussmustern entsprechen, werden nicht aufgezeichnet
.
Nein
Benachrichtigen Sie untergeordnete Zuhörer über gefilterte Sampler
Benachrichtigen Sie untergeordnete Zuhörer über gefilterte Sampler
Alle Antworten, die einem oder mehreren Ausschlussmustern entsprechen , werden nicht an untergeordnete Listener übermittelt (Ergebnisbaum anzeigen)
.
Nein
Start Knopf
Starten Sie den Proxy-Server. JMeter schreibt die folgende Meldung auf die Konsole, sobald der Proxy-Server hochgefahren ist und bereit ist, Anfragen entgegenzunehmen: " Proxy up and running! ".
N / A
Stopp-Taste
Stoppen Sie den Proxy-Server.
N / A
Neustart-Schaltfläche
Stoppt den Proxy-Server und startet ihn neu. Dies ist nützlich, wenn Sie einen Einschluss-/Ausschlussfilterausdruck ändern/hinzufügen/löschen.
N / A

Aufzeichnung und Weiterleitungen

Während der Aufzeichnung folgt der Browser einer Umleitungsantwort und generiert eine zusätzliche Anfrage. Der Proxy zeichnet sowohl die ursprüngliche Anfrage als auch die umgeleitete Anfrage auf (vorbehaltlich der konfigurierten Ausschlüsse). Bei den generierten Beispielen ist standardmäßig „ Weiterleitungen folgen “ ausgewählt, da dies im Allgemeinen besser ist.

Umleitungen können von der ursprünglichen Anfrage abhängen, sodass das Wiederholen des ursprünglich aufgenommenen Samples möglicherweise nicht immer funktioniert.

Wenn JMeter nun so eingestellt ist, dass es der Umleitung während der Wiedergabe folgt, wird es die ursprüngliche Anfrage ausgeben und dann die aufgezeichnete Umleitungsanfrage wiedergeben. Um diese doppelte Wiedergabe zu vermeiden, versucht JMeter zu erkennen, wenn ein Sample das Ergebnis einer vorherigen Umleitung ist. Wenn die aktuelle Antwort eine Umleitung ist, speichert JMeter die Umleitungs-URL. Wenn die nächste Anfrage empfangen wird, wird sie mit der gespeicherten Weiterleitungs-URL verglichen, und wenn es eine Übereinstimmung gibt, deaktiviert JMeter das generierte Beispiel. Es fügt auch Kommentare zur Weiterleitungskette hinzu. Dies setzt voraus, dass alle Anforderungen in einer Umleitungskette ohne dazwischenliegende Anforderungen aufeinander folgen. Um die Umleitungserkennung zu deaktivieren, setzen Sie die Eigenschaft proxy.redirect.disabling=false

Enthält und schließt aus

Die Include- und Exclude-Muster werden als reguläre Ausdrücke behandelt (unter Verwendung von Jakarta ORO). Sie werden mit dem Hostnamen, dem Port (tatsächlich oder impliziert), dem Pfad und der Abfrage (falls vorhanden) jeder Browseranforderung abgeglichen. Wenn die URL, die Sie durchsuchen,
http://localhost/jmeter/index.html?username=xxxx “ lautet,
wird der reguläre Ausdruck anhand der Zeichenfolge
localhost:80/jmeter/index.html?username=xxxx “ getestet ".
Wenn Sie also alle .html- Dateien einschließen möchten, könnte Ihr regulärer Ausdruck so aussehen:
" .*\.html(\?.*)? " - oder " .*\.html , wenn Sie wissen, dass es keine Abfragezeichenfolge gibt oder Sie möchten nur HTML-Seiten ohne Abfragezeichenfolgen.

Wenn Include-Muster vorhanden sind, muss die URL mit mindestens einem der Muster übereinstimmen, andernfalls wird sie nicht aufgezeichnet. Wenn Ausschlussmuster vorhanden sind, darf die URL mit keinem der Muster übereinstimmen , da sie sonst nicht aufgezeichnet wird. Mit einer Kombination aus Einschließen und Ausschließen sollten Sie in der Lage sein, aufzuzeichnen, woran Sie interessiert sind, und überspringen, was Sie nicht interessiert.

Beachten Sie, dass die Zeichenfolge, die mit dem regulären Ausdruck übereinstimmt, mit der gesamten Host- und Pfadzeichenfolge identisch sein muss.
Daher wird " \.html " nicht mit localhost:80/index.html übereinstimmen

Erfassen binärer POST-Daten

JMeter kann binäre POST-Daten erfassen. Um zu konfigurieren, welche Inhaltstypen als binär behandelt werden, aktualisieren Sie die JMeter-Eigenschaft proxy.binary.types . Die Standardeinstellungen sind wie folgt:

# Diese Inhaltstypen werden behandelt, indem die Anfrage in einer Datei gespeichert wird:
proxy.binary.types=application/x-amf,application/x-java-serialized-object
# Die Dateien werden in diesem Verzeichnis gespeichert:
proxy.binary.directory=user.dir
# Die Dateien werden mit diesem Datei-Dateiendung erstellt:
proxy.binary.filesuffix=.binary

Timer hinzufügen

Es ist auch möglich, dass der Proxy dem aufgezeichneten Skript Timer hinzufügt. Erstellen Sie dazu direkt in der Komponente HTTP(S) Test Script Recorder einen Timer. Der Proxy fügt eine Kopie dieses Timers in jedes Sample ein, das er aufzeichnet, oder in das erste Sample jeder Gruppe, wenn Sie die Gruppierung verwenden. Diese Kopie wird dann in ihren Eigenschaften nach Vorkommen der Variablen ${T} durchsucht , und alle derartigen Vorkommen werden durch die Zeitlücke vom vorherigen aufgezeichneten Sampler (in Millisekunden) ersetzt.

Wenn Sie bereit sind zu beginnen, klicken Sie auf „ Start “.

Sie müssen die Proxy-Einstellungen Ihres Browsers bearbeiten, um auf den entsprechenden Server und Port zu verweisen, wobei der Server der Computer ist, auf dem JMeter ausgeführt wird, und die Portnummer aus dem oben gezeigten Proxy Control Panel stammt.

Wo werden Samples aufgenommen?

JMeter platziert die aufgezeichneten Samples in dem von Ihnen gewählten Target Controller. Wenn Sie die Standardoption „ Aufzeichnungscontroller verwenden “ wählen, werden sie im ersten Aufzeichnungscontroller gespeichert, der im Testobjektbaum gefunden wird (stellen Sie also sicher, dass Sie einen Aufzeichnungscontroller hinzufügen, bevor Sie mit der Aufzeichnung beginnen).

Wenn der Proxy keine Samples aufzuzeichnen scheint, kann dies daran liegen, dass der Browser den Proxy nicht wirklich verwendet. Um zu überprüfen, ob dies der Fall ist, versuchen Sie, den Proxy zu stoppen. Wenn der Browser immer noch Seiten herunterlädt, hat er keine Anfragen über den Proxy gesendet. Überprüfen Sie die Browseroptionen. Wenn Sie versuchen, von einem Server aufzuzeichnen, der auf demselben Host ausgeführt wird, überprüfen Sie, ob der Browser nicht auf „ Proxyserver für lokale Adressen umgehen“ eingestellt ist (dieses Beispiel stammt von IE7, aber es gibt ähnliche Optionen für andere Browser). Wenn JMeter keine Browser-URLs wie http://localhost/ oder http://127.0.0.1/ aufzeichnet , versuchen Sie, den Non-Loopback-Hostnamen oder die IP-Adresse zu verwenden, z. B. http://myhost/ oder http://192.168. 0,2/ .

Handhabung von HTTP-Request-Standardwerten

Wenn der HTTP(S) Test Script Recorder aktivierte HTTP-Anforderungsstandards direkt in dem Controller findet, in dem Beispiele gespeichert werden, oder direkt in einem seiner übergeordneten Controller, weisen die aufgezeichneten Beispiele leere Felder für die von Ihnen angegebenen Standardwerte auf. Sie können dieses Verhalten weiter steuern, indem Sie ein HTTP-Request-Standardelement direkt in HTTP(S) Test Script Recorder platzieren, dessen nicht leere Werte die in den anderen HTTP-Request-Standardwerten überschreiben. Weitere Informationen finden Sie unter Best Practices mit dem HTTP(S) Test Script Recorder .

Benutzerdefinierter Variablenaustausch

Wenn der HTTP(S) Test Script Recorder benutzerdefinierte Variablen (UDV) direkt in dem Controller findet, in dem Samples gespeichert werden, oder direkt in einem seiner übergeordneten Controller, weisen die aufgezeichneten Samples alle Vorkommen der Werte dieser Variablen auf durch die entsprechende Variable ersetzt. Auch hier können Sie benutzerdefinierte Variablen direkt im HTTP(S) Test Script Recorder platzieren, um die zu ersetzenden Werte zu überschreiben. Weitere Informationen finden Sie unter Best Practices mit dem Testskriptrekorder.

Bitte beachten Sie, dass beim Abgleich zwischen Groß- und Kleinschreibung unterschieden wird.

Ersetzung durch Variablen: Standardmäßig sucht der Proxy-Server nach allen Vorkommen von UDV-Werten. Wenn Sie beispielsweise die Variable WEB mit dem Wert www definieren , wird der String www überall dort durch ${WEB} ersetzt , wo er gefunden wird. Um zu vermeiden, dass dies überall passiert, aktivieren Sie das Kontrollkästchen „ Regex-Abgleich “. Dies weist den Proxy-Server an, Werte als Regexes zu behandeln (unter Verwendung der von ORO bereitgestellten perl5-kompatiblen Regex-Matcher).

Wenn " Regex Matching " ausgewählt ist, wird jede Variable in einen Perl-kompatiblen Regex kompiliert, der in \b( und )\b eingeschlossen ist . Auf diese Weise beginnt und endet jede Übereinstimmung an einer Wortgrenze.

Beachten Sie, dass die Begrenzungszeichen nicht Teil der übereinstimmenden Gruppe sind, z . B. n.* zum Abgleichen von name aus You can call me 'name' .

Wenn Sie nicht möchten, dass Ihre Regex in diese Boundary-Matcher eingeschlossen wird, müssen Sie Ihre Regex in Klammern einschließen, z . B. ('.*?') , um mit 'name' von You can call me 'name' übereinzustimmen .

Die Variablen werden in zufälliger Reihenfolge geprüft. Stellen Sie also sicher, dass sich die potenziellen Übereinstimmungen nicht überschneiden. Überlappende Matcher wären .* (das mit allem übereinstimmt) und www (das nur mit www übereinstimmt ). Nicht überlappende Matcher wären a+ (passt zu einer Folge von a ) und b+ (passt zu einer Folge von b ).

Wenn Sie nur eine ganze Zeichenfolge finden möchten, schließen Sie sie in (^ und $) ein, z. B. (^thus$) . Die Klammern sind erforderlich, da die normalerweise hinzugefügten Begrenzungszeichen verhindern, dass ^ und $ übereinstimmen.

Wenn Sie /images nur am Anfang einer Zeichenfolge abgleichen möchten , verwenden Sie den Wert (^/images) . Jakarta ORO unterstützt auch Null-Breiten-Look-Ahead, sodass man /images/… abgleichen kann, aber das nachgestellte / in der Ausgabe beibehalten kann, indem man (^/images(?=/)) verwendet .

Beachten Sie, dass die aktuelle Version von Jakarta ORO Look-behind nicht unterstützt - dh (?<=…) oder (?<!…) .

Achten Sie auf überlappende Matcher. Zum Beispiel wird der Wert .* als Regex in einer Variablen namens regex teilweise mit einer zuvor ersetzten Variablen übereinstimmen, was zu etwas wie ${{regex} führen wird, was höchstwahrscheinlich nicht das gewünschte Ergebnis ist.

Wenn es Probleme beim Interpretieren von Variablen als Muster gibt, werden diese in jmeter.log gemeldet . Überprüfen Sie dies also unbedingt, wenn UDVs nicht wie erwartet funktionieren.

Wenn Sie mit der Aufzeichnung Ihrer Testmuster fertig sind, stoppen Sie den Proxy-Server (klicken Sie auf die Schaltfläche „ Stopp “). Denken Sie daran, die Proxy-Einstellungen Ihres Browsers zurückzusetzen. Jetzt möchten Sie vielleicht das Testskript sortieren und neu anordnen, Timer, Listener, einen Cookie-Manager usw. hinzufügen.

Wie kann ich auch die Antworten des Servers aufzeichnen?

Platzieren Sie einfach einen View Results Tree Listener als untergeordnetes Element des HTTP(S) Test Script Recorders und die Antworten werden angezeigt. Sie können auch einen Save Responses to a file Post-Processor hinzufügen , der die Antworten in Dateien speichert.

Anfragen mit Antworten verknüpfen

Wenn Sie die Eigenschaft proxy.number.requests=true definieren, fügt JMeter jedem Sampler und jeder Antwort eine Nummer hinzu. Beachten Sie, dass möglicherweise mehr Antworten als Stichproben vorhanden sind, wenn Ausschlüsse oder Einschlüsse verwendet wurden. Ausgeschlossene Antworten haben Labels, die in [ und ] eingeschlossen sind, zum Beispiel [23 /favicon.ico]

Cookie-Manager

Wenn der Server, gegen den Sie testen, Cookies verwendet, denken Sie daran, einen HTTP-Cookie-Manager zum Testplan hinzuzufügen , wenn Sie die Aufzeichnung abgeschlossen haben. Während der Aufzeichnung verarbeitet der Browser alle Cookies, aber JMeter benötigt einen Cookie-Manager, um die Cookie-Behandlung während eines Testlaufs durchzuführen. Der JMeter-Proxy-Server leitet alle vom Browser während der Aufzeichnung gesendeten Cookies weiter, speichert sie jedoch nicht im Testplan, da sie sich wahrscheinlich zwischen den Läufen ändern.

Autorisierungsmanager

Der HTTP(S) Test Script Recorder schnappt sich den " Authentication " Header und versucht, die Auth Policy zu berechnen. Wenn der Autorisierungs-Manager manuell zum Zielcontroller hinzugefügt wurde, findet HTTP(S) Test Script Recorder ihn und fügt die Autorisierung hinzu (übereinstimmende werden entfernt). Andernfalls wird der Autorisierungsmanager dem Zielcontroller mit dem Autorisierungsobjekt hinzugefügt. Möglicherweise müssen Sie automatisch berechnete Werte nach der Aufzeichnung korrigieren.

Hochladen von Dateien

Einige Browser (z. B. Firefox und Opera) geben beim Hochladen von Dateien nicht den vollständigen Namen einer Datei an. Dies kann dazu führen, dass der JMeter-Proxyserver fehlschlägt. Eine Lösung besteht darin, sicherzustellen, dass sich alle hochzuladenden Dateien im JMeter-Arbeitsverzeichnis befinden, indem Sie entweder die Dateien dorthin kopieren oder JMeter in dem Verzeichnis starten, das die Dateien enthält.

Aufzeichnen von HTTP-basierten, nicht textuellen Protokollen, die in JMeter nicht nativ verfügbar sind

Möglicherweise müssen Sie ein HTTP-Protokoll aufzeichnen, das nicht standardmäßig von JMeter verarbeitet wird (Custom Binary Protocol, Adobe Flex, Microsoft Silverlight, … ). Obwohl JMeter keine native Proxy-Implementierung zum Aufzeichnen dieser Protokolle bereitstellt, haben Sie die Möglichkeit, diese Protokolle aufzuzeichnen, indem Sie einen benutzerdefinierten SamplerCreator implementieren . Dieser Sampler Creator übersetzt das Binärformat in eine HTTPSamplerBase- Unterklasse, die dem JMeter-Testfall hinzugefügt werden kann. Weitere Details finden Sie unter "Erweitern von JMeter".

^

HTTP-Spiegelserver

Der HTTP Mirror Server ist ein sehr einfacher HTTP-Server – er spiegelt lediglich die an ihn gesendeten Daten. Dies ist nützlich, um den Inhalt von HTTP-Anforderungen zu überprüfen.

Es verwendet den Standardport 8081 .

Screenshot für das Control-Panel des HTTP-Mirror-Servers
Screenshot des Control-Panels des HTTP-Mirror-Servers

Parameter

Attribut
Beschreibung
Erforderlich
Hafen
Der Port, auf dem der Mirror-Server lauscht, ist standardmäßig 8081 .
Ja
Maximale Anzahl von Threads
Bei einem Wert > 0 wird die Anzahl der Threads, die Anfragen bedienen, auf die konfigurierte Anzahl begrenzt, bei einem Wert ≤ 0 wird ein neuer Thread erstellt, um jede eingehende Anfrage zu bedienen. Standardmäßig 0
Nein
Maximale Warteschlangengröße
Größe der Warteschlange, die zum Halten von Aufgaben verwendet wird, bevor sie vom Thread-Pool ausgeführt werden. Wenn der Thread-Pool überschritten wird, werden eingehende Anforderungen in dieser Warteschlange gehalten und verworfen, wenn diese Warteschlange voll ist. Dieser Parameter wird nur verwendet, wenn Max Number of Threads größer als 0 ist . Standardmäßig 25
Nein
Beachten Sie, dass Sie die Antworten besser steuern können, indem Sie einen HTTP-Header-Manager mit den folgenden Name/Wert-Paaren hinzufügen:

Parameter

Attribut
Beschreibung
Erforderlich
X-Schlaf
Ruhezeit in Millisekunden vor dem Senden der Antwort
Nein
X-SetCookie
Bei Antwort zu setzende Cookies
Nein
X-Antwortstatus
Antwortstatus, siehe HTTP-Statusantworten , Beispiel 200 OK, 500 Internal Server Error, ….
Nein
X-Antwortlänge
Größe der Antwort, dies kürzt die Antwort auf die angeforderte Größe, wenn diese kleiner als die Gesamtgröße ist
Nein
X-SetHeader
Pipe-getrennte Liste von Headern, Beispiel:
headerA: valueA|headerB: valueB würde headerA auf valueA und headerB auf valueB setzen .
Nein

Sie können auch die folgenden Abfrageparameter verwenden:

Parameter

Attribut
Beschreibung
Erforderlich
umleiten
Erzeugt einen 302 (Temporary Redirect) mit dem angegebenen Ort, zB ?redirect=/path
Nein
Status
Überschreibt die Standardstatusrückgabe, z . B. ?status=404 Not Found
Nein
v
Verbose-Flag, schreibt einige Details in die Standardausgabe, z. B. erste Zeile und Umleitungsort, falls angegeben
Nein
^

Eigenschaftsanzeige

Die Eigenschaftsanzeige zeigt die Werte von System- oder JMeter-Eigenschaften. Werte können geändert werden, indem Sie neuen Text in die Spalte Wert eingeben.

Screenshot für das Control-Panel der Eigenschaftsanzeige
Screenshot des Bedienfelds der Eigenschaftsanzeige

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
^

Debug-Sampler

Der Debug-Sampler generiert ein Beispiel, das die Werte aller JMeter-Variablen und/oder -Eigenschaften enthält.

Die Werte können im Bereich View Results Tree Listener Response Data angezeigt werden.

Screenshot für das Control-Panel von Debug Sampler
Screenshot des Control-Panels von Debug Sampler

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
JMeter-Eigenschaften
JMeter-Eigenschaften einbeziehen?
Ja
JMeter-Variablen
JMeter-Variablen einschließen?
Ja
Systemeigenschaften
Systemeigenschaften einbeziehen?
Ja
^

Postprozessor debuggen

Der Debug PostProcessor erstellt ein SubSample mit den Details der vorherigen Sampler-Eigenschaften, JMeter-Variablen, Eigenschaften und/oder Systemeigenschaften.

Die Werte können im Bereich View Results Tree Listener Response Data angezeigt werden.

Screenshot für das Control-Panel des Debug-Postprozessors
Screenshot des Control-Panels des Debug PostProcessors

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Nein
JMeter-Eigenschaften
Ob JMeter-Eigenschaften angezeigt werden sollen (standardmäßig false ).
Ja
JMeter-Variablen
Ob JMeter-Variablen angezeigt werden sollen (Standard false ).
Ja
Sampler-Eigenschaften
Ob Sampler-Eigenschaften angezeigt werden sollen (Standardeinstellung true ).
Ja
Systemeigenschaften
Ob Systemeigenschaften angezeigt werden sollen (standardmäßig false ).
Ja
^

Testfragment

Das Testfragment wird in Verbindung mit dem Include-Controller und dem Modul-Controller verwendet .

Screenshot für das Control-Panel des Testfragments
Screenshot der Systemsteuerung des Testfragments

Parameter

Attribut
Beschreibung
Erforderlich
Name
Beschreibender Name für dieses Element, das im Baum angezeigt wird.
Ja
Wenn Sie das Testfragment mit Module Controller verwenden , stellen Sie sicher, dass Sie das Testfragment deaktivieren, um die Ausführung des Testfragments selbst zu vermeiden. Dies geschieht standardmäßig seit JMeter 2.13.
^

setUp-Thread-Gruppe

Ein spezieller ThreadGroup-Typ, der zum Ausführen von Pre-Test-Aktionen verwendet werden kann. Das Verhalten dieser Threads ist genau wie ein normales Thread Group- Element. Der Unterschied besteht darin, dass diese Art von Threads ausgeführt wird, bevor der Test mit der Ausführung regulärer Thread-Gruppen fortfährt.

Screenshot für das Control-Panel der Setup-Thread-Gruppe
Screenshot des Control-Panels der Setup-Thread-Gruppe
^

TearDown-Thread-Gruppe

Eine spezielle Art von ThreadGroup, die verwendet werden kann, um Post-Test-Aktionen auszuführen. Das Verhalten dieser Threads ist genau wie ein normales Thread Group- Element. Der Unterschied besteht darin, dass diese Art von Threads ausgeführt wird, nachdem der Test die Ausführung seiner regulären Thread-Gruppen beendet hat.

Screenshot für das Control-Panel der TearDown-Thread-Gruppe
Screenshot des Control-Panels der TearDown-Thread-Gruppe
Beachten Sie, dass es standardmäßig nicht ausgeführt wird, wenn Test ordnungsgemäß heruntergefahren wird. Wenn Sie es in diesem Fall ausführen möchten, stellen Sie sicher, dass Sie die Option „ TearDown-Thread-Gruppen nach dem Herunterfahren der Haupt-Threads ausführen “ im Test Plan-Element aktivieren. Wenn Testplan angehalten wird, wird TearDown nicht ausgeführt, auch wenn die Option aktiviert ist.
Abbildung 1 – Ausführen von TearDown-Thread-Gruppen nach dem Herunterfahren von Haupt-Threads
Abbildung 1 – Ausführen von TearDown-Thread-Gruppen nach dem Herunterfahren von Haupt-Threads
^
^
Go to top