Voraussetzung
Dieses Tutorial enthält Strategien und Verfahren zum Erstellen und Ausführen eines dynamischen Lasttests gegen einen ArcGIS Server-Dienst und setzt voraus, dass Sie mit einigen Grundlagen von Apache JMeter vertraut sind. Wenn Sie neu bei Apache JMeter sind, lesen Sie bitte unseren Performance Testing with Apache JMeter (An Introduction).

JMeter Teststrategien
Bevor wir in die Details zum Aufbau und zur Validierung eines datengesteuerten Lasttests eintauchen, ist es wichtig, zunächst einige testbezogene Strategien speziell für JMeter zu besprechen. Diese Tipps unterscheiden sich von den in unserem Recommended Strategies for Load Testing an ArcGIS Server Deployment Artikel aufgeführten Punkten, der für die Verwendung mit jedem Testwerkzeug gedacht ist (aber auch auf JMeter anwendbar ist).
Ein guter Testplan beginnt mit einer ordentlichen Ordnerstruktur
Eine Taktik, die bei der Verwaltung mehrerer Tests und Berichte in JMeter helfen kann, ist die Implementierung einer einfachen, aber konsistenten Ordnerstruktur zur Speicherung der verschiedenen Elemente jedes Tests. Der Haupttreiber für einen JMeter-Test ist die JMX-Datei… hier befindet sich die gesamte Testlogik. Aber wenn Sie weiterhin Funktionen zu Ihrem Test hinzufügen und ihn mehrfach ausführen, werden Sie über die Verwaltung nur der einzelnen JMX-Datei hinauswachsen.
Ein wenig Organisation hilft enorm… das manuelle Erstellen einiger wichtiger Verzeichnisse kann helfen, die verschiedenen JMeter-Dateien zu verwalten, die im Laufe der Zeit auf der Festplatte gespeichert werden.
Hinweis: Dieser Ansatz erfolgt über das Dateisystem des Betriebssystems und nicht direkt über Apache JMeter.
Eine empfohlene Ordnerstruktur:
- name_of_project (die JMX-Datei sollte darin unter demselben Namen gespeichert werden)
- datasets
- Enthält Datendateien, die unsere Anfragen bei jeder Testiteration dynamisch machen
- logs
- Enthält Debug-Protokolle der JMeter-Testumgebung
- reports
- Enthält von JMeter generierte Berichte
- results
- Enthält JMeter-Testergebnisdateien
- Dies sind die RAW-Ergebnisdateien und das wichtigste Artefakt des Tests
- uploads
- Enthält Dateien, die hochgeladen werden sollen
Innerhalb des "project"-Ordners würden 5 leere Verzeichnisse erstellt: datasets, logs, reports, results und uploads.
User Defined Variables
Wie die oben erwähnte Ordnerstruktur ist die Verwendung von User Defined Variables eine Testkonstruktionsstrategie, die Portabilität, Wiederverwendbarkeit und das Teilen von Testplänen fördert. Einige häufig verwendete Variablen bei einem ArcGIS-Diensttest sind:
- ProjectFolder
- WebServerName
- ServerInstanceName
- SecurePort
- ServiceName
Im JMeter-Testplan können diese Variablen einfach mit der Notation wie: ${ServiceName} referenziert werden, was zur Ausführungszeit automatisch durch den Dienstnamen ersetzt wird. Die Verwendung von Variablen ist weniger fehleranfällig als die Verwendung von fest codierten Werten, wenn Sie den Test jemals in einer anderen Umgebung verwenden möchten. Wenn der Test dann gegen eine andere Bereitstellung ausgeführt wird, muss der Tester nur die Variablendefinition anpassen. Bei Testplänen mit vielen definierten HTTP-Anforderungsbeispielen kann dies eine echte Zeitersparnis sein.
Die richtige Thread Group wählen
Es gibt mehrere Möglichkeiten zur Definition Ihrer Step Load Logik. Sie sind alle ähnlich und bieten dieselbe Grundfunktionalität, weisen jedoch einige subtile Unterschiede auf. Thread Group ist eine gute, sichere Wahl, die maximale Testportabilität bietet, da sie im Kernprodukt von JMeter enthalten ist.
Trotzdem kann die Verwendung des JMeter Plugins Manager (installiert als Teil des Performance Testing with Apache JMeter (An Introduction)) zum Hinzufügen der „Custom Thread Groups“ dem Testumfeld einige weitere nützliche Optionen in diesem Bereich bieten.
Unterstützung für Custom Thread Groups in JMeter hinzufügen
Vom Plugins Manager innerhalb von JMeter (Optionen-->Plugins Manager):
- Select Available Plugins
- Finden und auswählen Custom Threads Groups
- Select Apply Changes and Restart JMeter

Sobald das „Custom Thread Groups“-Plugin installiert ist, ist eine empfohlene Alternative zur Thread Group die bzm – Concurrency Thread Group, da sie eine unkomplizierte Step-Konfiguration ermöglicht, die den definierten Druck visuell darstellt – ein großartiges Validierungsmerkmal aus Sicht des Testens.
Verwendung von Transactions zum Gruppieren von Requests
Das Hinzufügen von Transactions zu Ihrem Test kann eine hilfreiche Möglichkeit sein, eine oder mehrere ähnliche Anfragen zu gruppieren, die zur gleichen „Operation“ gehören. Zum Beispiel das Laden einer Anwendung, ein Navigationskarten-Zoom oder eine Formularsuche. Die Verwendung einer solchen Transaction kann die Analyse erheblich erleichtern, da sie die Operation (z.B. Formularsuche) in einen eigenen logischen „Container“ isoliert mit nur den Anfragen, die für deren Funktion verantwortlich sind. Das Zusammenwerfen vieler Anfragen für viele verschiedene Funktionen oder Dienste in eine große Gruppe kann das Nachteststudium sehr erschweren. Mit Transactions kann jeweils analysiert werden, wie jede Operation performt.
Hinweis: Kartenanwendungen und Workflows variieren; einige Operationen bestehen aus vielen Requests in einer Transaction, andere nur aus einem Request.
Hinweis: Die Performance verschiedener Operationen in einem Test skaliert nicht immer gleich; einige können besser abschneiden als andere; schlechte Performance einzelner Operationen (durch eindeutigen Transaction-Namen) zu identifizieren ist gute Analyse.
Validieren Sie, dass die Antwort zurückgegeben wird
< P > Sicherzustellen , dass die erwartete Antwort vom Remote - Server zurückkommt , ist genauso wichtig wie das Senden der Anfrage . Aus verschiedenen Gründen reicht es beim Testen einer ArcGIS - Ressource wie einem Dienst nicht aus , sich nur auf den HTTP - Statuscode (z.B. HTTP 200) zu verlassen . </ P >< P > Eine Möglichkeit , die Antwort zu validieren , besteht darin , nach Schlüsselwörtern im Header oder Body zu suchen . Wenn ein PNG - Bild angefordert wird , aber stattdessen eine textuelle Fehlermeldung zurückgegeben wird , markiert eine Response Assertion - Regel , die nach „image/png“ im Header sucht , den Versuch als
fehlgeschlagen . Wenn es im Header vorhanden ist , gilt es als
bestanden -Anfrage . </ P >< P >< STRONG >< FONT color = "#FF0000" > Hinweis : Für jede HTTP - Anfrage , die im JMeter - Testplan überprüft werden muss , muss eine Response Assertion - Regel hinzugefügt werden . </ FONT ></ STRONG ></ P >< H1 id = "toc-hId--1217238839" >< SPAN > Erstellen eines datengesteuerten Export Map Tests in JMeter </ SPAN ></ H1 >< P >< SPAN > Mit den oben genannten Strategien kann ein flexibler und vielseitiger JMeter-Testplan erstellt werden , der bei jeder Anfrage einen anderen Interessensbereich von einem ArcGIS-Kartendienst abruft . Ein „dynamischer Test“ ist ideal , da er die Serverressourcen stärker beanspruchen kann als wenn jedes Mal dieselben Daten angefordert werden . Ein solcher Test spiegelt realistischere Bedingungen wider . </ SPAN ></ P >< P > Als Performance-Tester möchten wir etwas wie die unten stehende Export Map Request-Signatur nehmen und in einen dynamischen JMeter-Lasttest umwandeln : </ P >< P > </ P >< P > </ P >< P > </ P >< pre class = "lia-code-sample language-markup" >< code >
https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show:0,1,2&bbox=-108.76228873935,31.0409016308382,-88.8526618315487,46.9686031570791&bboxSR=4326&imageSR=4326&size=1477,827&f=image </ code ></ pre >< P > </ P >< P > </ P >< P > </ P >< P >< SPAN > JMeter bietet mehrere Methoden zum Erstellen von HTTP-Payloads in einem Testplan wie : </ SPAN ></ P >< UL >< LI >< SPAN > Die Anfragen manuell erstellen (z.B. per Hand) </ SPAN ></ LI >< LI >< SPAN > Den eingebauten Recorder verwenden , um Browseranfragen direkt aufzuzeichnen </ SPAN ></ LI >< LI >< SPAN > Importieren von einer anderen Quelle
Dieser Artikel konzentriert sich auf die erste Methode, die manuelle Praxis zur Erstellung eines JMeter-Tests zu zeigen, wie man die Komponenten der Anfrage zusammenstellt und wie man ihr Verhalten „dynamisch“ macht. Dieser datengetriebene Test ruft den SampleWorldCities-Kartendienst (der auf Ihrer lokalen Bereitstellung läuft) über die Exportfunktion auf.
Hinweis: Nach vielen Maßstäben gilt SampleWorldCities als ein kleiner und sehr leichter Kartendienst, aber da er bei ArcGIS Server-Bereitstellungen allgegenwärtig ist, eignet er sich ideal, um die Erstellung eines Lasttests durchzugehen.
Erstellen und Speichern eines neuen Testplans
- Erstellen Sie im Dateisystem die oben erwähnte Ordnerstruktur:
- Der Name des Projektordners wird sampleworldcities1 sein
- Es wird angenommen, dass dieser existiert unter:
- Erstellen Sie die unterstützenden Projektverzeichnisse:
- Zum Beispiel: datasets, logs, reports, results, uploads
- Starten Sie JMeter
- Speichern Sie den neuen Testplan, den JMeter erstellt, in dem gerade erstellten Ordner sampleworldcities1
- Nennen Sie den Testplan: sampleworldcities1.jmx
- Es wird angenommen, dass der vollständige Pfad des jmx-Testplans ist:
- C:\JMeter Tests\sampleworldcities1\sampleworldcities1.jmx

- Im Dateisystem würde der Projektordner folgendermaßen aussehen:

Variablen zum Testplan hinzufügen
- Klicken Sie innerhalb von JMeter auf den Testplan (z.B. sampleworldcities1)
- Klicken Sie unten im Abschnitt Benutzerdefinierte Variablen auf Hinzufügen
- Für Name geben Sie ein: ProjectFolder
- Für Wert geben Sie ein: C:\JMeter Tests\sampleworldcities1
- Für Name geben Sie ein: WebServerName
- Für Wert geben Sie ein: yourwebadaptor.domain.com
- Geben Sie den Hostnamen Ihres Web Adaptors oder ArcGIS Servers ein
- Für Name geben Sie ein: ServerInstanceName
- Für Wert geben Sie ein: server
- Einige Bereitstellungen verwenden einen anderen Wert, z.B. arcgis
- Für Name geben Sie ein: SecurePort
- Für Wert geben Sie ein: 443
- Wenn auf eine ArcGIS Server-Instanz verwiesen wird, verwenden Sie 6443
- Für Name geben Sie ein: ServiceName
- Für Wert geben Sie ein: SampleWorldCities

Hinzufügen der bzm – Concurrency Thread Group zum Testplan
- Klicken Sie mit der rechten Maustaste auf den sampleworldcities1-Testplan und wählen Sie unter Hinzufügen-->Threads (Benutzer) die bzm – Concurrency Thread Group aus

- Klicken Sie unter dem sampleworldcities1-Testplan auf bzm – Concurrency Thread Group
- Konfigurieren Sie die Step-Load-Logik mit Folgendem:
- Zielkonkurrenz: 10
- Anstiegszeit (min): 20
- Anstiegs-Schritte-Zähler: 10

Mit dem bzm – Concurrency Thread Group Plugin kann die konfigurierte Step-Load-Logik leicht gesehen und visuell im obigen Diagramm bestätigt werden. Dieser Test wird für 20 Minuten ausgeführt, erhöht den Druck in 10 verschiedenen Schritten (fügt alle 2 Minuten jeweils einen gleichzeitigen Test-Thread hinzu), erreicht maximal 10 gleichzeitige Test-Threads und stoppt dann.
Hinzufügen einer Transaktion zu einem Testplan
- Klicken Sie mit der rechten Maustaste auf bzm – Concurrency Thread Group und wählen Sie unter Hinzufügen-->Logikcontroller den Transaction Controller aus

- Sobald hinzugefügt, geben Sie dem Transaction Controller (z.B. dem Workflow-Vorgang) einen aussagekräftigen Namen, um ihn von anderen im Test vorhandenen zu unterscheiden
- Geben Sie als Namen ein: MapScale_9M
- Die 9M steht für den Kartenmaßstab von 9 Millionen (z.B. 1:9.244.649)
- Einer oder mehrere HTTP Requests können nun diesem Transaction Controller hinzugefügt werden
- Wählen Sie „Generate parent sample“ im Abschnitt des Transaction Controllers aus
- Diese Option kann bei der Validierung helfen, da sie die jeweiligen Anfragen unter dem Transaktionsobjekt anzeigt

Hinzufügen einer HTTP-Anfrage
Jetzt wollen wir eine datengetriebene HTTP-Anfrage erstellen, die bei jeder Anfrage einen anderen räumlichen Bereich abfragt. Dies geschieht mit einer regulären JMeter HTTP-Anfrage.
- Klicken Sie mit der rechten Maustaste auf den Transaction Controller namens MapScale_9M und wählen Sie unter Hinzufügen-->Sampler die HTTP Request aus

- Die neue, leere HTTP-Anfrage sollte folgendermaßen aussehen:

Die HTTP-Anfrage dynamisch machen
Eine Anfragesignatur für export map wie folgt:
https://yourwebadaptor.domain.com/server/rest/services/SampleWorldCities/MapServer/export?dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=-108.76228873935%2C31.0409016308382%2C-88.8526618315487%2C46.9686031570791&bboxSR=4326&imageSR=4326&size=1477%2C827&f=image
enthält mehrere URL-Komponenten, die an verschiedenen Stellen auf der HTTP Request-Seite platziert werden müssen (um maximale Flexibilität und Wartbarkeit zu gewährleisten). Beginnen wir mit den Schlüssel-/Wert-Paaren der Anfrage durch Trennung der URL-Parameter.
Unten wurde der Parameterabschnitt so geändert, dass er mehrere JMeter-Variablen anstelle der ursprünglichen Werte enthält. Es ist in Ordnung, dass einige Teile auf JMeter-Variablennamen verweisen, die im Test noch nicht erstellt wurden.
- Kopieren Sie Folgendes und fügen Sie es in die HTTP Request ein, indem Sie unten auf Aus Zwischenablage hinzufügen klicken:
dpi=96&transparent=true&format=png32&layers=show%3A0%2C1%2C2&bbox=${bbox_9244649}&bboxSR=${sr_9244649}&imageSR=${sr_9244649}&size=${width_9244649}%2C${height_9244649}&f=image
Dies hilft dabei, mehrere notwendige Teile einzurichten, um bestimmte Teile der HTTP-Anfrage dynamisch zu machen.
<\/span><\/P>Im Abschnitt Web Server:Für Protocol eingeben: https<\/LI>Für Server Name oder IP eingeben: ${WebServerName}<\/LI>Für Port Number eingeben: ${SecurePort}<\/LI><\/UL><\/LI>Im Abschnitt HTTP Request:Für Path eingeben: \/${ServerInstanceName}\/rest\/services\/${ServiceName}\/MapServer\/export<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Hinzufügen einer Response Assertion<\/SPAN><\/H2>Rechtsklick auf die HTTP Request, und unter Add-->Assertions, wählen Sie Response Assertion aus<\/LI><\/UL>
<\/span><\/P>Ändern Sie mehrere Parameter der Response Assertion:Unter Field to Test wählen Sie: Response Headers<\/LI>Unter Pattern Matching Rules wählen Sie: Contains<\/LI>Unter Patterns to Test klicken Sie auf Add und geben ein: image\/png<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Hinzufügen einer CSV Data Set Config<\/H2>Rechtsklick auf den Test Plan (z.B. sampleworldcities1), und unter Add-->Config Element wählen Sie CSV Data Set Config aus<\/LI><\/UL>
<\/span><\/P>Wählen Sie die CSV Data Set Config aus und benennen Sie sie um in CSV Data Set Config -- 9MDie Vergabe eines eindeutigen Namens kann bei der Wartung und Verwaltung helfen, wenn mehrere Datendateien innerhalb eines Tests verwendet werden (z.B. eine Datei für die Bounding Box jeder Kartenmaßstabs)<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P>Mit einem Texteditor füllen Sie eine leere CSV-Datei mit den folgenden 16 Datenzeilen:<\/LI><\/UL>bbox,width,height,mapUnits,sr,scale<\/SPAN><\/FONT><\/P>"-108.76228873935,31.0409016308382,-88.8526618315487,46.9686031570791",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"23.1282001284589,34.337748761293,43.03782703626,50.2654502875339",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"-117.052786808947,35.3545948648786,-97.1431599011459,51.2822963911194",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"-100.83549484975,36.0637839078502,-80.9258679419492,51.991485434091",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"17.7030587822399,34.3302705716379,37.6126856900409,50.2579720978788",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"32.2827904735659,37.2792197897781,52.192417381367,53.2069213160189",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"0.222469446585188,35.0562794764081,20.1320963543862,50.9839810026489",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"100.262489726575,20.8660021309943,120.172116634376,36.7937036572352",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"72.4186084471192,22.1748804724666,92.3282353549203,38.1025819987075",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P>"-61.2094273153097,-26.7402777397378,-41.2998004075086,-10.812576213497",1280,1024,esriDecimalDegrees,4326,9244649<\/SPAN><\/FONT><\/P}><... truncated ...> Zeit (Antwortzeit)<\/LI>Größe in Bytes (Header und Body)<\/LI>Fehleranzahl<\/LI>Antwortcode<\/LI>ContentType<\/LI><\/UL><\/LI><\/UL><\/LI><\/UL>Hinweis: Diese Informationen sind hervorragend zur Validierung der Testwiedergabe geeignet, aber auch nützlich für die Leistungsfehlerbehebung<\/FONT><\/STRONG><\/P>
<\/span><\/P>Da dieser Test die export map Funktion ausführt, würde eine Visualisierung des angeforderten Bildes auch bei der Validierung des Testplans helfen.Wenn Sie auf den Tab Response data klicken und die MapScale_9M Transaktion erweitern, sollte das angeforderte Bild angezeigt werden.Wiederholen Sie dies bei Bedarf für andere MapScale_9M Transaktionen<\/LI><\/UL><\/LI>Das Durchschalten mehrerer Anfragen sollte unterschiedliche Bilder zeigen, was die Erstellung eines datengetriebenen export map Load Tests in JMeter validiert<\/LI><\/UL><\/LI><\/UL>
<\/span><\/P> <\/P>
<\/span><\/P>Speichern der letzten Änderungen<\/H2>Seit dem letzten Speichern wurden viele Änderungen vorgenommen.<\/P>Speichern Sie den TestplanDatei-->Speichern<\/LI><\/UL><\/LI><\/UL>Um den in diesem Artikel verwendeten Apache JMeter Testplan herunterzuladen, siehe: sampleworldcities1.zip<\/A><\/P>Um eine Version dieses Apache JMeter Testplans mit mehr Details zu weiteren Kartenmaßstäben herunterzuladen, siehe:
sampleworldcities2.zip<\/A><\/P>