- Startseite
- Skills
- Testen
- Flaky-Test-Reparatur
Testen
Flaky-Test-Reparatur
Instabile Tests diagnostizieren und reparieren — Race Conditions, Timing-Probleme, Test-Kontamination und Umgebungsabhaengigkeiten.
Fortgeschritten Kostenlos Veroeffentlicht: 15. April 2026
Kompatible Tools claude-codechatgptgeminicopilotcursorwindsurfuniversal
Das Problem
Instabile Tests sind der Krebs von CI-Pipelines. Sie bestehen lokal aber scheitern in CI, bestehen beim Retry aber scheitern zufaellig, oder scheitern nur zusammen mit bestimmten anderen Tests. Die Grundursachen — gemeinsamer veraenderbarer Zustand, Timing-Abhaengigkeiten, unkontrollierte Zufallswerte — sind konsistente Muster, die systematisch diagnostiziert und behoben werden koennen.
Der Prompt
Diagnostiziere und behebe den folgenden instabilen Test. Er besteht meistens, scheitert aber intermittierend, besonders in CI.
INSTABILER TEST:
[den fehlschlagenden Test einfuegen]
FEHLERAUSGABE (wenn er scheitert):
[die Fehlerausgabe einfuegen]
CI-UMGEBUNG: [z.B. GitHub Actions Ubuntu, Jenkins Docker]
Auf diese Instabilitaetsmuster analysieren:
1. **Timing/Async-Probleme** — fehlende awaits, Race Conditions, setTimeout-Abhaengigkeiten
2. **Gemeinsamer Zustand** — Tests haengen von Reihenfolge ab, gemeinsamer Zustand nicht zurueckgesetzt
3. **Externe Abhaengigkeiten** — Netzwerkaufrufe, Dateisystem, Systemuhr, Zufallszahlen
4. **Ressourcenkonflikte** — Port-Konflikte, Dateisperren, Verbindungspool-Erschoepfung
5. **Umgebungsunterschiede** — CI hat andere Zeitzone, Locale, Aufloesung, Speicherlimits
Fuer jede vermutete Ursache: erklaeren WARUM, den EXAKTEN Fix zeigen, defensive Assertion hinzufuegen.
Beispielausgabe
// PROBLEM: Test haengt von setTimeout-Reihenfolge ab
// VORHER:
it('zeigt Benachrichtigung nach Speichern', () => {
clickSave();
expect(screen.getByText('Gespeichert!')).toBeVisible(); // INSTABIL
});
// FIX: Auf spezifische UI-Aenderung warten
it('zeigt Benachrichtigung nach Speichern', async () => {
clickSave();
await waitFor(() => {
expect(screen.getByText('Gespeichert!')).toBeVisible();
}, { timeout: 3000 });
});
Wann verwenden
Bei jedem intermittierend scheiternden Test in CI, wenn das Team “bekannt instabile” Tests hat, die uebersprungen werden, oder bei Retry-bis-gruen-Mustern in der Pipeline.
Profi-Tipps
- Tests in zufaelliger Reihenfolge ausfuehren —
--randomizenutzen, um reihenfolgeabhaengige Tests lokal aufzudecken. - Quarantaene, dann beheben — instabile Tests in eine separate Suite verschieben, aber eine Frist setzen.
- Timing-Logs hinzufuegen — KI bitten, den Test mit Zeitstempeln bei jedem Schritt zu instrumentieren.
- Lokal in Docker testen — Tests im gleichen Docker-Image wie CI ausfuehren.