12. Einführung für Zuhörer

Ein Listener ist eine Komponente, die die Ergebnisse der Samples anzeigt. Die Ergebnisse können in einem Baum, Tabellen, Grafiken angezeigt oder einfach in eine Protokolldatei geschrieben werden. Um den Inhalt einer Antwort von einem bestimmten Sampler anzuzeigen, fügen Sie einem Testplan entweder den Listener „ Ergebnisstruktur anzeigen “ oder „ Ergebnisse in Tabelle anzeigen “ hinzu. Um die Antwortzeit grafisch anzuzeigen, fügen Sie Diagrammergebnisse hinzu. Der Listener -Abschnitt der Komponentenseite enthält vollständige Beschreibungen aller Listener.

Verschiedene Listener zeigen die Antwortinformationen auf unterschiedliche Weise an. Sie schreiben jedoch alle die gleichen Rohdaten in die Ausgabedatei - sofern eine angegeben ist.

Über die Schaltfläche „ Konfigurieren “ kann festgelegt werden, welche Felder in die Datei geschrieben werden sollen und ob sie als CSV oder XML geschrieben werden soll. CSV-Dateien sind viel kleiner als XML-Dateien, verwenden Sie also CSV, wenn Sie viele Beispiele generieren.

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.

Wenn Sie nur bestimmte Samples aufnehmen möchten, fügen Sie den Listener als untergeordnetes Element des Samplers hinzu. Oder Sie können einen einfachen Controller verwenden, um eine Reihe von Samplern zu gruppieren, und den Listener hinzufügen. Derselbe Dateiname kann von mehreren Samplern verwendet werden - aber stellen Sie sicher, dass alle dieselbe Konfiguration verwenden!

12.1 Standardkonfiguration

Die zu speichernden Standardelemente können in der Datei jmeter.properties (oder user.properties ) definiert werden. Die Eigenschaften werden als Anfangseinstellungen für das Listener-Konfigurations-Popup verwendet und werden auch für die Protokolldatei verwendet, die durch das Befehlszeilen-Flag -l angegeben wird (häufig für Testläufe im CLI-Modus verwendet).

Um das Standardformat zu ändern, suchen Sie die folgende Zeile in jmeter.properties :

jmeter.save.saveservice.output_format=

Die zu speichernden Informationen sind konfigurierbar. Wählen Sie für maximale Informationen „ xml “ als Format und geben Sie „ Functional Test Mode “ im Testplan-Element an. Wenn dieses Kontrollkästchen nicht aktiviert ist, enthalten die standardmäßig gespeicherten Daten einen Zeitstempel (die Anzahl der Millisekunden seit Mitternacht, 1. Januar 1970 UTC), den Datentyp, den Thread-Namen, die Bezeichnung, die Antwortzeit, die Nachricht und den Code. und ein Erfolgsindikator. Wenn diese Option aktiviert ist, werden alle Informationen einschließlich der vollständigen Antwortdaten protokolliert.

Das folgende Beispiel zeigt, wie Eigenschaften festgelegt werden, um ein durch vertikale Balken (" | ") getrenntes Format zu erhalten, das Ergebnisse wie folgt ausgibt:.

timeStamp|time|label|responseCode|threadName|dataType|success|failureMessage
02/06/03 08:21:42|1187|Home|200|Threadgruppe-1|Text|true|
02/06/03 08:21:42|47|Login|200|Thread Group-1|Text|false|Test fehlgeschlagen:
    soll enthalten: Passwort etc.

Die entsprechenden jmeter.properties , die festgelegt werden müssen, werden unten angezeigt. Eine Kuriosität in diesem Beispiel ist, dass das output_format auf csv gesetzt ist , was normalerweise kommagetrennte Werte anzeigt. Das default_delimiter wurde jedoch auf einen vertikalen Balken anstelle eines Kommas gesetzt, sodass das csv-Tag in diesem Fall eine falsche Bezeichnung ist. (Stellen Sie sich CSV als zeichengetrennte Werte vor)

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.assertion_results_failure_message=true
jmeter.save.saveservice.default_delimiter=|

Der vollständige Satz von Eigenschaften, die sich auf die Ausgabe der Ergebnisdatei auswirken, ist unten dargestellt.

#------------------------------------------------------------- --------------------------
# Konfiguration der Ergebnisdatei
#------------------------------------------------------------- --------------------------

# Dieser Abschnitt hilft zu bestimmen, wie Ergebnisdaten gespeichert werden.
# Die auskommentierten Werte sind die Standardwerte.

# legitime Werte: xml, csv, db. Derzeit werden nur XML und CSV unterstützt.
#jmeter.save.saveservice.output_format=csv


# true wenn das Feld gespeichert werden soll; falsch sonst

# assertion_results_failure_message wirkt sich nur auf die CSV-Ausgabe aus
#jmeter.save.saveservice.assertion_results_failure_message=true
#
# legitime Werte: none, first, all
#jmeter.save.saveservice.assertion_results=keine
#
#jmeter.save.saveservice.data_type=true
#jmeter.save.saveservice.label=true
#jmeter.save.saveservice.response_code=true
# response_data wird derzeit nicht für die CSV-Ausgabe unterstützt
#jmeter.save.saveservice.response_data=false
# ResponseData für fehlgeschlagene Proben speichern
#jmeter.save.saveservice.response_data.on_error=false
#jmeter.save.saveservice.response_message=true
#jmeter.save.saveservice.successful=true
#jmeter.save.saveservice.thread_name=true
#jmeter.save.saveservice.time=true
#jmeter.save.saveservice.subresults=true
#jmeter.save.saveservice.assertions=true
#jmeter.save.saveservice.latency=true
#jmeter.save.saveservice.connect_time=true
#jmeter.save.saveservice.samplerData=false
#jmeter.save.saveservice.responseHeaders=false
#jmeter.save.saveservice.requestHeaders=false
#jmeter.save.saveservice.encoding=false
#jmeter.save.saveservice.bytes=true
#jmeter.save.saveservice.sent_bytes=true
#jmeter.save.saveservice.url=false
#jmeter.save.saveservice.filename=false
#jmeter.save.saveservice.hostname=false
#jmeter.save.saveservice.thread_counts=true
#jmeter.save.saveservice.sample_count=false
#jmeter.save.saveservice.idle_time=true

# Timestamp-Format - Dies betrifft nur CSV-Ausgabedateien
# legitime Werte: none, ms oder ein für SimpleDateFormat geeignetes Format
#jmeter.save.saveservice.timestamp_format=ms
#jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS

# Zur Verwendung mit Dateien mit kommagetrennten Werten (CSV) oder anderen Formaten
# wobei die Werte der Felder durch angegebene Trennzeichen getrennt werden.
# Standard:
#jmeter.save.saveservice.default_delimiter=,
# Für TAB kann man seit JMeter 2.3 verwenden:
#jmeter.save.saveservice.default_delimiter=\t

# Gilt nur für Dateien im CSV-Format:
# Feldnamen als erste Zeile in CSV drucken
#jmeter.save.saveservice.print_field_names=true

# Optionale Liste von JMeter-Variablennamen, deren Werte in den Ergebnisdatendateien gespeichert werden sollen.
# Verwenden Sie Kommas, um die Namen zu trennen. Zum Beispiel:
#sample_variables=SESSION_ID,REFERENZ
# NB Die aktuelle Implementierung speichert die Werte in XML als Attribute,
# Die Namen müssen also gültige XML-Namen sein.
# JMeter sendet die Variable an alle Server
# um sicherzustellen, dass die richtigen Daten beim Client verfügbar sind.

# Optionale XML-Verarbeitungsanweisung für Zeile 2 der Datei:
#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="sample.xsl"?>

# Präfix zur Identifizierung von Dateinamen, die relativ zur aktuellen Basis sind
#jmeter.save.saveservice.base_prefix=~/

# AutoFlush in jeder Zeile, die in die XML- oder CSV-Ausgabe geschrieben wird
# Wenn Sie dies auf „true“ setzen, führt dies zu einem geringeren Datenverlust der Testergebnisse im Falle eines Absturzes
# aber mit Auswirkungen auf die Leistung, insbesondere bei intensiven Tests (wenig oder keine Pausen)
# Seit JMeter 2.10 ist dies standardmäßig falsch
#jmeter.save.saveservice.autoflush=false

# Fügen Sie den Startzeitstempel anstelle des Endes in die Protokolle ein
sampleresult.timestamp.start=true

# Ob System.nanoTime() verwendet werden soll - ansonsten nur System.currentTimeMillis() verwenden
#sampleresult.useNanoTime=true

# Verwenden Sie einen Hintergrund-Thread, um den nanoTime-Offset zu berechnen
# Setzen Sie dies auf ≤ 0, um den Hintergrund-Thread zu deaktivieren
#sampleresult.nanoThreadSleep=5000

Das für timestamp_format zu verwendende Datumsformat ist in SimpleDateFormat beschrieben . Das Timestamp-Format wird sowohl zum Schreiben als auch zum Lesen von Dateien verwendet. Wenn das Format auf " ms " gesetzt ist und die Spalte nicht als lange Ganzzahl analysiert wird, versucht JMeter (2.9+) die folgenden Formate:

  • JJJJ/MM/TT HH:mm:ss.SSS
  • JJJJ/MM/TT HH:mm:ss
  • JJJJ-MM-TT HH:mm:ss.SSS
  • JJJJ-MM-TT HH:mm:ss
  • MM/tt/jj HH:mm:ss (dies dient der Kompatibilität mit früheren Versionen; es wird nicht als Format empfohlen)
Das Matching ist jetzt auch streng (nicht nachsichtig). JMeter 2.8 und früher verwendeten einen milden Modus, der zu Zeitstempeln mit falschen Daten führen konnte (Zeiten waren normalerweise korrekt).

12.1.1 Beispielvariablen

JMeter unterstützt die Eigenschaft sample_variables , um eine Liste zusätzlicher JMeter-Variablen zu definieren, die mit jedem Sample in den JTL-Dateien gespeichert werden sollen. Die Werte werden als zusätzliche Spalten in CSV-Dateien und als zusätzliche Attribute in XML-Dateien geschrieben. Siehe oben für ein Beispiel.

12.1.2 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 oben im Abschnitt Listener-Standardkonfiguration 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.


Konfigurationsdialog

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

12.2 Testläufe im CLI-Modus (Batch)

Bei der Ausführung im CLI-Modus kann das Flag -l verwendet werden, um einen Top-Level-Listener für den Testlauf zu erstellen. Dies gilt zusätzlich zu allen im Testplan definierten Listenern. Die Konfiguration dieses Listeners wird durch Einträge in der Datei jmeter.properties gesteuert , wie im vorherigen Abschnitt beschrieben.

Diese Funktion kann verwendet werden, um verschiedene Daten und Protokolldateien für jeden Testlauf anzugeben, zum Beispiel:

jmeter -n -t testplan.jmx -l testplan_01.jtl -j testplan_01.log
jmeter -n -t testplan.jmx -l testplan_02.jtl -j testplan_02.log

Beachten Sie, dass JMeter-Protokollierungsmeldungen standardmäßig in die Datei jmeter.log geschrieben werden. Diese Datei wird jedes Mal neu erstellt. Wenn Sie also die Protokolldateien für jeden Lauf behalten möchten, müssen Sie sie mit der Option -j wie oben umbenennen.

JMeter unterstützt Variablen im Protokolldateinamen. Wenn der Dateiname gepaarte einfache Anführungszeichen enthält, wird der Name als SimpleDateFormat -Format verarbeitet, das auf das aktuelle Datum angewendet wird, zum Beispiel: log_file='jmeter_'yyyyMMddHHmmss'.tmp' . Damit kann für jeden Testlauf ein eindeutiger Name generiert werden.

12.3 Ressourcenverbrauch

Zuhörer können viel Speicher verwenden, wenn viele Samples vorhanden sind.

Die meisten Zuhörer bewahren derzeit eine Kopie jedes Samples auf, das sie anzeigen, abgesehen von:

  • Einfacher Datenschreiber
  • BeanShell/JSR223-Listener
  • Mailer-Visualizer
  • Ergebnisse überwachen
  • 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.

12.4 CSV-Protokollformat

Das CSV-Protokollformat hängt davon ab, welche Datenelemente in der Konfiguration ausgewählt wurden. Nur die angegebenen Datenelemente werden in der Datei aufgezeichnet. Die Reihenfolge des Erscheinens der Spalten ist festgelegt und lautet wie folgt:

  • timeStamp - in Millisekunden seit dem 1.1.1970
  • verstrichen - in Millisekunden
  • Etikett - Musteretikett
  • Antwortcode - z . B. 200 , 404
  • Antwortnachricht - zB OK
  • Fadenname
  • Datentyp - zB Text
  • Erfolg - wahr oder falsch
  • Fehlernachricht – falls vorhanden
  • bytes - Anzahl der Bytes im Beispiel
  • sentBytes – Anzahl der für das Sample gesendeten Bytes
  • grpThreads – Anzahl der aktiven Threads in dieser Thread-Gruppe
  • allThreads – Gesamtzahl aktiver Threads in allen Gruppen
  • URL
  • Dateiname – wenn „ Save Response to File “ verwendet wurde
  • Latenz - Zeit bis zur ersten Antwort
  • connect - Zeit zum Verbindungsaufbau
  • Codierung
  • SampleCount - Anzahl der Proben (1, es sei denn, mehrere Proben werden aggregiert)
  • ErrorCount – Anzahl der Fehler (0 oder 1, es sei denn, mehrere Stichproben werden aggregiert)
  • Hostname – wo das Beispiel generiert wurde
  • IdleTime - Anzahl der Millisekunden der Leerlaufzeit (normalerweise 0)
  • Variablen , falls angegeben

12.5 XML-Protokollformat 2.1

Das Format des aktualisierten XML (2.1) ist wie folgt (Zeilenumbrüche werden anders sein):

<?xml version="1.0" encoding="UTF-8"?>
<Testergebnisse version="1.2">

-- HTTP-Beispiel mit verschachtelten Beispielen

<httpSample t="1392" lt="351" ts="1144371014619" s="true"
     lb="HTTP-Anfrage" rc="200" rm="OK"
     tn="Hören 1-1" dt="text" de="iso-8859-1" by="12407">
  <httpSample t="170" lt="170" ts="1144371015471" s="true"
        lb="http://www.apache.org/style/style.css" rc="200" rm="OK"
        tn="Hören 1-1" dt="text" de="ISO-8859-1" by="1002">
    <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Datum: Freitag, 7. April 2006 00:50:14 GMT
⋮
Inhaltstyp: text/css
</responseHeader>
    <requestHeader class="java.lang.String">MeinHeader: MeinWert</requestHeader>
    <responseData class="java.lang.String">body, td, th {
    Schriftgröße: 95 %;
    Schriftfamilie: Arial, Geneva, Helvetica, serifenlos;
    Farbe: Schwarz;
    Hintergrundfarbe: weiß;
}
⋮
</responseData>
    <cookies class="java.lang.String"></cookies>
    <method class="java.lang.String">GET</method>
    <queryString class="java.lang.String"></queryString>
    <url>http://www.apache.org/style/style.css</url>
  </httpBeispiel>
  <httpSample t="200" lt="180" ts="1144371015641" s="true"
     lb="http://www.apache.org/images/asf_logo_wide.gif"
     rc="200" rm="OK" tn="Hören 1-1" dt="bin" de="ISO-8859-1" by="5866">
    <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Datum: Freitag, 7. April 2006 00:50:14 GMT
⋮
Inhaltstyp: Bild/Gif
</responseHeader>
    <requestHeader class="java.lang.String">MeinHeader: MeinWert</requestHeader>
    <responseData class="java.lang.String">http://www.apache.org/asf.gif</responseData>
      <responseFile class="java.lang.String">Mixed1.html</responseFile>
    <cookies class="java.lang.String"></cookies>
    <method class="java.lang.String">GET</method>
    <queryString class="java.lang.String"></queryString>
    <url>http://www.apache.org/asf.gif</url>
  </httpBeispiel>
  <responseHeader class="java.lang.String">HTTP/1.1 200 OK
Datum: Freitag, 7. April 2006 00:50:13 GMT
⋮
Inhaltstyp: text/html; Zeichensatz=ISO-8859-1
</responseHeader>
  <requestHeader class="java.lang.String">MeinHeader: MeinWert</requestHeader>
  <responseData class="java.lang.String"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
⋮
<html>
 <Kopf>
⋮
 </head>
 <Körper>
⋮
 </body>
</html>
</responseData>
  <cookies class="java.lang.String"></cookies>
  <method class="java.lang.String">GET</method>
  <queryString class="java.lang.String"></queryString>
  <url>http://www.apache.org/</url>
</httpBeispiel>

- Nicht-HTTP-Beispiel

<Beispiel t="0" lt="0" ts="1144372616082" s="true" lb="Beispiel-Sampler"
    rc="200" rm="OK" tn="Hören 1-1" dt="text" de="ISO-8859-1" by="10">
  <responseHeader class="java.lang.String"></responseHeader>
  <requestHeader class="java.lang.String"></requestHeader>
  <responseData class="java.lang.String">Hören Sie 1-1</responseData>
  <responseFile class="java.lang.String">Mixed2.unknown</responseFile>
  <samplerData class="java.lang.String">ssssss</samplerData>
</Beispiel>

</testResults>

Beachten Sie, dass der Beispielknotenname entweder „ Beispiel “ oder „ httpSample “ lauten kann.

12.6 XML-Protokollformat 2.2

Das Format der JTL-Dateien ist für 2.2 und 2.1 identisch. Format 2.2 wirkt sich nur auf JMX-Dateien aus.

12.7 Beispielattribute

Die Beispielattribute haben folgende Bedeutung:

AttributInhalt
durchBytes
sbyGesendete Bytes
deDatenverschlüsselung
dtDatentyp
ecFehleranzahl (0 oder 1, es sei denn, mehrere Stichproben werden aggregiert)
hnHostname, auf dem das Beispiel generiert wurde
esLeerlaufzeit = Zeit, die nicht mit dem Abtasten verbracht wurde (Millisekunden) (im Allgemeinen 0)
PfundEtikett
ltLatenz = Zeit bis zur ersten Antwort (Millisekunden) – nicht alle Sampler unterstützen dies
ktConnect Time = Zeit zum Verbindungsaufbau (Millisekunden) - nicht alle Sampler unterstützen dies
n / AAnzahl aktiver Threads für alle Threadgruppen
ngAnzahl der aktiven Threads in dieser Gruppe
rcAntwortcode (z . B. 200 )
rmAntwortnachricht (z. B. OK )
sErfolgs-Flag ( wahr / falsch )
scStichprobenanzahl (1, es sei denn, mehrere Stichproben werden aggregiert)
tVerstrichene Zeit (Millisekunden)
tnThread-Name
tstimeStamp (Millisekunden seit Mitternacht am 1. Januar 1970 UTC)
VarnameWert der benannten Variablen
JMeter ermöglicht es, zusätzliche Variablen mit dem Testplan zu speichern. Derzeit werden die Variablen als zusätzliche Attribute gespeichert. Als Attributname wird der Testplan-Variablenname verwendet. Weitere Informationen finden Sie unter Beispielvariablen (oben).

12.8 Antwortdaten speichern

Wie oben gezeigt, können die Antwortdaten bei Bedarf in der XML-Protokolldatei gespeichert werden. Dadurch kann die Datei jedoch ziemlich groß werden, und der Text muss so codiert werden, dass er immer noch gültiges XML ist. Außerdem können keine Bilder eingefügt werden. Es können nur Beispielantworten vom Typ TEXT gespeichert werden.
Eine andere Lösung ist die Verwendung des Postprozessors Save_Responses_to_a_file . Dadurch wird für jede Probe eine neue Datei erstellt und der Dateiname mit der Probe gespeichert. Der Dateiname kann dann in die Beispielprotokollausgabe aufgenommen werden. Die Daten werden bei Bedarf aus der Datei abgerufen, wenn die Beispielprotokolldatei neu geladen wird.

12.9 Antwortdaten laden (lesen)

Um eine vorhandene Ergebnisdatei anzuzeigen, können Sie die Schaltfläche Datei „ Durchsuchen… “ verwenden, um eine Datei auszuwählen. Erstellen Sie bei Bedarf einfach einen Dummy-Testplan mit dem entsprechenden Listener darin.

Ergebnisse können aus Dateien im XML- oder CSV-Format gelesen werden. Beim Lesen aus CSV-Ergebnisdateien wird anhand des Headers (falls vorhanden) festgestellt, welche Felder gespeichert wurden. Um eine Header-lose CSV-Datei korrekt zu interpretieren, müssen die entsprechenden JMeter-Properties gesetzt werden.

JMeter löscht keine aktuellen Daten, bevor die neue Datei geladen wird, sodass Dateien zusammengeführt werden können. Wenn Sie die aktuellen Daten löschen möchten, verwenden Sie vor dem Laden der Datei den Menüpunkt: Ausführen  →  Löschen ( Strg  +  Umschalt  +  E ) oder Ausführen  →  Alles löschen ( Strg  +  E ) .

12.10 Listener-GUI-Daten speichern

JMeter kann jeden Listener als PNG-Datei speichern. Wählen Sie dazu den Listener im linken Bereich aus. Klicken Sie auf Bearbeiten  →  Knoten als Bild speichern . Es erscheint ein Dateidialog. Geben Sie den gewünschten Namen ein und speichern Sie den Listener.

Die Listener, die Tabellenausgaben erzeugen, können auch per Copy/Paste gespeichert werden. Wählen Sie die gewünschten Zellen in der Tabelle aus und verwenden Sie die Tastenkombination zum Kopieren des Betriebssystems (normalerweise Strg  +  C ). Die Daten werden in der Zwischenablage gespeichert, von wo sie in eine andere Anwendung, zB eine Tabellenkalkulation oder einen Texteditor, eingefügt werden können.

Abbildung 1 -
Abbildung 1 – Bearbeiten  →  Knoten als Bild speichern
Go to top