E2E-Tests richtig einsetzen - Abläufe, Tools und CI/CD

24. Mai 2026

CI/CD-Pipeline: Build, Test (inkl. e2e tests), Staging, manuelle Freigabe, Prod. Benachrichtigungen an Slack.

Inhaltsverzeichnis

Ein Fehler im Login, ein abgebrochener Checkout oder eine nicht zugestellte Bestätigungsmail zeigt sich oft erst dann, wenn mehrere Teile einer Anwendung zusammenspielen. Genau hier setzt der E2E-Test an: Er prüft eine komplette Nutzerreise vom Browser über Backend und Datenbank bis zu angebundenen Diensten. Ich zeige, wann diese Tests wirklich sinnvoll sind, wie man sie stabil aufbaut und welche Werkzeuge sich für verschiedene Projekte eignen.

End-to-End-Tests prüfen reale Abläufe statt einzelner Codebausteine

  • Ganzheitlicher Check: Getestet wird der Weg aus Sicht des Nutzers durch die komplette Anwendung.
  • Typische Szenarien: Login, Bestellung, Zahlung, Registrierung und wichtige Geschäftsprozesse eignen sich besonders gut.
  • Wenige, gezielte Tests: Eine kleine Zahl kritischer Abläufe ist meist wertvoller als eine riesige Sammlung fragiler Skripte.
  • Stabilität zählt: Verlässliche Testdaten, eindeutige Selektoren und unabhängige Tests verhindern Fehlalarme.
  • Werkzeugwahl: Playwright, Cypress und Selenium unterscheiden sich vor allem bei Browserabdeckung, Architektur und Skalierung.

Was ein E2E-Test tatsächlich absichert

Ein End-to-End-Test simuliert einen realistischen Ablauf in der Anwendung. Der Browser öffnet beispielsweise die Anmeldeseite, ein Nutzer gibt Zugangsdaten ein, das Backend prüft die Anfrage, die Datenbank liefert das Konto und die Oberfläche zeigt anschließend das Dashboard. Entscheidend ist, dass die gesamte Kette funktioniert, nicht nur eine einzelne Funktion.

Bei einem Onlineshop könnte der Ablauf so aussehen: Produkt suchen, Artikel in den Warenkorb legen, Adresse eintragen, Bestellung auslösen und die Bestellbestätigung prüfen. Damit werden gleichzeitig Frontend, API, Sitzung, Datenhaltung und externe Zahlungslogik berührt. Ein solcher Test findet Fehler, die Unit-Tests einzelner Funktionen naturgemäß nicht erkennen können.

Der Unterschied zu Unit- und Integrationstests

Ein Unit-Test prüft eine kleine, isolierte Einheit, etwa eine Funktion zur Berechnung von Versandkosten. Ein Integrationstest untersucht, ob zwei oder mehrere Komponenten korrekt zusammenarbeiten, zum Beispiel Anwendung und Datenbank. Der End-to-End-Test geht weiter und bewertet den Prozess aus der Perspektive des tatsächlichen Nutzers.

Testart Prüft Stärke Typische Grenze
Unit-Test Einzelne Funktion oder Klasse Schnell und präzise Kennt den realen Nutzerablauf nicht
Integrationstest Zusammenspiel mehrerer Komponenten Findet Schnittstellenfehler Oft ohne vollständige Oberfläche
End-to-End-Test Kompletter Geschäftsprozess Hohe Nähe zur Realität Langsamer und anfälliger für Umgebungsfehler

Ich sehe häufig, dass Teams E2E-Tests als Ersatz für alle anderen Testarten planen. Das ist meist ein teurer Irrtum. Die beste Absicherung entsteht durch eine Mischung aus vielen schnellen Unit-Tests, passenden Integrationstests und wenigen, dafür sehr gut ausgewählten End-to-End-Szenarien.

Welche Abläufe sich für die Prüfung eignen

Nicht jede Schaltfläche braucht einen eigenen Browsertest. Die sinnvollsten Kandidaten sind Abläufe, bei denen ein Fehler unmittelbar Umsatz, Vertrauen oder den Betrieb gefährdet. Ich beginne deshalb nicht bei der Oberfläche, sondern bei der Frage, welche Nutzerreise geschäftlich unverzichtbar ist.

Kritische Nutzerreisen

  • Registrierung und Login, einschließlich Passwort-Reset und Sitzungsverwaltung
  • Checkout und Zahlung mit erfolgreicher und abgelehnter Transaktion
  • Suche und Bestellung in einem Onlineshop
  • Datei-Upload und Freigabe in einer SaaS-Anwendung
  • Rollen und Berechtigungen, etwa der Unterschied zwischen Administrator und normalem Nutzer
  • Kontakt- oder Anfrageformulare mit Speicherung und Benachrichtigung

Ein gutes Beispiel ist ein B2B-Portal, in dem ein Mitarbeiter eine Bestellung anlegt und ein Vorgesetzter sie freigibt. Hier sollte der Test nicht nur prüfen, ob beide Seiten sichtbar sind. Er muss auch sicherstellen, dass die richtige Rolle die richtige Aktion ausführen kann und der Status nach der Freigabe korrekt gespeichert wird.

Was besser nicht in den Browser gehört

Ein Szenario mit zehn Seiten, mehreren externen Systemen und zahlreichen optionalen Einstellungen klingt umfassend, ist aber oft schwer zu warten. Für solche Fälle teile ich den Prozess in kleine, unabhängige Tests auf. Jeder Test startet mit einem klar definierten Zustand und prüft genau eine wichtige Aussage.

Externe Zahlungsanbieter oder Versanddienste sollten in vielen Testläufen simuliert werden. Ein kontrollierter Stub, also eine künstliche Antwort des Fremdsystems, macht den Test reproduzierbar. Den echten Zahlungsweg prüfe ich zusätzlich in wenigen separaten Testfällen, weil sonst ein Ausfall des Drittanbieters fälschlich wie ein Fehler der eigenen Anwendung aussieht.

So baue ich einen zuverlässigen Testablauf auf

Ein stabiler Test entsteht nicht durch möglichst viele Klicks, sondern durch eine klare Vorbereitung. Für jeden Ablauf formuliere ich zuerst eine überprüfbare Erwartung, etwa: „Ein eingeloggter Kunde kann eine verfügbare Ware bestellen und sieht danach eine Bestellnummer.“ Das verhindert, dass ein Skript nur Klicks ausführt, ohne den geschäftlichen Erfolg zu kontrollieren.

  1. Geschäftsprozess auswählen: Priorisiere einen Ablauf mit hohem Risiko oder hoher Nutzung.
  2. Testzustand vorbereiten: Lege Benutzer, Produkte und Berechtigungen kontrolliert an.
  3. Realistisch handeln: Verwende sichtbare Elemente und typische Nutzeraktionen.
  4. Ergebnis prüfen: Kontrolliere nicht nur die URL, sondern sichtbare Zustände, Daten und Bestätigungen.
  5. Aufräumen: Entferne Testdaten oder verwende für jeden Lauf einen isolierten Zustand.

Selektoren und Wartezeiten

Ein Selektor beschreibt, welches Element das Testskript anklickt. Robuster als lange CSS-Ketten sind zugängliche Rollen, sichtbare Texte oder bewusst gesetzte Test-IDs. Ein Button mit der Rolle „button“ und dem Namen „Bestellung abschließen“ bleibt meist stabil, auch wenn sich das Layout ändert.

Starre Wartezeiten wie „warte zwei Sekunden“ lösen selten das eigentliche Problem. Besser ist es, auf einen konkreten Zustand zu warten, beispielsweise bis eine Antwort eingetroffen oder die Meldung „Bestellung erfolgreich“ sichtbar ist. Moderne Werkzeuge wie Playwright und Cypress bieten dafür automatische oder explizite Assertions, die den Test an den tatsächlichen Zustand der Anwendung koppeln.

Testdaten und Unabhängigkeit

Jeder Test sollte möglichst selbstständig laufen. Wenn Test B nur funktioniert, weil Test A vorher einen Warenkorb angelegt hat, wird die Fehlersuche unnötig kompliziert. Ich bevorzuge frische Testdaten pro Szenario oder eindeutig benannte Datensätze, die parallel laufende Tests nicht beeinflussen.

Für CI-Läufe, also automatisierte Prüfungen in der Entwicklungs-Pipeline, braucht die Anwendung eine reproduzierbare Umgebung. Dazu gehören feste Browser-Versionen, definierte Umgebungsvariablen, ein erreichbares Backend und eine klare Regel für Testkonten. Ohne diese Grundlagen werden technische Umgebungsprobleme leicht mit echten Softwarefehlern verwechselt.

Diagramm zeigt den Ablauf eines e2e tests: Testdaten, Ausführung (Cloud, Cross-Browser, Parallel), Erfassung (Ladezeit, JS-Fehler, Links) und Reporting.

Playwright, Cypress oder Selenium passend auswählen

Die drei Werkzeuge können Browserabläufe automatisieren, verfolgen aber unterschiedliche Ansätze. Meine Empfehlung lautet, zuerst die Anforderungen des Projekts zu prüfen und erst danach das Framework auszuwählen. Ein beliebtes Tool ist nicht automatisch das passende Tool für Browserabdeckung, Teamkompetenz und CI-Skalierung.

Werkzeug Besonders geeignet für Stärken Zu beachten
Playwright Moderne Webanwendungen und mehrere Browser Chromium, Firefox und WebKit, gute Parallelisierung, Tracing und automatische Wartezeiten Die vielen Möglichkeiten verlangen eine saubere Testarchitektur
Cypress Frontend-Teams, die schnell im Browser entwickeln und debuggen möchten Sehr gute lokale Bedienung, verständliche Syntax und übersichtliche Fehleranalyse Architektur und Browserverhalten unterscheiden sich teilweise von klassischer WebDriver-Automatisierung
Selenium Große, heterogene Umgebungen und bestehende Testlandschaften Viele Programmiersprachen, breite Browserunterstützung und etablierte Grid-Lösungen Mehr Infrastruktur- und Wartungsaufwand, besonders bei verteilten Läufen

Für ein neues JavaScript- oder TypeScript-Projekt würde ich heute häufig Playwright oder Cypress als erste Kandidaten testen. Playwright ist stark, wenn mehrere Browser und parallele CI-Läufe wichtig sind. Cypress fühlt sich oft besonders direkt an, wenn Entwickler während der Arbeit schnell sehen möchten, was im Browser passiert.

Selenium bleibt sinnvoll, wenn ein Unternehmen bereits umfangreiche WebDriver-Infrastruktur besitzt, verschiedene Programmiersprachen unterstützt oder sehr spezielle Browser- und Grid-Anforderungen hat. Ein Wechsel nur wegen eines Trends verursacht dagegen Kosten, ohne automatisch bessere Qualität zu liefern.

Warum Tests flakey werden und unnötig teuer wirken

Ein flakey Test ist ein Test, der ohne Änderung am Code einmal besteht und einmal fehlschlägt. Solche Fehlalarme zerstören Vertrauen in die Pipeline. Typische Ursachen sind asynchrone Prozesse, instabile Testdaten, zufällige IDs, externe Dienste und zu enge Zeitlimits.

  • Keine festen Pausen verwenden, sondern auf Zustände warten.
  • Testdaten vor dem Lauf kontrolliert erzeugen.
  • Tests nicht von einer bestimmten Reihenfolge abhängig machen.
  • Externe Schnittstellen in Standardläufen simulieren.
  • Bei Fehlern Screenshots, Videos, Logs und Traces sichern.
  • Wiederholungen nur zur Diagnose nutzen, nicht zum Verstecken echter Fehler.

Ein weiterer Kostenfaktor ist ein zu großer Testumfang. Wenn jede kleine Designänderung Dutzende Skripte bricht, testen die Skripte wahrscheinlich zu stark die technische Umsetzung und zu wenig das Nutzerverhalten. Gute End-to-End-Tests prüfen sichtbare Ergebnisse und wichtige Geschäftsregeln, nicht die genaue Position jedes HTML-Elements.

Auch die Laufzeit sollte bewusst gesteuert werden. Kritische Smoke-Tests, also wenige schnelle Prüfungen der wichtigsten Funktionen, können bei jedem Commit laufen. Eine breitere Browsermatrix passt eher in den Pull-Request oder in einen geplanten Lauf. So erhält das Team früh Feedback, ohne jede Änderung durch eine unnötig lange Teststrecke zu schicken.

Wie End-to-End-Tests in CI/CD ihren Wert zeigen

Der größte Nutzen

entsteht, wenn die Tests nicht nur lokal auf dem Rechner eines Entwicklers laufen. In einer CI/CD-Pipeline sollten sie nach dem Start der Anwendung eine klar definierte Umgebung prüfen und bei einem Fehler genug Informationen für die Analyse liefern. Ein rotes Ergebnis ohne Screenshot, Log oder reproduzierbaren Datensatz hilft kaum weiter.

Lesen Sie auch: Moderne Softwareentwicklung - was in der Praxis wirklich trägt

Ein praktikables Pipeline-Modell

  1. Vorprüfung: Unit- und Integrationstests laufen schnell bei jedem Commit.
  2. Smoke-Test: Die wichtigsten Nutzerreisen prüfen den bereitgestellten Build.
  3. Parallele Browserläufe: Kritische Szenarien werden in den relevanten Browsern ausgeführt.
  4. Erweiterte Regression: Weniger dringende Abläufe laufen vor dem Release oder nach Zeitplan.
  5. Fehleranalyse: Artefakte wie Trace, Screenshot und Server-Log werden automatisch gespeichert.

Ich würde die Pipeline nicht so konfigurieren, dass ein einzelner instabiler Test dauerhaft blockiert, ohne dass jemand seine Ursache untersucht. Besser ist eine klare Kennzeichnung von bekannten Problemen, eine verantwortliche Person und ein verbindliches Zeitfenster zur Reparatur. Ein ignoriertes rotes Signal ist langfristig gefährlicher als ein bewusst begrenzter Testumfang.

Für Datenschutz und Sicherheit gelten eigene Regeln. Produktionsdaten gehören nicht in automatisierte Testumgebungen, und Zugangsdaten müssen über sichere Secrets verwaltet werden. Gerade bei deutschen und europäischen Projekten sollte zusätzlich geprüft werden, ob Screenshots oder Videomitschnitte personenbezogene Informationen enthalten.

Der sinnvollste erste Schritt für ein neues Testset

Beginne mit einem einzigen kritischen Ablauf, der für Nutzer und Unternehmen wirklich zählt. Richte dafür reproduzierbare Testdaten ein, prüfe das sichtbare Ergebnis und lasse den Test zuerst lokal zuverlässig laufen. Erst wenn dieser Ablauf stabil ist, lohnt es sich, weitere Szenarien und Browser hinzuzunehmen.

Mein wichtigster Rat ist, End-to-End-Tests als gezielte Sicherheitsnetze zu behandeln, nicht als vollständige Kopie aller manuellen Klicks. Wenige unabhängige Tests mit klarer Aussage schaffen Vertrauen in Releases. Viele fragile Skripte erzeugen dagegen vor allem Wartungsarbeit und führen dazu, dass echte Fehler im Rauschen untergehen.

Häufig gestellte Fragen

Besonders sinnvoll sind kritische Abläufe wie Registrierung, Login, Passwort-Reset, Checkout, Zahlung, Bestellung, Datei-Upload, Freigaben sowie Rollen und Berechtigungen. Priorisiert werden sollten Prozesse, deren Ausfall Umsatz, Vertrauen oder den Betrieb gefährdet.

Unit-Tests prüfen einzelne Funktionen isoliert, während Integrationstests das Zusammenspiel mehrerer Komponenten untersuchen. E2E-Tests bewerten einen vollständigen Geschäftsprozess aus Sicht des Nutzers, sind dadurch realistischer, aber meist langsamer und anfälliger für Umgebungsfehler.

Verwende zugängliche Rollen, sichtbare Texte oder bewusst gesetzte Test-IDs statt fragiler CSS-Ketten. Warte auf konkrete Zustände statt auf feste Zeitspannen, erzeuge kontrollierte Testdaten, halte Tests unabhängig und simuliere externe Dienste in Standardläufen.

Playwright eignet sich besonders für moderne Webanwendungen, mehrere Browser und parallele CI-Läufe. Cypress bietet eine direkte lokale Entwicklung und gute Fehlersuche, während Selenium bei bestehenden WebDriver-Landschaften, vielen Programmiersprachen und speziellen Grid-Anforderungen sinnvoll bleibt.

Unit- und Integrationstests sollten als schnelle Vorprüfung laufen, gefolgt von kritischen Smoke-Tests des bereitgestellten Builds. Browserläufe können parallelisiert werden, erweiterte Regressionstests geplant laufen und Fehler sollten automatisch Screenshots, Logs und Traces sichern.

Artikel bewerten

Bewertung: 0.00 Stimmenanzahl: 0

Tags:

ci/cd e2e-tests playwright cypress selenium

Beitrag teilen

Artur Lemke

Artur Lemke

Mein Name ist Artur Lemke und seit nunmehr 11 Jahren beschäftige ich mich intensiv mit der Welt der Webentwicklung, der digitalen Strategie und künstlichen Intelligenz. Diese Themen faszinieren mich, weil sie die Art und Weise, wie wir arbeiten und interagieren, grundlegend verändern. Ich liebe es, komplexe Zusammenhänge zu durchdringen und sie so aufzubereiten, dass sie für jeden verständlich werden. Hier auf metawebart.de teile ich mein Wissen, analysiere aktuelle Trends und helfe Ihnen dabei, die Potenziale von KI und digitalen Strategien für Ihr eigenes Vorhaben zu erkennen und zu nutzen. Dabei lege ich großen Wert darauf, fundierte und praxisnahe Informationen zu liefern, die Ihnen wirklich weiterhelfen.

Kommentar schreiben