Instabilität von Automatisierten Tests der Benutzeroberfläche
Geschrieben von Virginie Rochat

Was ist ein instabiler Test?
Ein instabiler Test - oft auch Flaky Test genannt - ist ein automatisierter Test, welcher inkonsistente Resultate generiert, oobwohl keine Änderungen am entsprechenden Test-Skript vorgenommen wurden. Solche Tests sind bekannt für ihre Unvorhersehbarkeit, da sie unregelmäßig und ohne Veränderungen des Codes oder der Applikation falsches Scheitern (“fails”) oder auch möglicherweise falsche Erfolge (“passes”) generieren können.

Flaky Tests sind Tests, welche manchmal richtig, manchmal falsch sind, ohne Änderungen am produktiven oder am Test-Code. Eine im Jahr 2024 von Dorothy Graham [1] durchgeführte Untersuchung ergab, dass Flakiness immer noch zu den Top 4 der größten Probleme bei der Testautomatisierung gehört. Im Allgemeinen gelten automatisierte Tests von Benutzeroberflächen der Benutzeroberfläche als:
- Flaky
- Anfällig
- Spröde
- Unzuverlässig
- Hat unerklärliche, nicht deterministische fails
Test Automation beinhaltet ein eigenesParadoxon: Wenn automatisierte Tests laufen, werden eigentlich zwei Dinge getestet:
- Das getestete System, oder auf Englisch “System Under Test (SUT)”
- Der Test-Automatisierungs Code an sich
Wie kann man unter dieser Voraussetzung feststellen, wie zuverlässig Test Automation Lösungen sind? Ganz einfach: indem man sie viele Male durch SUT laufen lässt.
“Flaky Tests sind besser als nichts… oder?”
Allgemein gilt die Annahme, dass Flaky Tests besser sind als gar keine Tests. Wenn ein Test zu 99% erfolgreich verläuft, kann das falsche Schlussfolgerungen in den meisten Fällen verhindern. Diese Annahme scheint plausible – bis wir genauer nachrechnen:
Szenario 1
- Testsuite mit 300 Tests
- Jeder Test hat eine Fehlerquote von 0,5 % → Bestehensquote = 99,5 %.
- Welche globalen Auswirkungen hat das auf die gesamte Testreihe?
Test Suite Pass Rate = (99.5%)300 = 22.2%
Szenario 2
- mmer noch eine Testsuite mit 300 Tests
- Jeder Test hat eine fail-Quote von 0,2 % → pass-Quote = 99,8 %.
- Welche globalen Auswirkungen hat das auf die gesamte Testreihe?
Test Suite Pass Rate = (99,8%)300 = 54,8%
Im ersten Szenario bedeutet dies, dass die Testsuite in mehr als ¾ der Fälle ohne offensichtlichen Grund scheitern wird! Dies ist nicht ideal und es muss bedacht werden, dass die globale Erfolgsquote niedriger sein wird je mehr Tests in der Testsuite sind.
Das zweite Szenario belegt, dass durch eine Verringerung der Fehlerquote eines Tests das unvorhersehbare Verhalten mehr als halbiert werden kann!
Dafür schauen wir uns die Auswirkungen von Flaky Tests etwas genauer an:

Die Auswirkungen sind massiv und werden letztlich (und unweigerlich) zur Schlussfolgerung führen, dass automatisiertes UI Testing nutzlos ist.
Die vorher gestellte Frage können wir somit mit Sicherheit dahingehend beantworten, dass ein Flaky Test SCHLECHTER ist als gar kein Test!
Ist die Flakinesswirklich zufällig? Oder gibt es einen Grund?
In fast allen Fällen hat das, was als “Flaky Test” wahrgenommen wird, eine konkrete Ursache: Der aufgetretene Fehler muss daher untersucht, die Ursache gefunden und das ursprüngliche, zugrundeliegende Problem gelöst werden!
Die häufigsten Ursachen für das, was als “flakiness” aufgefasst wird, sind die folgenden:
- Testdesign: Einer der häufigsten Gründe für fehlerhafte Tests ist tatsächlich schlechtes Testdesign! Flaky Tests können aufgrund von Problemen im Zusammenhang mit falschen Locator-Strategien (z. B. Identifizierung einer Schaltfläche anhand ihres – sich dynamisch ändernden - inneren Textes) oder bei fehlenden “Assertions” auftreten.
- Timing- und Synchronisationsprobleme: Fehlerhafte Tests treten häufig auf, wenn eine korrekte Synchronisation zwischen den Testphasen erforderlich ist (die Webseite ist noch nicht vollständig geladen, wenn der Test ausgeführt wird) oder wenn zeitliche Abhängigkeiten bestehen (der Test schlägt fehl, weil der Ladevorgang des SUT länger dauert als erwartet)
- Umgebungsfaktoren: Es gibt viele Umgebungsfaktoren, die dazu führen können, dass ein Test fehlschlägt, obwohl er es nicht sollte, wie z.B. Probleme mit der Netzwerkkonnektivität, Schwankungen der Systemressourcen (verfügbarer Speicher, CPU), Abhängigkeiten von APIs oder Drittanbieterdiensten usw.
- Instabile Testumgebung: Wenn die Testumgebung instabil ist, dann sind es auch die Tests... Im folgenden sind einige mögliche Ursachen für eine instabilen Testumgebung aufgeführt:
Uneinheitliche Testumgebung (z. B. verschiedene Browserversionen oder Betriebssysteme etc.)
Unzureichende oder unvollständige Konfiguration (z. B. falsche Pfadeinstellungen oder fehlende Abhängigkeiten/Bibliotheken etc.)
Unzuverlässige Testinfrastruktur oder teilweise Abweichung der Testkonfiguration in der Testumgebung - Asynchrone Wartezeiten: Ein unangemessener Umgang mit asynchronen Wartezeiten und Operationen - wie z.B. Netzwerkanfragen oder Aktualisierungen der Benutzeroberfläche - kann zu Wettlaufsituation (“Race Condition”) und Zeitproblemen führen.
- Gleichzeitigkeit: eine unangemessene Aussage über die Reihenfolge, in der die verschiedenen Threads Operationen durchführen, kann ebenfalls eine Ursache für Inkonsistenzen sein
Flakiness in Tests verhindern
Wenn die Ursachen für unregelmäßig fehlschlagende Tests bekannt sind, kann die sogenannte „Flakiness“ verhindert werden. Hier sind eine Reihe von Strategien und Tipps zum sinnvollen Umgang mit der Flakiness, um diese von vornherein einzuschränken oder vollständig zu unterbinden:
- Die Feinabstimmung der Reihenfolge von Operationen ermöglicht es, die Gleichzeitigkeit zu verringern und Abhängigkeiten zu reduzieren (atomare Tests). Durch die sorgfältige Anordnung von Testaktionen kann man die Wahrscheinlichkeit von Bedingungen oder Konflikten kontrollieren, die Unbeständigkeit verursachen können
- Aufbau einer stabilen und konsistenten Testumgebung durch die sichergestellt wird, dass externe Faktoren (wie Systemressourcen oder Netzwerkkonnektivität) kontrolliert, Abhängigkeiten verwaltet und der Zugriff auf für die Testdurchführung wesentliche Ressourcen garantiert wird
- Nehmen Sie sich die Zeit, vor der Implementierung über die Teststrategie nachzudenken, denn wie bereits erwähnt, sind schlecht geschriebene Tests, eine schlechte Teststrategie und ein schlechtes Testdesign die Hauptursachen für die Flakiness von Tests. Es ist wichtig, mit einem fundierten Verständnis des SUT zu beginnen und danach Namenskonventionen sowie “Best Practices” für das Schreiben von Tests einzuführen
- Fördern Sie die Feedback-Kultur: Führen Sie eine kontinuierliche Überwachung der Testergebnisse ein und holen Sie regelmäßig Feedback vom QA-Team ein: Ermutigen Sie die Tester, alle potenziell auftretende Schwachstellen zu melden und zu protokollieren. Überprüfen Sie diese regelmäßig und ergreifen Sie proaktive Maßnahmen zu deren Beseitigung
- Verwenden Sie geeignete Synchronisationstechniken im Testcode oder innerhalb des Testwerkzeugs, um eine angemessene Synchronisation zwischen dem SUT und der Testphase sicherzustellen. Verwenden Sie explizite Wartezeiten, Wartebedingungen oder Synchronisationsmethoden
- Optimierung des Testzeitplans durch Planung der Testläufe unter Berücksichtigung von Faktoren wie Netzüberlastung, Systemlast usw., die die Zuverlässigkeit der Tests beeinflussen können
- Einführung geeigneter Verfahren zur Verwaltung von Testdaten, um Zuverlässigkeit und Konsistenz zu gewährleisten und die Verwendung veränderlicher oder gemeinsam genutzter Testdaten zu vermeiden, die zu flakiness führen können
- Isolierung der Tests durch Reduzierung der Abhängigkeiten und Verringerung der Wahrscheinlichkeit von Interferenzen zwischen den Tests
Wichtigste Erkenntnisse
- Tappen Sie NICHT in die Falle, sich an ohne ersichtlichen Grund fehlschlagende Tests zu gewöhnen!
- Lernen Sie aus Fehlern: Engineering ist eine Hypothese; ein Fehler sollte immer ein Ausgangspunkt für eine verbesserte Hypothese sein.
- Verstecken Sie Fehler nicht, sondern untersuchen und verbessern Sie diese
- In fast allen Fällen hat die so genannte „flakiness“ eine konkrete Ursache: Sie müssen die entsprechenden Fehler untersuchen, deren Ursache finden und schließlich das ursprüngliche Problem lösen!
- Wenn Sie die Ursache des Fehlers nicht finden können, ist die beste Option, weitere Hinweise und Anhaltspunkte zur möglichen Ursache des Fehlers zu sammeln
- Fehlerhafte Tests sind eine Chance, das SUT und Ihr Testframework besser zu verstehen!

Referenzen
Graham, Dorothy. 2024. "Test Automation Community Survey". AutomationSTAR. https://automation.eurostarsoftwaretesting.com/wp-content/uploads/2024/10/AS-Test-Automation-Community-Survey-Results-Rev02.pdf?utm_source=testguild&utm_campaign=promo&utm_medium=post.