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:

  1. 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.
  2. Abhängigkeiten von externen Systemen
    Tests, die auf Datenbanken, APIs oder Drittanbieter-Services zugreifen, sind anfällig für Netzwerkprobleme oder Serverlatenz.
  3. Nicht deterministischer Code
    Zufallswerte, parallele Threads oder asynchrone Prozesse können dafür sorgen, dass Tests unterschiedlich ausfallen.
  4. Testabhängigkeiten
    Wenn ein Test das Ergebnis eines anderen Test beeinflusst, kann die Reihenfolge, in der Tests ausgeführt werden, zu Fehlern führen.
  5. Ungenaue Testannahmen
    Manchmal basieren Tests auf Annahmen über den Zustand der Umgebung oder Daten, die nicht garantiert sind.

Warum sind flaky tests so problematisch?

Bildquelle: https://www.thequalityduck.co.uk/

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:

  1. Stabile Testdaten verwenden
    Nutze Mock-Daten oder isolierte Testumgebungen, um Abhängigkeiten von externen Systemen zu minimieren.
  2. Intelligentes Warten statt starrer Wartezeiten
    Warte gezielt auf Bedingungen, z. B. mit waitUntil in WebdriverIO, statt starren sleep()-Befehlen.
  3. Tests isolieren
    Jeder Test sollte unabhängig laufen und die Umgebung sauber hinterlassen – keine geteilten globalen Zustände.
  4. Retry-Mechanismen gezielt einsetzen
    Wiederholungen können helfen, temporäre Probleme abzufangen, sollten aber nicht das Grundproblem verdecken.
  5. Logging und Screenshots nutzen
    Bei UI-Tests helfen Screenshots und ausführliches Logging, die Ursachen von intermittierenden Fehlern schneller zu erkennen.
  6. Regelmäßige Analyse der Test-Suite
    Identifiziere wiederkehrende flaky tests und behebe die Ursachen. Nur so bleibt die Test-Suite vertrauenswürdig.
  7. 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

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.

Beitrag verfasst von:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.