Ziel eines Lasttests ist es, mögliche Probleme innerhalb der Infrastruktur einer Anwendung zu identifizieren und zu verbessern. Dafür müssen im Vorfeld bestimmte Kriterien und Anforderungen festgelegt werden, mit denen die Ergebnisse des Lasttests verglichen werden können. Konkrete Anwendungsanforderungen können zum Beispiel sein:
- Anzahl der Nutzer, die die Anwendung gleichzeitig verarbeiten soll
- Maximale Antwortzeit
- Maximaler Speicher- und CPU-Verbrauch
- Verhalten der Anwendung im Falle von Fehlern oder extremen Höchstlasten
Einer der wichtigsten Aspekte von Lasttests ist die Fähigkeit, eine reale Belastung der Anwendung zu imitieren. Es reicht nicht aus, die Anzahl der gleichzeitigen Nutzer für die Ziellast zu bestimmen. Getestete Anwendungen könnten in der Produktion unter der gleichen Ziellast versagen, die während der Testphase verwendet wurde. Ein Grund dafür kann sein, dass die Anforderungen in dem Lasttest nicht dem der tatsächlichen Nutzung in der Produktivumgebung entsprechen. Beispielsweise wurde in einem Lasttest auf der Testumgebung die Last langsam Stück für Stück erhöht, in der Produktion erfolgt dagegen aber ein schlagartiger und schneller Anstieg der Last, worauf das System anders reagiert und möglicherweise zusammenbricht. Deshalb sollte bei der Lasttest-Ausführung nicht nur darauf geachtet werden, wie hoch die Ziellast ist, sondern auch wie die Last während der Testausführung verteilt wird.
Ramp-Up und Ramp-Down in Testszenarios
Es gibt viele Parameter, die für die Lastverteilung verantwortlich sind (z.B. Anzahl der Threads und Dauer des Lasttests). Weitere wichtige Paramater sind das Ramp-Up und Ramp-Down. Das Ramp-Up ist die Zeitspanne, die benötigt wird, um alle Testnutzer zur Testausführung auf das Zielsystem zu bringen. Ramp-Down dagegen bezeichnet die Zeitspanne, in der Testnutzer nicht mehr auf das Zielsystem zugreifen und sich damit die Last verringert. So vielfältig, wie die Einsatzmöglichkeiten eines Systems sind, so vielfältig können auch die Ramp-Up‘s und Ramp-Down’s gestaltet werden. In diesem Artikel werden einige Möglichkeiten dargestellt und erklärt, für welche Anwendungsfälle sich das jeweilige Szenario eignet.
Ein Ramp-Up kann beispielsweise so gestaltet werden:
Das oben abgebildete Szenario ist nicht realistisch und dadurch ist eine solche Lastverteilung nicht sinnvoll. Bei einer Webanwendung greifen die Nutzer in der Regel mehr oder weniger schrittweise auf die Website zu und die Services haben genügend Zeit, sich anzupassen und entsprechend zu skalieren. Das Ramp-Up sollte sich an diesen Anforderungen orientieren. In vielen Fällen reicht es aus, ein lineares Ramp-Up zu erstellen, bei dem die Nutzer nach und nach auf die Website zugreifen.
Lineares Ramp-Up
Dieser Ansatz eignet sich besonders, wenn hauptsächlich die Ziellast von Relevanz ist. Das System hat hier Zeit, zu skalieren und sich an die Last anzupassen. Allerdings ist die Auswertung der Ergebnisse teilweise schwierig. Wenn der Server unter einer bestimmten Last während der Durchführung nicht optimal reagiert, ist es schwierig, die problematische Lastgrenze zu bestimmen. Es kann nicht genau gesagt werden, welche Last der Service bewältigen kann und welche nicht.
Aus diesem Grund ist aus unserer Erfahrung heraus eine stufenweise Belastung zu empfehlen.
Stufenweises Ramp-Up
Spike-Test
Ein weiteres Beispiel für den Vorteil der Flexibilität der Last sind sogenannte Spike-Tests. Bei diesem wird die Anwendung einer unerwarteten Laststeigerung und -senkung ausgesetzt, um zu sehen, wie sich die Anwendung in diesem Fall verhält und ob sie in der Lage ist, solche Spitzen zu bewältigen. Diese Testart eignet sich für sprunghaft ansteigende Zugriffszeiten, wie beispielsweise Verkäufe am Black Friday.
Stufenweises Ramp-Down
Ein Ramp-Down wird eingesetzt, um zu erkennen, wie sich ein System von einer hohen Last erholen kann. In den Plateaus kann beobachtet werden, bei welcher Last sich das System wieder fängt und die Anfragen wieder erfolgreich bearbeiten kann.
Umsetzung in JMeter
Um das Szenario Design in JMeter umsetzen zu können, werden sogenannte Thread Groups benötigt. Unter „Testplan > Rechtsklick > Add > Threads > Thread Group“ kann eine neue Gruppe hinzugefügt und konfiguriert werden.
Leider unterstützt JMeter von Haus aus kein stufenweises Ramp-Up. Dieses kann allerdings mit dem Plugin „Ultimate Thread Group“ (https://jmeter-plugins.org/wiki/UltimateThreadGroup/#Ultimate-Thread-Group) abgebildet werden. Dieses Plugin bietet eine sehr starke Flexibilität bei der Lastverteilung. Die Ultimate Thread Group ähnelt dem Standard-JMeter-Element „Thread Group“ und kann wie folgt hinzugefügt werden: „Testplan > Rechtsklick > Add > Threads > jp@gc – Ultimate Thread Group“.
Fazit
Mit den in diesem Artikel dargelegten Informationen können Sie Ihre Lasttests mit JMeter erfolgreich implementieren. Sollten Sie dazu Fragen haben oder nicht wissen, wie Sie ein Szenario für Ihre Anwendung gestalten können unterstützen wir Sie gern bei der Vorbereitung, Umsetzung und der Interpretation der Testergebnisse. Kontaktieren Sie uns oder nutzen Sie unsere JMeter-Schulung, um sich vertieftes Wissen anzueignen.
Wie es nach dem Scenario Design weiter gehen kann und wie Lasttests ausgewertet werden, erfahren Sie in einem unserer nächsten Artikel.