Navigation überspringen

Lasttest mit Apache JMeter - ein Erfahrungsbericht

Lasttests sind essentiell für eine Performanceanalyse oder Systembewertung. Sie ermöglichen es, die technische Einsatzreife neuer Applikationen präzise einzuschätzen, die zugrunde liegende IT-Infrastruktur richtig zu dimensionieren und die System-Performance zu optimieren. Schwachstellen und Unzulänglichkeiten beeinträchtigen nicht nur die Zufriedenheit und die Bereitschaft des Endkunden bzw. Anwenders, das System zu nutzen. Überlastete Komponenten können schließlich ausfallen und dadurch weitere Probleme verursachen. ITGAIN löst derartige Fragestellungen mit den für diese Phase des Entwicklungsprozesses geeigneten Methoden und Werkzeugen. 

Unser systematisches Vorgehen lässt sich dabei an folgendem Anwendungsfall exemplarisch darstellen: In einem internen Projekt lautete die konkrete Aufgabe, für die unternehmenskritische Software zur Leistungsabrechnung einen Lasttest zu entwickeln. Hier werden Ressourcen und Budgets geplant, Rückmeldungen erfasst und Berichte sowie Abrechnungen erstellt. Jeder Mitarbeiter ist angehalten, die Daten seiner Projekteinsätze auf monatlicher Basis korrekt zu erfassen, zu prüfen und freizugeben. Dies kann zwar jederzeit erfolgen, aber die Hauptlast der Verarbeitung findet zum Monatswechsel statt. Dann muss die Anwendung störungsfrei funktionieren. 

Die erste Frage lautet nun: Wo oder besser wann startet eigentlich das Thema Lasttest? 

Da ein internes Projekt selten unterbrechungsfrei von Anfang bis Ende bearbeitet wird, gab es schon Ergebnisse, auf denen aufgesetzt werden konnte. Das Testkonzept war bereits gut ausgearbeitet, aber das Thema Lasttest war noch nicht vollständig fertig. Na also - da ich in mehreren Jahren reichlich Projekterfahrung zu diesem Thema gesammelt habe, war das genau mein Ding. 

Die zweite Frage war dann: Was muss eigentlich genau gemacht werden? 

Der Kern eines Lasttests besteht darin, die häufig verwendeten Prozesse mit der erwarteten Benutzermenge auszuführen. Dabei wird das Systemverhalten beobachtet, um Grenzen und Einschränkungen der Verarbeitungskapazität zu erkennen. Als Betroffener, der monatlich Tätigkeiten, Reisen und Auslagen erfasst und entsprechende Berichte erstellt, sind mir die Programmfunktionen bereits geläufig. In einem anderen Umfeld wäre hier in Zusammenarbeit mit der Fachseite eine entsprechende Auswahl und Festlegung der Prozesse vorzunehmen. 

Danach war zu klären: Wie soll der Lasttest durchgeführt werden? 

Die Auswahl eines Tools gestaltet sich wie so häufig: Der eine findet dies besser, der andere das, und alle kommen zu dem Schluss, dass es von den Anforderungen abhängt, welches Tool das Beste ist. So kann ich auch keine Empfehlung aussprechen, sondern nur beschreiben, wie ich zu meiner Entscheidung komme. 

Nachdem neben der Vision, dass ein Test einfach (auch durch Dritte) ausführbar sein sollte, keine weiteren konkreten Anforderungen spezifiziert wurden, war die Überlegung, dass es sich bei den verwendeten Programmen um nicht-kommerzielle Software handeln sollte. So fiel meine Wahl auf das weit verbreitete und durch die Community gut unterstützte OpenSource-Produkt JMeter. Bisher hatte ich bei dem Thema Last-Test mit LoadRunner und NeoLoad gearbeitet. Die Challenge für mich hier war also nun die konkrete Umsetzung mit JMeter

Nun geht es los: Implementierung der Lösung! 

Das Wissen über die zu verwendenden Komponenten für Lasterzeugung, Systemüberwachung und Darstellung der Ergebnisse stammt aus verschiedenen Anleitungen, Foren und Tutorials. Mit diesen Grundlagen und dem Ziel einer "ein-Klick-Lösung" konnten die einzelnen Elemente zu einem funktionsfähigen Ganzen zusammengefügt werden. Ein Test kann nun leicht und unkompliziert – auch und vor allem von den zentralen Anwendern im Backoffice – ausgeführt werden. Hierzu ist lediglich ein Doppelklick erforderlich. Der Start, die Ausführung und die Präsentation der Ergebnisse erfolgen mittels Skriptsteuerung automatisch. Am Ende muss man nur noch einen prüfenden Blick auf das Resultat werfen. 

Der Prozess ist darauf optimiert, eine schnelle und einfache Analyse der Anwendungsperformance durchzuführen, wenn akut Probleme vermutet werden oder nachdem Änderungen bei den Komponenten (Hardware, Software) durchgeführt wurden. Das heißt aber auch, dass bei einem konkreten Verdacht weitere Tests und Analysen vorgenommen werden. 

Planung entscheidet über den Erfolg! 

Die obige Beschreibung stellt die Situation für das konkrete Projekt dar. Die Herausforderung bestand darin, einen einfach durchzuführenden Lasttest für eine bereits produktiv eingesetzte Anwendung zu erstellen.
In einem anderen Umfeld können andere Ziele verfolgt werden, so dass nicht nur von Lasttest, sondern allgemein von Effizienztest gesprochen wird. Deren Vorbereitung und Durchführung kann zwar teuer sein, aber die Risiken einer nicht effizienten Anwendung sind nicht zu unterschätzen. Daher ist es wichtig, für die Planung die folgenden Fragestellungen entsprechend zu berücksichtigen: 

Risiken bei der Effizienz 

  • Wie ist die Hardware zu dimensionieren? Erarbeitung von Sizing-Erkenntnissen zur vorgesehenen Produktionshardware 
  • Wie sind die Komponenten zu konfigurieren? Abwägung zwischen dem Machbaren und dem Sinnvollen 
  • Wie ist die Software implementiert? Design und Umsetzung bezüglich Ausnutzung der verfügbaren Ressourcen 

Festlegung der Testobjekte 

  • Welche Testobjekte sind für Effizienztests relevant? Auswahl einzelner Abschnitte der Systemarchitektur, des gesamten Systems, spezielle zeitkritische Elemente 

Anforderungen an den Effizienztest 

  • Was ist für die Messbarkeit zur Erfüllung der Anforderungen relevant? Reaktionszeiten in Sekunden, Systemzustände während der Testausführung, Anzahl der auszuführenden Transaktionen 

Vorgehensweise für Effizienztests 

  • Wie wird die Last erzeugt und wo liegen die Grenzen? Nutzungsprofile und Volumentest simulieren die typische Nutzung 
  • Wie können die Ergebnisse der Tests beurteilt werden? Darstellung, Analyse und Interpretation der Ergebnisse 

Bestanden- / Nicht-bestanden-Kriterien 

  • Welche Kriterien werden als notwendig erachtet und wie können die Kennwerte festgelegt werden? Antwortzeiten, Durchsatz, Stabilität, Skalierbarkeit und Ressourcenverbrauch anhand von Benchmarks, Erfahrung oder Faustregeln 

Werkzeuge für den Effizienztest 

  • Welcher Bedarf besteht bei der Simulation von Lasten? Auswahl anhand von Nutzungsarten (Dialog oder Batch) und zu testenden Komponenten der Systemarchitektur 
  • Wie hoch belaufen sich die Kosten? Je nach Umfang und Komplexität der zu simulierenden Systemauslastung können erhebliche Kosten (Lizenz, Schulung, Einarbeitung) anfallen 

Organisatorische Aspekte 

  • Wie sind die Testumgebung und das Test-Team verfügbar, insbesondere bei Verwendung externer Komponenten? Die Verantwortlichkeiten für die Elemente sind vorab zu klären 

Einordnung im Lebenszyklus 

  • Werden Effizienztests so früh wie möglich oder erst später im Entwicklungslebenszyklus durchgeführt? Fertigstellungsgrad von abgrenzbaren Komponenten vs. integriertes Gesamtsystem, Häufigkeit von Testläufen vs. Kosten pro Testlauf 

Wenn man es nun geschafft hat, die richtigen Antworten auf die obigen Fragen zu finden und ein Vorgehen festgelegt hat, darf man nicht vernachlässigen, am Ende die Ergebnisse zu nutzen. Die im Test gewonnenen Erkenntnisse müssen als Grundlage für die weitere Entwicklung oder die Optimierung verwendet werden. Analyse und Aufbereitung der Daten zeigen die Bereiche, in denen entschieden und gehandelt werden muss. Dabei ist durchaus relevant, welche Informationen auf welche Art für welche Empfänger aufbereitet werden sollen. Die Bandbreite reicht von Listen über Tabellen zu Grafiken in verschiedenen Formen. Der Inhalt wird jeweils im Detaillierungsgrad variieren, um den relevanten Stakeholdern eine objektive Darstellung der Lasttestergebnisse sowie der Möglichkeiten für Tuningmaßnahmen bereitstellen zu können. 

Solche Berichte lassen sich mit den Bordmitteln von JMeter zusammen mit weiteren Open-Source-Komponenten erstellen. Es gibt eine große Auswahl, um (fast) alle Anforderungen erfüllen zu können. 

Fazit 

Tests sind integraler Bestandteil des Entwicklungsprozesses. Sie begleiten alle Phasen vom Entwurf bis zur Einführung. Während die Entwickler ein Produkt nach den Vorgaben erstellen, prüfen die Tester, ob das Ergebnis die Erwartungen erfüllt. Dies geschieht in allen Entwicklungsstufen, basierend auf den dort jeweils vorliegenden Ergebnissen mit den dafür geeigneten Testmethoden. Einer der zahlreichen Aspekte, die zu untersuchen sind, betrifft die Leistungsfähigkeit des Endproduktes im Produktivbetrieb.
Um gerade diese Aufgabe (beim ersten und vielleicht auch einzigen Mal) erfolgreich zu meistern, sind Wissen und Kenntnisse in diesem Bereich erforderlich.
Hier beraten wir unsere Kunden auf Basis unserer Erfahrung zielgerichtet (egal ob kommerzielle Produkte oder Open-Source-Tools) und führen ggf. individuelle Toolevaluierungen durch. 

Sobald testfertige Module bzw. die Anwendung fachlich korrekt in der Lasttestumgebung vorliegen, stimmen wir charakteristische Geschäftsprozesse mit dem Fachbereich ab, erstellen die Lasttests, führen sie durch und werten die Ergebnisse aus. 

Wir ermitteln, welche Last, also wie viele Anwender/Prozesse, Ihre Anwendung gleichzeitig verarbeiten kann und bereiten die Berichte für die relevanten Stakeholder sachgerecht auf. Auch unterstützen wir Sie bei der Durchführung entsprechender Tuningmaßnahmen.
Bei all dem bleibt jedoch zu beachten: Unterscheiden sich Testumgebung und Produktionsumgebung, können nur bedingt Aussagen über das produktive Verhalten der Anwendung gemacht werden. Eine Äquivalenzaussage ist i.d.R. nicht möglich.
Aber auch hier unterstützen wir Sie gerne bei Lösungen, die beruhigen: Monitoring und Überwachung des laufenden Betriebs mit dem Ziel, Probleme zu erkennen und zu beheben, bevor sie auftreten.