Als Testautomatisierer stößt man früher oder später auf ein Problem, das einen hin und wieder zur Weißglut bringen kann: Flaky tests. Diese Tests sind unzuverlässig – mal bestehen sie, mal fallen sie ohne erkennbaren Grund durch. Doch wie kommen solche Tests überhaupt zustande und was kann man dagegen tun?
In dieser Kalenderwoche möchte ich mich genauer mit Flaky Tests auf meinem Blog auseinandersetzen.
Was sind Flaky tests?
Ein flaky test ist ein automatisierter Test, der nicht deterministisch läuft. Das bedeutet: Selbst wenn der getestete Code unverändert bleibt, kann das Testergebnis unterschiedlich ausfallen.
Typische Szenarien:
- Ein UI-Test klickt auf einen Button, der manchmal noch nicht geladen ist.
- Ein API-Test schlägt nur fehl, wenn der Server gerade stark ausgelastet ist.
- Ein Datenbank-Test hängt von Daten ab, die von anderen Tests manipuliert werden.
Kurz gesagt: Flaky tests sind Tests, denen man nicht trauen kann – und das ist gefährlich für jede Softwarepipeline.
Merke: Flaky Tests sind unzuverlässige Tests, die mal bestehen und mal fehlschlagen, ohne dass sich der Code geändert hat.
Sie entstehen oft durch Timing-Probleme, externe Abhängigkeiten oder nicht deterministischen Code. Flaky Tests kosten Zeit, erzeugen Frust und erschweren die Fehlererkennung.
Ursachen für flaky tests
Die Gründe für flaky tests lassen sich meist in einige Kategorien einteilen:
- Timing-Probleme
Viele UI-Tests arbeiten mit festen Wartezeiten (sleep()) oder erwarten, dass Elemente sofort verfügbar sind. In der Realität können Ladezeiten schwanken. - Abhängigkeiten von externen Systemen
Tests, die auf Datenbanken, APIs oder Drittanbieter-Services zugreifen, sind anfällig für Netzwerkprobleme oder Serverlatenz. - Nicht deterministischer Code
Zufallswerte, parallele Threads oder asynchrone Prozesse können dafür sorgen, dass Tests unterschiedlich ausfallen. - Testabhängigkeiten
Wenn ein Test das Ergebnis eines anderen Test beeinflusst, kann die Reihenfolge, in der Tests ausgeführt werden, zu Fehlern führen. - Ungenaue Testannahmen
Manchmal basieren Tests auf Annahmen über den Zustand der Umgebung oder Daten, die nicht garantiert sind.
Warum sind flaky tests so problematisch?

Flaky tests sind nicht nur ein Ärgernis, sie haben reale Auswirkungen auf den Entwicklungsprozess:
- Vertrauensverlust: Entwickler:innen ignorieren fehlschlagende Tests, weil sie wissen, dass diese unzuverlässig sind.
- Verzögerungen im Release-Prozess: Jeder fehlgeschlagene Test muss geprüft werden – auch wenn er nur zufällig fehlschlägt.
- Versteckte Bugs: Kritische Fehler könnten übersehen werden, weil flaky tests die Aufmerksamkeit ablenken.
- Ressourcenverschwendung: Zeit und Energie werden auf die Fehlersuche in instabilen Tests verschwendet.
Praktische Strategien zur Vermeidung
Flaky tests lassen sich nicht immer komplett verhindern, aber man kann ihr Auftreten stark reduzieren:
- Stabile Testdaten verwenden
Nutze Mock-Daten oder isolierte Testumgebungen, um Abhängigkeiten von externen Systemen zu minimieren. - Intelligentes Warten statt starrer Wartezeiten
Warte gezielt auf Bedingungen, z. B. mitwaitUntilin WebdriverIO, statt starrensleep()-Befehlen. - Tests isolieren
Jeder Test sollte unabhängig laufen und die Umgebung sauber hinterlassen – keine geteilten globalen Zustände. - Retry-Mechanismen gezielt einsetzen
Wiederholungen können helfen, temporäre Probleme abzufangen, sollten aber nicht das Grundproblem verdecken. - Logging und Screenshots nutzen
Bei UI-Tests helfen Screenshots und ausführliches Logging, die Ursachen von intermittierenden Fehlern schneller zu erkennen. - Regelmäßige Analyse der Test-Suite
Identifiziere wiederkehrende flaky tests und behebe die Ursachen. Nur so bleibt die Test-Suite vertrauenswürdig. - Bewusstes Test-Design
Schreibe Tests so, dass sie deterministisch sind: klare Inputs, vorhersehbare Outputs und keine Abhängigkeiten von der Testreihenfolge.
Beispiele aus der Praxis
- Web UI Tests: Ein Login-Test schlägt manchmal fehl, weil das Captcha erst nach einigen Sekunden sichtbar wird. Lösung: Warten auf die Sichtbarkeit des Elements statt starrer Pausen.
- API Tests: Ein Endpoint liefert sporadisch einen Timeout. Lösung: Mock-Server oder Retry-Logik mit Timeouts implementieren.
- Datenbanktests: Ein Test, der einen Datensatz löscht, schlägt fehl, wenn ein anderer Test denselben Datensatz gleichzeitig verändert. Lösung: Separate Testdaten oder Transaktionen verwenden.
Fazit
Flaky tests sind mehr als nur lästig – sie können Vertrauen zerstören, Release-Prozesse verlangsamen und Bugs verschleiern. Wer sie frühzeitig erkennt, analysiert und gezielt reduziert, sorgt für verlässliche Tests, schnellere Releases und zufriedene Entwickler:innen.
Testautomatisierung lebt von Vertrauen: Ein Team, das sich auf seine Tests verlassen kann, arbeitet effizienter – und das sollte das Ziel jeder Teststrategie sein.
Weiterführende Links
- https://www.jetbrains.com/teamcity/ci-cd-guide/concepts/flaky-tests/
- https://www.browserstack.com/test-reporting-and-analytics/features/test-reporting/what-is-flaky-test
FAQ
Was sind Flaky Tests?
Flaky Tests sind Tests, die ohne Codeänderung mal erfolgreich und mal fehlschlagen. In der Praxis gehören sie zu den größten Frustfaktoren in der Testautomatisierung, da sie das Vertrauen in die Testergebnisse massiv beeinträchtigen.
Warum sind Flaky Tests problematisch?
Flaky Tests führen dazu, dass echte Fehler übersehen oder Builds unnötig blockiert werden. Teams verlieren schnell das Vertrauen in die Testpipeline, was im schlimmsten Fall dazu führt, dass fehlschlagende Tests ignoriert oder deaktiviert werden.
Was sind typische Ursachen für Flaky Tests?
Häufige Ursachen sind:
- Asynchrone Prozesse und Timing-Probleme
- Unzuverlässige Testdaten oder Testumgebungen
- Abhängigkeiten von externen Systemen
- Instabile UI-Elemente oder dynamische Selektoren
Aus Erfahrung entstehen Flaky Tests besonders häufig bei schlecht synchronisierten End-to-End-Tests.
Wie lassen sich Flaky Tests reduzieren?
Um Flaky Tests zu vermeiden, setze ich auf stabile Selektoren, saubere Synchronisation und klare Testdaten. Zusätzlich hilft es, Tests regelmäßig zu analysieren und zu refaktorieren.
Sollten Flaky Tests gelöscht oder deaktiviert werden?
Nein. Flaky Tests sollten nicht einfach entfernt werden. Stattdessen ist es wichtig, die Ursache zu analysieren und den Test zu stabilisieren. Nur so bleibt die Testautomatisierung langfristig vertrauenswürdig und wartbar.