Cypress Cloud MCP: Testergebnisse direkt im KI Agenten 2026
Cypress Cloud MCP verbindet KI Agenten direkt mit Testergebnissen, Flaky Tests und Test Replay. Setup für OpenCode und Claude Code, eingeordnet von NCA.
Mehr erfahren
Flaky Tests in Cypress sind Tests, die bei gleichem Code mal bestehen und mal scheitern. Cypress Cloud definiert einen Test als flaky, wenn er erst fehlschlägt und dann im Retry ohne Codeänderung besteht.
Das Tückische daran: Der Fehler sitzt selten im Test Runner. Meist liegt er in Timing, Testdaten, Netzwerk oder in Abhängigkeiten zwischen Tests. Der Test zeigt also auf ein echtes Problem, nur eben nicht jedes Mal.
Flaky Tests kosten mehr als Zeit. Sie kosten Vertrauen. Wenn ein roter Run oft nur Zufall ist, klickt das Team irgendwann auf Neustart und schaut nicht mehr hin. Genau dann rutscht der echte Bug durch.
Bei uns läuft Cypress mit Cypress Cloud täglich in Production, dazu PHPUnit, PHPStan und Psalm in GitHub Actions und GitLab CI. Roland Golla ist offizieller Cypress Ambassador und arbeitet seit über 20 Jahren an Testing und Refactoring. Automatisiert testen wir bei NCA seit 2013, auch Tests zum TYPO3 Core hat Roland beigetragen. Ein flakiger Test ist für uns ein Hinweis, dem wir nachgehen.
Im Cypress Workshop mit Roland bauen wir stabile Tests gemeinsam auf, für Teams gibt es die Cypress Remote Schulung. Wie KI Agenten flakige Tests aus Cypress Cloud abfragen, zeigt Cypress Cloud MCP. Stabile Tests sind die Basis für Quality Gates für KI Code in einer sauberen CI CD Pipeline mit Docker und Staging. Für reproduzierbare Daten sorgen Faker Testdaten für die lokale Entwicklung.
Ein Tag inhouse mit Roland Golla, offizieller Cypress Ambassador und seit über 20 Jahren in Testing und Refactoring zu Hause. Auf unserem YouTube Kanal zeigt er in über 70 Live Coding Tutorials, wie Cypress in echten Projekten läuft. Dazu kommt unser Open Source Plugin NCA TESTIFY: Basistests für jede Website, mit einer Zeile im CI/CD Setup. Im Workshop lernt euer Team Setup, stabile Selektoren, Custom Commands und Tests in der Pipeline.
Ein flakiger Test hat fast immer eine konkrete Ursache. Sie zeigt sich nur nicht bei jedem Lauf. Diese sechs Kandidaten prüfen wir zuerst:
Dazu kommt die Umgebung. Im CI hat der Runner oft weniger CPU als dein Laptop. Ein Test, der lokal knapp gelingt, kippt im CI. Darum ist lokal grün noch kein Beweis.
| Ursache | Symptom | Fix |
|---|---|---|
| Timing | Element nicht gefunden, Timeout nach einigen Sekunden | Auf Zustand warten: Assertion mit should statt cy.wait mit fester Zeit |
| Race Condition | Test klickt, bevor Daten geladen sind, Ergebnis wechselt | Request mit cy.intercept als Alias abfangen und mit cy.wait auf den Alias warten |
| Testdaten | Fehler nur bei bestimmten Datensätzen oder nach anderen Tests | Daten pro Test frisch anlegen, Fake Daten statt geteilter Datenbank |
| Abhängigkeit zwischen Tests | Test besteht nur in einer bestimmten Reihenfolge | Jeden Test isoliert aufsetzen, Zustand per API oder cy.session herstellen |
| Netzwerk | Sporadische Fehler bei externen Diensten | Externe Requests mit cy.intercept und Fixtures stubben |
| Animation | Element ist verdeckt oder bewegt sich beim Klick | Auf sichtbaren Endzustand prüfen, Animationen in der Testumgebung abschalten |
| Fragile Selektoren | Test bricht nach CSS oder Text Änderungen | Eigene data-cy Attribute als Selektoren nutzen |
Der Klassiker unter den Flaky Ursachen ist die feste Wartezeit. Die Cypress Doku nennt das Warten auf beliebige Zeiträume mit cy.wait(Number) ausdrücklich ein Anti Pattern. Ist die Anwendung schneller, verschwendest du Zeit. Ist sie langsamer, scheitert der Test.
// Schlecht: feste Wartezeit
cy.get('[data-cy=save]').click()
cy.wait(3000)
cy.get('[data-cy=toast]').contains('Gespeichert')
Besser ist es, auf einen Zustand zu warten. Cypress wiederholt Queries mit ihren Assertions automatisch, bis sie bestehen oder das Timeout erreicht ist. Standard sind 4 Sekunden über defaultCommandTimeout.
// Gut: auf den sichtbaren Zustand warten
cy.get('[data-cy=save]').click()
cy.get('[data-cy=toast]').should('be.visible').and('contain', 'Gespeichert')
Hängt der Zustand an einem Request, wartest du direkt auf den Request. Mit cy.intercept und einem Alias weiß Cypress genau, worauf es warten soll. Bonus: Du kannst gleich den Statuscode prüfen.
// Gut: auf den Request warten statt auf die Uhr
cy.intercept('POST', '/api/orders').as('saveOrder')
cy.get('[data-cy=save]').click()
cy.wait('@saveOrder').its('response.statusCode').should('eq', 201)
cy.get('[data-cy=toast]').should('contain', 'Gespeichert')
Ein zweiter Fallstrick: Assertions direkt hinter Aktionen. Aktionen wie click() laufen nur einmal und werden nicht wiederholt. Die Doku empfiehlt, Ketten nach einer Aktion zu beenden und das Element neu abzufragen. Mehr Praxis zu Wartestrategien findest du im NCA Blog unter Cypress Wait Best Practices.
Zwei Begriffe klingen gleich und werden oft verwechselt:
Ein typisches Setup: Im CI bekommt jeder Test bis zu zwei weitere Versuche, lokal keinen. So siehst du Flakiness beim Entwickeln sofort.
import { defineConfig } from 'cypress'
export default defineConfig({
retries: {
runMode: 2,
openMode: 0,
},
})
Retries lassen sich auch pro Test oder pro describe Block setzen. Bei einem Retry laufen beforeEach und afterEach erneut. Fehler in before und after Hooks lösen dagegen keinen Retry aus.
it('legt eine Bestellung an', { retries: { runMode: 2, openMode: 1 } }, () => {
// Testcode
})
Cypress bietet außerdem experimentelle Retry Strategien. Mit detect-flake-and-pass-on-threshold legst du fest, wie viele Versuche bestehen müssen. Mit detect-flake-but-always-fail bleibt ein flakiger Test rot, wird aber als flaky erkannt. Wichtig: Retries machen Flakiness sichtbar. Sie beheben sie nicht.
retries: {
experimentalStrategy: 'detect-flake-but-always-fail',
experimentalOptions: {
maxRetries: 2,
stopIfAnyPassed: true,
},
openMode: true,
runMode: true,
}
Ein einzelner flakiger Lauf sagt wenig. Spannend wird es über viele Runs hinweg. Genau dafür gibt es das Flaky Test Management in Cypress Cloud. Die Grundlage sind Test Retries. Ohne aktivierte Retries erkennt Cypress Cloud laut Doku keine Flaky Tests.
Was Cypress Cloud laut Doku bietet:
Zur Verfügbarkeit: Flaky Test Management setzt laut Cypress Doku mindestens den Team Plan voraus. Organisationsweites Reporting und die Data Extract API sind dem Enterprise Plan vorbehalten.
Für die Ursachensuche kombinierst du Flake Detection mit Test Replay. Du vergleichst den roten mit dem grünen Versuch und siehst, was beim ersten Mal anders war. Und mit Cypress Cloud MCP holt ein KI Agent die flakigen Tests eines Runs direkt in den Editor. Cypress Cloud ist ein US Anbieter. Nutz in Testumgebungen deshalb nur Fake Daten.
KI Agenten schreiben Cypress Tests in Sekunden. Sie schreiben dabei auch die alten Fehler in Sekunden. Feste Wartezeiten, Selektoren auf CSS Klassen, Tests, die aufeinander aufbauen. Ein Agent hat aus seinen Trainingsdaten gelernt, und dort steckt viel cy.wait(2000).
Gefährlich wird es beim Reparieren. Ein Agent, der einen roten Test grün machen soll, greift gern zur bequemen Lösung: längeres Timeout, mehr Retries, Assertion entfernen. Der Test ist dann grün, das Problem bleibt.
Darum gelten bei uns klare Regeln:
Ein Einstieg in KI generierte Tests ist cy.prompt. Es ist ein guter Weg, mit dem Testen anzufangen und nach vorne zu gehen. Stabile Suiten brauchen trotzdem Testing Wissen, das über generierte Tests hinausgeht. Wie ein Team Standards für KI Tests festlegt, beschreibt unser Blogbeitrag Testing Meta für Cypress.
Nicht jeder flakige Test lässt sich sofort reparieren. Dann braucht das Team eine Regel, sonst entscheidet jeder anders. Wir arbeiten mit drei Fragen:
Quarantäne heißt: Der Test läuft weiter, aber in einer eigenen Suite. Er blockiert den Merge nicht mehr, wird aber beobachtet. Mit Tags und einem Filter wie @cypress/grep trennst du die Suiten sauber.
describe('Checkout', { tags: '@quarantine' }, () => {
// TODO: Ticket mit Verantwortlichem und Frist verlinken
it('zeigt die Versandoptionen', () => {
// Testcode
})
})
Die wichtigste Regel: Quarantäne ist ein Wartebereich. Hat die Quarantäne kein Limit, wächst sie still weiter. Begrenze die Zahl der Tests darin oder die Zeit, die ein Test dort bleiben darf. Und lösch einen Test lieber, als ihn für immer zu ignorieren.
Place any non-deterministic test in a quarantined area. (But fix quarantined tests quickly.)
Viele Flaky Tests entstehen, weil unklar ist, was eigentlich geprüft werden soll. Darum starten wir mit Example Mapping und halten Regeln und Beispiele als lebende Spezifikation fest. Ein Test mit klarem Ziel hat eine klare Assertion, und eine klare Assertion wackelt selten.
Flakiness gibt es auch jenseits von Cypress. Wie PHPUnit flakige Tests erkennt, zeigt unser Blogbeitrag zu PHPUnit 13.3 und Flaky Tests. Für Teams mit KI Agenten beschreiben die NCA Agentic AI Coding Guardrails den Rahmen, und Vibe Coding Risiken zeigt, wo es ohne Tests kippt.
Wir helfen Teams, Flaky Tests systematisch abzubauen: Ursachen finden, Regeln festlegen, Quarantäne einführen. Dazu gibt es unser Vibe Coding Consulting und die KI Weiterbildung für Entwicklerteams. Barrierefreiheit prüfen wir in denselben Suiten mit axe und Cypress.
Passend dazu im NCA Cypress Glossar: Self Healing Tests und was Cypress bei Selektoren wirklich kann.
Optimieren Sie Ihre Webseite mit Astro JS und nutzen Sie die Vorteile einer schnellen, sicheren und barrierefreien Webseite. Erfüllen Sie die gesetzlichen Anforderungen und verbessern Sie die Benutzererfahrung Ihrer Webseite. Mit Astro JS können Sie die Ladezeit reduzieren, die Sicherheit maximieren und die SEO-Optimierung verbessern. Kontaktieren Sie uns, um mehr zu erfahren und um Ihre Webseite auf ein neues Level zu heben.
Die wichtigsten Fragen zu Ursachen, Retries, Flake Detection und Quarantäne bei Flaky Tests.
Flaky Tests sind Tests, die bei gleichem Code mal bestehen und mal scheitern. Cypress Cloud nennt einen Test flaky, wenn er erst fehlschlägt und im Retry ohne Codeänderung besteht. Die Ursache liegt meist in Timing, Testdaten, Netzwerk oder Abhängigkeiten zwischen Tests. Der Test zeigt auf ein echtes Problem, nur nicht bei jedem Lauf.
Die Klassiker sind feste Wartezeiten, Race Conditions zwischen Klick und Request, geteilte oder zufällige Testdaten und Tests, die auf den Zustand anderer Tests bauen. Dazu kommen langsame externe Dienste, Animationen und fragile Selektoren auf CSS Klassen. Im CI verstärkt weniger Rechenleistung diese Effekte, deshalb ist lokal grün noch kein Beweis.
Über das Flaky Test Management. Voraussetzung sind aktivierte Test Retries, ohne sie erkennt Cypress Cloud laut Doku keine Flakiness. Dann bekommen Tests ein Flaky Badge, Runs lassen sich filtern, und jeder Test erhält eine Einstufung nach Flake Rate. Benachrichtigungen gehen unter anderem an GitHub, GitLab, Slack und Microsoft Teams.
Laut Cypress Doku braucht Flaky Test Management mindestens den Team Plan. Organisationsweites Reporting und die Data Extract API sind dem Enterprise Plan vorbehalten. Test Replay dagegen steht laut Doku in allen Plänen zur Verfügung, mit Nutzungsgrenzen. Prüf die aktuellen Bedingungen direkt bei Cypress, weil sich Pläne ändern können.
Ja, bei der Analyse. Über Cypress Cloud MCP holt ein Agent flakige und fehlgeschlagene Tests samt Replay Link in den Editor und schlägt einen Fix vor. Ein Mensch prüft und gibt frei. Beim Schreiben neuer Tests erzeugen Agenten dagegen oft selbst Flakiness, etwa durch feste Wartezeiten. Klare Regeln und Review sind deshalb Pflicht.
Retry-ability ist eingebaut und wirkt innerhalb eines Tests. Cypress wiederholt Queries wie cy.get samt Assertion, bis sie bestehen oder das Timeout abläuft, standardmäßig 4 Sekunden. Test Retries wiederholen dagegen den ganzen Test nach einem Fehlschlag. Sie sind standardmäßig aus und werden über die Option retries in der Konfiguration eingeschaltet.
Weil eine feste Zeit nie passt. Ist die Anwendung schneller, verschwendet der Test Zeit. Ist sie langsamer, scheitert er. Die Cypress Doku nennt cy.wait mit einer Zahl ein Anti Pattern. Besser sind Assertions auf den sichtbaren Zustand oder cy.wait auf einen Alias, den du vorher mit cy.intercept angelegt hast.
Ein guter Start sind im CI ein bis zwei weitere Versuche, lokal keine. So erkennt Cypress Cloud Flakiness, und beim Entwickeln fällt sie sofort auf. Mehr Retries verstecken Probleme nur länger und verlängern rote Runs. Ein Test, der regelmäßig erst im zweiten Versuch besteht, gehört auf die Liste der Tests, die repariert werden.
Nur als letzte Möglichkeit. Zuerst suchst du die Ursache, denn oft zeigt der Test auf einen echten Fehler in Timing oder Daten. Lässt sich das nicht sofort lösen, wandert der Test mit Ticket und Frist in Quarantäne. Bleibt er dort zu lange ohne Fortschritt, ist Löschen ehrlicher als dauerhaftes Ignorieren.
Der Test läuft weiter, aber in einer eigenen Suite, die den Merge nicht blockiert. So bleibt die Hauptsuite verlässlich, und der Test wird trotzdem beobachtet. Wichtig sind ein Ticket, ein Verantwortlicher und eine Frist. Begrenze die Zahl der Tests in Quarantäne, sonst wird sie zur stillen Ablage für Probleme.
Jeder Test sollte seine Daten selbst anlegen und nicht von anderen Tests abhängen. Die Cypress Doku sagt klar, dass Tests unabhängig voneinander laufen und bestehen müssen. Mit erzeugten Fake Daten, etwa über Faker, und einer frischen Datenbasis pro Lauf verschwinden viele Fehler, die nur in bestimmter Reihenfolge auftreten.
Eigene data Attribute wie data-cy. Die Cypress Doku empfiehlt sie, weil sie von CSS und JavaScript Änderungen unabhängig sind. Selektoren auf Klassen oder sichtbare Texte brechen bei jedem Redesign. Ein data-cy Attribut zeigt zudem allen im Team, dass ein Test an diesem Element hängt und es nicht nebenbei geändert werden sollte.