Redaktioneller Hinweis: Willkommen zur "Leadership In Test"-Serie vom Softwaretesting-Experten & Berater Paul Gerrard. Die Serie soll Testern mit ein paar Jahren Erfahrung – besonders denen in agilen Teams – helfen, in ihren Rollen als Testleiter und Manager herausragende Arbeit zu leisten.
Im vorherigen Artikel haben wir Service Testing und seine Hauptkomponenten untersucht: Performancetests, Failover/Soak-Tests und Verwaltbarkeit. Wie versprochen gehen wir hier nun detaillierter auf das Performancetesting ein.
Abonniere den The QA Lead Newsletter, um benachrichtigt zu werden, wenn neue Teile dieser Serie erscheinen. Diese Beiträge sind Auszüge aus Pauls Leadership In Test Kurs, den wir für einen tiefgreifenden Einblick in dieses und weitere Themen sehr empfehlen. Solltest du dich anmelden, nutze unseren exklusiven Gutscheincode QALEADOFFER und spare $60 beim vollen Kurspreis!
Hallo und willkommen zur "Leadership In Test"-Serie. Im letzten Artikel haben wir uns mit Service Testing für Webanwendungen beschäftigt.
Das Ziel dieses Kapitels ist es, einige Ratschläge und Best Practices für die Steuerung einer kritischen Komponente des beschriebenen Service Testings zu geben, nämlich, Trommelwirbel bitte... das Performancetesting!
Wir werden folgende Punkte behandeln:
- Ziele des Performancetests
- Vier Voraussetzungen für einen Performancetest
- Performancetesting-Werkzeugkasten
- Der Performancetest-Prozess
Los geht‘s.
Ziele des Performancetests
Zur schnellen Wiederholung: Das primäre Ziel des Performancetests lässt sich wie folgt definieren:
„Nachweisen, dass das System spezifikationskonform arbeitet, mit akzeptablen Antwortzeiten und bei der Verarbeitung der geforderten Transaktionsvolumina auf einer produktionsgroßen Datenbank.“
Deine Performancetest-Umgebung ist ein Testfeld, das auch für andere Tests mit weiter gefassten Zielsetzungen genutzt werden kann, die wir wie folgt zusammenfassen können:
- Bewertung der Systemkapazität für Wachstum (Falls du unsicher bist, welche Software deine Anforderungen erfüllen kann, hilft dir unsere Liste der besten Datenbankmanagement-Lösungen.)
- Schwachstellen in der Architektur identifizieren
- Das System optimieren
- Versteckte Fehler in der Software aufdecken
- Resilienz und Zuverlässigkeit überprüfen.
Deine Teststrategie sollte die Anforderungen an eine Testinfrastruktur festlegen, die das Erreichen aller dieser Ziele ermöglicht.
Vier Voraussetzungen für einen Performancetest
„Wenn eine dieser Voraussetzungen fehlt, solltest du äußerst vorsichtig sein, bevor du mit den Tests beginnst oder Ergebnisse veröffentlichst. Der Einsatz von Testautomatisierungs-Tools zur Qualitätssicherung hilft dir, diese Voraussetzungen zu erfüllen. Andernfalls sind die Tests möglicherweise sehr schwierig oder gar unmöglich durchzuführen, oder die Glaubwürdigkeit deiner veröffentlichten Ergebnisse ist stark beeinträchtigt und leicht anfechtbar.“
1. Quantitative, relevante, messbare, realistische & erreichbare Anforderungen
Als Grundlage aller Tests sollten die Performancerequirements (Ziele) vorab zwischen den Beteiligten abgestimmt werden, sodass im Anschluss geprüft werden kann, ob das System diese Anforderungen erfüllt.
Anforderungen an Systemdurchsatz oder Antwortzeiten sind nur dann eine nützliche Basis für Leistungsvergleiche, wenn sie folgende Eigenschaften aufweisen. Sie müssen:
- In quantifizierbaren Größen angegeben sein.
- Für die Aufgabe relevant sein, die ein Nutzer ausführen möchte.
- Mit einem Werkzeug (oder Stoppuhr) und zu vertretbarem Aufwand messbar sein.
- Im Vergleich zur Bearbeitungsdauer einer Nutzeraufgabe realistisch sein.
- Zu vertretbaren Kosten erreichbar sein.
Oft sind Performancerequirements vage oder gar nicht dokumentiert. Versuche, jede verfügbare Dokumentation aufzuspüren. Wenn es Lücken gibt, müssen diese eventuell nachträglich festgehalten werden.
Bevor ein Performancetest spezifiziert und entworfen werden kann, müssen Anforderungen vereinbart werden für:
- Transaktionsantwortzeiten.
- Lastprofile (die Anzahl der zu simulierenden Benutzer und Transaktionsvolumina).
- Datenbankvolumina (die erwartete Anzahl von Datensätzen in den Datenbanktabellen der Produktion).
Es ist üblich, dass Leistungsanforderungen vage definiert werden. Diese Anforderungen basieren oft auf geschätzten, prognostizierten Geschäftsvolumina; es kann notwendig sein, die Geschäftsbenutzer dazu zu bringen, über realistische Leistungsanforderungen nachzudenken.
Sie müssen möglicherweise auch selbst eine Anforderungsanalyse durchführen und diese Anforderungen als Ziele für die gewünschte Systemleistung dokumentieren.
2. Ein stabiles System
Wenn das System fehlerhaft und unzuverlässig ist, werden Sie mit einem Leistungstest nicht weit kommen. Leistungstests belasten alle architektonischen Komponenten bis zu einem gewissen Grad. Damit Leistungstests jedoch nützliche Ergebnisse liefern, muss das System und die technische Infrastruktur zu Beginn ausreichend zuverlässig und belastbar sein.
3. Realistische Testumgebung
Die Testumgebung muss so konfiguriert werden, dass der Test aussagekräftig ist. Wahrscheinlich können Sie das Ziel- oder Produktivsystem nicht vollständig replizieren, aber die Testumgebung sollte ganz oder teilweise mit der endgültigen Produktionsumgebung vergleichbar sein. Sie sollten gemeinsam mit dem Systemarchitekten klären, welche Kompromisse akzeptabel sind und welche nicht – oder zumindest, welche sinnvolle Interpretation der Testergebnisse möglich ist.
Eine realistische Testumgebung ist entscheidend für aussagekräftige Leistungstests. Für Werkzeuge, die bei der Simulation von realen Bedingungen unterstützen, schauen Sie sich unsere handverlesene Auswahl an Software-Testplattformen an.
4. Kontrollierte Testumgebung
Leistungstester benötigen Stabilität – nicht nur in Bezug auf die Zuverlässigkeit und Belastbarkeit von Hard- und Software, sondern auch durch die Minimierung von Änderungen an der Umgebung oder der zu testenden Software. Wenn beispielsweise selbst kleine Änderungen an der Benutzeroberfläche vorgenommen werden, schlagen die eigens gestalteten Testskripte zur Bedienung der Benutzeroberflächen meist sofort fehl.
Jegliche Änderungen an der Testumgebung müssen streng kontrolliert werden. Wenn eine Änderung Fehler beseitigt, die die Leistung vermutlich nicht beeinflussen, sollte die Freigabe eventuell nicht akzeptiert werden. Nur Änderungen zur Verbesserung von Leistung oder Zuverlässigkeit sollten angenommen werden.
Leistungstest-Toolkit
Ihr Toolkit für Leistungstests umfasst fünf Hauptwerkzeuge:
- Testdatenerstellung/-pflege – dient der Erzeugung großer Datenmengen in der Datenbank, die für den Test benötigt werden. Erwartet wird meist ein SQL-basiertes Hilfsprogramm oder vielleicht ein PC-Produkt wie Microsoft Access, das mit der Testdatenbank verbunden ist.
- Lastgenerierung – gängige Tools verwenden Testtreiber, die virtuelle Clients simulieren, indem sie HTTP-Nachrichten an Webserver senden.
- Anwendungs-Ausführungstool – steuert eine oder mehrere Instanzen der Anwendung über die Browseroberfläche und zeichnet Antwortzeitmessungen auf. (Dies ist meist dasselbe Werkzeug wie für die Lastgenerierung, muss es aber nicht sein).
- Ressourcenüberwachung – Hilfsprogramme zur Überwachung und Protokollierung von Client- und Serverressourcen, Netzwerkverkehr, Datenbankaktivitäten usw.
- Ergebnisanalyse und Reporting – Test- und Ressourcenüberwachungstools erzeugen große Mengen an Ergebnisdaten, die analysiert werden müssen.
Verwandter Beitrag: DIE 10 BESTEN SQL-ANALYSEDIENSTE FÜR QA-TEAMS
Der Leistungstest-Prozess
Unten sehen Sie eine Abbildung, die einen allgemeinen Ablauf für Leistungstests und -optimierung zeigt. Das Tuning ist eigentlich kein Bestandteil des Testprozesses, aber es ist ein untrennbarer Teil der Aufgabe, Leistung und Zuverlässigkeit zu verbessern. Optimierungen können Änderungen an der Architektur-Infrastruktur mit sich bringen, sollten aber keine Auswirkungen auf die Systemfunktionalität im Test haben.

Wir schauen uns jetzt an, wie ein Leistungstest entwickelt, durchgeführt, analysiert und darüber berichtet wird.
Schrittweise Testentwicklung
Die Testentwicklung erfolgt in der Regel schrittweise in vier Phasen:
- Jedes Testskript wird einzeln vorbereitet und getestet, um Fehler zu beheben.
- Skripte werden in die Entwicklungsversion der Workload integriert und die Workload wird ausgeführt, um zu testen, ob das neue Skript kompatibel ist.
- Während die Workload wächst, wird das sich entwickelnde Testframework kontinuierlich verfeinert, debuggt und zuverlässiger gemacht. Die Erfahrung und Vertrautheit mit den Tools wächst ebenfalls.
- Wenn das letzte Skript in die Workload integriert ist, wird der Test als „Trockenlauf“ ausgeführt, um sicherzustellen, dass er vollständig wiederholbar und zuverlässig ist und für die formalen Tests bereitsteht.
Zwischentests können nützliche Ergebnisse liefern
Läufe mit der teilweisen Workload und Testtransaktionen können Leistungsprobleme aufdecken. Tests mit kleinen Lasten können auch frühzeitig Hinweise auf Netzwerkverkehr und mögliche Engpässe geben, wenn der Test skaliert wird.
Schlechte Antwortzeiten können durch mangelhafte Anwendungsarchitektur verursacht werden und können von den Entwicklern frühzeitig untersucht und behoben werden. Frühe Tests können außerdem über längere Zeiträume als Soak-Tests ausgeführt werden.
Testdurchführung
Die Testdurchführung erfordert eine gewisse Bühnenregie oder Koordination. Sie sollten sich mit den unterstützenden Beteiligten abstimmen, die das System überwachen, während Sie die Tests durchführen. Das „Testmonitoring“-Team könnte verteilt sein, daher müssen Sie sie auf dem Laufenden halten, wenn der Test reibungslos ablaufen und die Ergebnisse korrekt erfasst werden sollen.
Abgesehen von der Koordination der verschiedenen Teammitglieder folgt die Durchführung von Leistungstests meist einem Standardablauf.
- Vorbereitung der Datenbank (Wiederherstellung von Band, falls erforderlich).
- Bereiten Sie die Testumgebung wie erforderlich vor und überprüfen Sie deren Zustand.
- Starten Sie die Überwachungsprozesse (Netzwerk, Clients und Server, Datenbank).
- Starten Sie die Lastsimulation und beobachten Sie die Systemüberwachung.
- Wenn ein separates Tool verwendet wird, starten Sie nach Stabilisierung der Last das Anwendungstest-Tool und die Messung der Antwortzeiten.
- Überwachen Sie den Test während der gesamten Testdauer genau.
- Wenn die Testwerkzeuge den Test nicht automatisch beenden, beenden Sie den Test am Ende des Testzeitraums.
- Beenden Sie die Überwachungstools und speichern Sie die Ergebnisse.
- Archivieren Sie alle erfassten Ergebnisse und stellen Sie sicher, dass alle Ergebnisdaten sicher gesichert werden.
- Erstellen Sie Zwischenberichte; stimmen Sie sich mit anderen Teammitgliedern bezüglich etwaiger Anomalien ab.
- Bereiten Sie Analysen und Berichte vor.
Die Koordination verschiedener Teammitglieder während der Testdurchführung kann herausfordernd sein. Vereinfachen Sie diesen Prozess durch die Integration von fortschrittlichen Testmanagement-Tools für Jira, die Funktionen wie Echtzeit-Kollaboration und Reporting bieten.
Tuning folgt normalerweise nach dem Testen, wenn Probleme auftreten oder bekannte Optimierungsmöglichkeiten bestehen. Bei Wiederholungstests ist es unerlässlich, alle Änderungen in der Umgebung zu protokollieren. So können Unterschiede im Systemverhalten und damit in den Leistungsergebnissen den Änderungen in der Konfiguration zugeordnet werden.
Beim Verwalten von Testfällen für Leistungstests kann Testmanagement-Software ein echter Gamechanger sein. Sie ermöglicht eine bessere Organisation, Nachverfolgung und sogar Automatisierung von Testfällen.
Im Allgemeinen ist es ratsam, jeweils nur eine Änderung vorzunehmen, damit bei Abweichungen im Verhalten klar ist, auf welche Änderung sie zurückzuführen sind.
Ergebnisanalyse und Berichterstattung
Der typischste Bericht zu einem Testlauf fasst diese Messwerte zusammen; für jede Messung werden folgende Angaben gemacht:
- Anzahl der Messwerte.
- Minimale Antwortzeit.
- Maximale Antwortzeit.
- Mittlere Antwortzeit.
- n-te (typischerweise 95te) Perzentil-Antwortzeit.
Das Lastgenerator-Tool aus Ihrem Werkzeugkasten sollte während des Tests für jeden Transaktionstyp die Anzahl erfassen. Teilt man diese Zahlen durch die Testdauer, ergibt sich die tatsächlich erzielte Transaktionsrate bzw. der Durchsatz.
Die Anzahl der Transaktionen entspricht der auf das System ausgeübten Last. Dies setzt voraus, dass die ausgeführten Transaktionen den von Ihnen angestrebten Lastprofil-Proportionen entsprechen.
Die aufgebrachte Last sollte dem simulierten Lastprofil entsprechen – kann jedoch abweichen, wenn das System langsam reagiert und Transaktionen mit unterschiedlichen Geschwindigkeiten ausgeführt werden.
In der Regel führen Sie eine Reihe von Testläufen bei unterschiedlichen Lasten durch. Verwenden Sie die Ergebnisse dieser Testreihen, um ein Diagramm zu erstellen, das die Antwortzeit für eine Transaktion im Verhältnis zur angewendeten Last darstellt.
Ressourcenüberwachungstools verfügen in der Regel über statistische oder grafische Berichtsfunktionen, die die Ressourcenauslastung im Zeitverlauf darstellen. Erweiterte Berichte zur Ressourcennutzung im Verhältnis zur angewendeten Last sind sehr hilfreich und können dabei unterstützen, Engpässe in der Systemarchitektur zu identifizieren.
Viel Erfolg!
Melden Sie sich beim QA Lead Newsletter an, um benachrichtigt zu werden, wenn neue Teile der Serie veröffentlicht werden. Diese Beiträge sind Auszüge aus Pauls Leadership-In-Test-Kurs, den wir sehr empfehlen, um tiefer in dieses und andere Themen einzusteigen. Wenn Sie sich anmelden, nutzen Sie unseren exklusiven Gutscheincode QALEADOFFER, um $60 Rabatt auf den gesamten Kurspreis zu erhalten!
Lesetipp: SERVER-ÜBERWACHUNGSMETRIKEN, DIE FÜR SYSTEMGESUNDHEIT UND LEISTUNG VERFOLGT WERDEN SOLLTEN
