logo

JMeter Tutorial 2: DB, Web-Services und FTP

Von am 21.05.2018

In meinem letzten Blogartikel haben wir uns mit den Grundlagen von JMeter befasst, einen ersten Testplan geschrieben, und die Analyse mit verschiedenen Listeners ausgewertet. Aufbauend darauf, widmen wir uns im folgenden Beitrag einigen fortgeschrittenen Funktionen.

Dies ist keine Lektion für Anfänger. Um diesem Tutorial folgen zu können, ist es notwendig, die grundlegenden Kenntnisse von JMeter zu beherrschen, welche in diesem Beitrag behandelt werden. Auch grundlegende SQL-Kenntnisse sowie Erfahrungen mit phpMyAdmin sind von Vorteil.

Datenbank – Testing mit JMeter

Vorbereitungen

Im ersten Abschnitt dieses Tutorials werden wir einen Testplan zum Testen eines Datenbankservers erstellen, wiederum mehrere User simulieren, die parallel viele Datenbank-Requests an den Server senden.

Zu Beginn benötigen wir eine SQL-Datenbank mit einer Tabelle. Dafür verwende ich den lokalen Testserver XAMPP und phpMyAdmin als Admin-Panel. Natürlich kannst Du auch gerne ein anderes Datenbanksystem verwenden.

Nun erstelle ich eine kleine Tabelle mit ein paar Testdatensätzen. (siehe Abbildung) Der Name meiner Datenbank lautet: Personen.

Datenbanktabelle mit Testdaten

Datenbanktabelle mit Testdaten

Im nächsten Schritt müssen wir JMeter mit der Datenbank verbinden. Dazu benötigen wir den sogenannten MySQL-Connector, also einen Treiber, der uns über die ODBC-Programmschnittstelle einen Datenbankzugriff ermöglicht.

Dazu gehen wir in den Downloadbereich der Seite: dev.mysql.com

Etwas weiter unten gibt es den MySQL-Connector als Zip-File zum Download. Den Zip-Folder entpacken wir und suchen uns das darin enthaltene JAR-File heraus. Bei mir lautet der Dateiname: mysql-connector-java-5.1.46. Bei Verwendung einer anderen (aktuelleren) Version wird die Datei logischerweise mit einer anderen Versionsnummer gekennzeichnet sein.

Diese Datei kopieren wir nun in den Ordner „lib“ unseres JMeter-Verzeichnisses.

Testplan

Wie wir es bereits aus dem letzten Tutorial kennen, beginnen wir auch hier unseren Testplan wieder mit der Erstellung einer Thread-Group. Um es einfach zu halten, simulieren wir 10 User zu je 10 Wiederholungen.

Thread-Gruppe

Thread-Gruppe

Als nächstes fügen wir ein JDBC-Connection-Configuration-Element ein der Thread-Group ein. (Rechtsklick auf Thread-Group / Hinzufügen / Konfigurationselement / JDBC-Connection-Configuration).

Hier können wir nun im Abschnitt „Database Connection Configuration“ eine Verbindung zur Datenbank herstellen. In der Datenbank-URL geben wir den Link zur Datenbank an, und am Ende (Nach dem Schrägstrich) den Namen der Datenbank. Gleich darunter geben wir den Namen des Treibers, welchen wir vorhin installiert haben, an. (com.mysql.jdbc.Driver)

Wichtig ist hier auch das Feld „Variable Name for created pool“. Damit geben wir der Datenbankverbindung den Namen „test“. Wozu wir das brauchen, sehen wir später.

JDBC-Connection Configuration

JDBC-Connection Configuration

Nun können wir uns endlich dem Wesentlichen widmen. Wir erstellen einen JDBC-Request (Rechtsklick auf Thread-Group / Hinzufügen / Sampler / JDBC Request).

Mit diesem Sampler können wir nun einen SQL-Request an die Datenbank senden. Ich gebe nun einen SQL-Befehl zur Auswahl aller Datensätze der Tabelle Personen im Feld Query ein:

select * from personen

Im Feld Query Type wählen wir „Select Statement“ aus. Auch hier gibt es wieder ein Feld in dem ein Variable-Name zu vergeben ist. Auch hier geben wir wieder den Namen „test“ an, um JMeter zu sagen, auf welche Datenbankverbindung es sich beziehen soll. Jeder JDBC-Request benötigt also einen klaren Bezug zu einer Datenbank. Selbstverständlich können sich auch mehrere Requests auf dieselbe Datenbank beziehen.

JDBC-Request

JDBC-Request

Damit wir unser Ergebnis auch betrachten können, benötigen wir noch einen Listener. Was ein Listener ist, haben wir bereits im vorherigen Kurs kennen gelernt. Ich füge einen Results-Tree und eine Ergebnistabelle hinzu.

Mein Testplan sieht nun so aus:

Testplan mit JDBC-Connection

Testplan mit JDBC-Connection

Ergebnis

Nun können wir den Test ausführen, und die Ergebnisse im Results Tree betrachten. Wie wir hier sehen, haben alle Requets funktioniert. Im Reiter „Response data“ sehen wir auch die zurückgelieferten Daten.

View Results Tree mit Ergebnissen der JDBC-Requests

View Results Tree mit Ergebnissen der JDBC-Requests

Web-Services (API)

Was ist ein Web-Service?

Ein Web-Service ist ein Dienst zur Kommunikation zwischen Client und Server auf Basis von HTTP oder HTTPS über ein Netzwerk. Dabei werden meist Daten ausgetauscht und Funktionen ausgeführt. Jeder Web-Service besitzt eine URI (Uniform Resource Identifier) über die wer eindeutig identifizierbar ist.
Wenn Du beispielsweise über eine Online-Plattform einen Flug buchst oder eine Bestellung abwickelst, kommen dabei Webservices zum Einsatz.

Webservice Schnittstellen: REST und SOAP

Bei REST (Representational State Transfer) wird versucht, die Schnittstelle auf eine Reihe vordefinierter Standartoperationen (GET, PUT, POST, DELETE,…) zu beschränken. Der Schwerpunkt von REST liegt auf der Maschine-zu-Maschine-Kommunikation und der Interaktion von zustandslosen Ressourcen. Welches Datenformat die Serverantwort liefert, wird durch REST nicht spezifiziert!

Rest-Prinzipien

  • Adressierbarkeit: Jeder Dienst bzw. jede Ressource hat einen eindeutigen URI (Uniform Resource Identifier)
  • Unterschiedliche Repräsentationen: Je nach Anwendung kann ein REST Server unterschiedliche Repräsentationen der Daten ausliefern (JSON, XML, HTML,…)
  • Zustandslosigkeit (stateless)

Jede Anfrage enthält sämtliche Informationen die zur Abarbeitung nötig sind

SOAP (Simple Object Access Protokoll) ist ein vom World Wide Web Consortium (W3C) unterstützter Standard für den Nachrichtenaustausch zwischen verteilten Systemen. Zur Repräsentation von Daten stützt sich SOAP meist auf XML und zu deren Übertragung auf Internetprotokolle.

Testen eines REST-Web-Services

Wie gewohnt, beginnen wir auch hier wieder mit einer Thread-Group und fügen dieser einen http-Request hinzu. (Hinzufügen / Sampler / http-Request)

Als nächstes benötigen wir eine frei verfügbare REST-API, die wir später auch testen können.
Die Website https://openweathermap.org/  stellt globale Wetterdaten kostenlos zur Verfügung und liefert diese über eine API aus.

Die API kann nur mit gültigem API-Key genutzt werden, dessen Verfügbarkeit eine Registrierung voraussetzt. Diese Registrierung ersparen wir uns aber, und verwenden stattdessen einen frei verfügbaren Test-API-Call, der zwar keine Verbindung zum echten API-Dienst hat, aber dennoch Daten zurückliefert.

Auf folgenden Unterseiten können wir nochmals genau nachlesen, wie auf die API zugegriffen werden kann und wie ein API-Call aufgebaut wird:

https://openweathermap.org/appid
https://openweathermap.org/current

Im zweiten Link finden wir unter anderem auch ein Beispiel für einen API-Call der uns Wetterdaten über London liefert:

api.openweathermap.org/data/2.5/weather?q=London

Wenn wir den Call nun im Browser aufrufen erhalten baut sich die nachstehende URL zusammen, und liefert und ein JSON-Objekt retour.

http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22

Soweit so gut! Bevor wir aber jetzt wieder mit JMeter weiterarbeiten, wollen wir noch genauer verstehen, woraus sie der API-Call zusammensetzt und was die einzelnen Fragmente darstellen. Die nachstehende Liste soll dabei Aufschluss geben:

  • samples.openweathermap.org = Webserver und/oder API-Name
  • /data/2.5/weather = Pfad
  • q=London,uk = 1. Parameter “q”: Stadt und Länderkürzel
  • appid=b6907d289e10d714a6e88b30761fae22 = 2. Parameter: appid

Jetzt müssen wir den Call nur noch dem Testplan hinzufügen. Den Servername und den Pfad kopieren wir einfach in das entsprechende Feld. Die beiden Parameter fügen wir als Key-Value-Pairs der Tabelle hinzu. Am Ende sollte es dann so aussehen:

HTTP-Request

HTTP-Request

Wenn wir dem Testplan nun einen Listener hinzufügen und dann ausführen, werden wir sehen, dass der Request das JSON-Objekt zurückliefert.

Response Data

Response Data

FTP-Requests

Im unserem dritten und letzten Abschnitt lernen wir, wie man eine FTP-Site mit JMeter testet. Auch hier erstellen wir wieder eine Thread-Gruppe, mit der wir später einen Benutzer simulieren werden. Dieser soll beim Ausführen unseres Tests eine Datei vom Server herunterladen.

Dazu fügen wir nun einen FTP-Request der Thread-Group hinzu. (Rechtsklick auf die Thread-Group / Hinzufügen / Sampler / FTP-Anfrage)

Nun benötigen wir noch einen Webserver mit FTP-Zugang. Ich verwende dafür einen meiner privaten Webspaces und gebe deren Verbindungsdaten in der Detailansicht der FTP-Anfrage ein (Servername, Username, Passwort).

FTP Request

FTP Request

Als nächstes stelle ich über den FTP-Client eine Verbindung zum Server her und lade via Drag and Drop eine Datei (folder.php) in das Root-Verzeichnis. Es bleibt dir selbst überlassen, welche Datei du hierfür verwendest. Wichtig ist nur, dass sie nicht zu groß ist.

Dateiverzeichnis

Dateiverzeichnis

Als nächstes wollen wir mit JMeter diese Datei vom Server wieder runterladen. Dafür ergänzen wir die Details der FTP-Anfrage wie folgt:

Wir geben den Namen der Datei an (folder.php), sowie den lokalen Speicherort an. Wichtig ist außerdem auch, dass wir die Get-Methode auswählen.

FTP-Request mit Dateipfaden (JMeter)

FTP-Request mit Dateipfaden

Nun können wir noch einen Listener hinzufügen und den Test starten. Wenn Du alles richtig gemacht hast, sollte nun die angegebene Datei vom Webserver in das angegebene Verzeichnis transferiert werden.

In diesem Tutorium haben wir uns fortgeschrittenes JMeter-Wissen angeeignet und dabei gelernt, wie man die Verfügbarkeit von Daten in einer Datenbank, die Funktion eines Web-Services, sowie den Datentransfer via FTP prüft. Damit sind wir nun in der Lage, umfassende Benutzerinteraktionen zu simulieren und interaktive Systeme zu testen.

The comments are closed.