Was ist ein End-to-End-Test?
E2E-Test
Ein End-to-End-Test, kurz E2E-Test, ist ein automatisierter Softwaretest, der einen vollständigen Anwendungsfall so durchspielt, wie ihn eine Person erlebt: vom Klick in der Oberfläche über die Schnittstellen bis zur Datenbank und zurück. Er prüft damit das Zusammenspiel aller Teile eines Systems, nicht einzelne Funktionen.
Wenn nach einem Release die Anmeldung klemmt, obwohl jeder einzelne Unit-Test grün war, fehlt genau die Prüfung, die den ganzen Weg einmal durchgeht.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
- Prüft
- Einen kompletten Ablauf über alle Schichten
- Schreibweisen
- E2E-Test, End2End, End-2-End
- Werkzeuge
- Playwright, Cypress, Selenium, Robot Framework
- Verwechselt mit
- Integrationstest und Abnahmetest
Was „End to End“ hier bedeutet
Die beiden Enden sind der Mensch vor dem Bildschirm und das letzte System, das seine Eingabe verarbeitet. Ein End-to-End-Test lässt nichts dazwischen weg: Er startet die Anwendung so, wie sie ausgeliefert wird, bedient sie über ihre echte Oberfläche und prüft am Ende, was sichtbar herauskommt. Ob er „End to End“, „End-2-End“ oder „E2E“ heißt, ist nur eine Frage der Schreibweise, gemeint ist immer dasselbe.
Ein typischer Fall in einem Onlineshop: Der Test öffnet die Startseite, sucht einen Artikel, legt ihn in den Warenkorb, meldet sich an, schließt die Bestellung ab und prüft, ob die Bestätigung mit der richtigen Bestellnummer erscheint. Dabei laufen Frontend, API, Datenbank, Zahlungsanbindung (meist als Testsystem) und Mailversand gemeinsam. Bricht irgendwo in dieser Kette etwas, schlägt der Test fehl.
Weil die ganze Kette läuft, findet ein solcher Test Fehler, die kein Unit-Test sieht: eine Schnittstelle, die nach dem Deployment unter einer anderen Adresse liegt, ein Formular, dessen Absendeknopf von einem Cookie-Banner verdeckt wird, oder eine Konfiguration, die nur in der Testumgebung fehlt.
So sieht ein E2E-Test im Code aus
Werkzeuge wie Playwright oder Cypress steuern einen echten Browser. Der Test beschreibt Schritte und Erwartungen, das Werkzeug führt sie aus und wartet dabei selbstständig, bis ein Element sichtbar und bedienbar ist. Ein Anmeldetest mit Playwright in TypeScript sieht so aus:
import { test, expect } from '@playwright/test';
test('Anmeldung mit gültigen Daten', async ({ page }) => {
await page.goto('/login');
await page.getByLabel('E-Mail').fill('test@example.de');
await page.getByLabel('Passwort').fill('geheim123');
await page.getByRole('button', { name: 'Anmelden' }).click();
await expect(page.getByRole('heading', { name: 'Willkommen' })).toBeVisible();
}); Auffällig ist, wie die Elemente angesprochen werden: über die Beschriftung und die Rolle, also so, wie ein Mensch sie auf dem Bildschirm erkennt. Selektoren, die sich an verschachtelten CSS-Klassen oder an der Position im Dokument entlanghangeln, brechen beim nächsten Umbau des Layouts, obwohl sich fachlich nichts geändert hat. Wo Rolle und Beschriftung nicht eindeutig sind, hilft ein eigenes Testattribut wie data-testid im Markup.
Der Platz in der Testpyramide
End-to-End-Tests stehen an der Spitze der Testpyramide. Das Bild beschreibt, wie sich die Tests einer Anwendung verteilen sollten: unten viele schnelle Tests für kleine Einheiten, darüber weniger Tests für das Zusammenspiel, oben wenige, aber aussagekräftige Tests für ganze Abläufe.
| Ebene | Prüft | Laufzeit je Test | Anzahl |
|---|---|---|---|
| Unit-Test | Eine Funktion oder Klasse isoliert | Millisekunden | Sehr viele |
| Integrationstest | Zusammenspiel einiger Bausteine, etwa Dienst und Datenbank | Bis zu einigen Sekunden | Mittel |
| End-to-End-Test | Einen ganzen Ablauf über die Oberfläche | Sekunden bis Minuten | Wenige |
Der Grund für die Form ist der Preis. Jeder zusätzliche beteiligte Dienst ist ein weiterer Grund, aus dem ein Test fehlschlagen kann, und eine rote Meldung sagt dir nur, dass irgendwo in der Kette etwas klemmt, nicht wo. Deshalb decken End-to-End-Tests die geschäftskritischen Wege ab, also Anmeldung, Bestellung, Bezahlung, Registrierung, und nicht jede Feldvalidierung. Was sich eine Ebene tiefer prüfen lässt, gehört dorthin.
Gängige Werkzeuge
Die meisten Teams im Web arbeiten heute mit einem der folgenden Werkzeuge. Alle steuern einen echten Browser, sie unterscheiden sich in Sprache, Architektur und Bedienung.
-
Playwright
Von Microsoft, steuert Chromium, Firefox und WebKit und lässt sich mit TypeScript/JavaScript, Python, Java und .NET schreiben. Wartet automatisch auf Elemente und zeichnet auf Wunsch Traces mit Bildschirmfotos auf.
-
Cypress
Läuft eng am JavaScript-Ökosystem, Tests werden in JavaScript oder TypeScript geschrieben. Stark ist die interaktive Oberfläche, in der du jeden Schritt zurückverfolgen kannst.
-
Selenium
Der älteste Vertreter, baut auf dem W3C-Standard WebDriver auf und unterstützt viele Sprachen und Browser. Oft in großen, gewachsenen Testlandschaften im Einsatz.
-
Robot Framework
Ein Python-basiertes Rahmenwerk mit schlüsselwortgetriebener Syntax, das sich auch für Fachabteilungen lesen lässt. Für den Browser nutzt es Bibliotheken auf Basis von Selenium oder Playwright.
Ein End-to-End-Test braucht übrigens nicht zwingend einen Browser. Bei mobilen Apps übernimmt etwa Appium die Steuerung, bei reinen Backend-Systemen spielt der Test einen fachlichen Ablauf über mehrere Dienste hinweg nur über deren Schnittstellen durch. Entscheidend ist, dass der Ablauf von Anfang bis Ende reicht.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
End-to-End-Test und was oft damit gleichgesetzt wird
Ein Unit-Test prüft eine einzelne Funktion oder Klasse ohne Umgebung, abhängige Teile werden durch Attrappen ersetzt. Er läuft in Millisekunden und zeigt genau auf die fehlerhafte Stelle. Der End-to-End-Test prüft dagegen das Zusammenspiel und braucht dafür die vollständige Anwendung.
Ein Integrationstest prüft, ob einige Bausteine zusammenpassen, etwa ein Dienst und seine Datenbank oder zwei Dienste über eine API, meist ohne Oberfläche. Der End-to-End-Test nimmt den ganzen Weg aus Sicht der Anwender, die Grenze zwischen beiden ist in der Praxis fließend.
Der Abnahmetest beantwortet die fachliche Frage, ob das Gelieferte den vereinbarten Anforderungen entspricht, und kann auch von Hand laufen. Automatisierte End-to-End-Tests sind eine mögliche technische Umsetzung davon, aber nicht jeder E2E-Test ist ein Abnahmetest.
Die Ende-zu-Ende-Verschlüsselung ist ein Sicherheitsverfahren, bei dem nur Absender und Empfänger eine Nachricht lesen können. Mit Softwaretests hat sie nichts zu tun, sie teilt nur das Bild der zwei Enden einer Strecke.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Ein Test, dem niemand mehr glaubt, ist schlimmer als keiner
Sobald ein Durchlauf einmal rot und beim Wiederholen grün ist, gewöhnt sich das Team an, ihn einfach noch einmal zu starten. Von da an schützt die Suite nichts mehr. Die häufigste Ursache sind feste Wartezeiten im Test: Eine Sekunde Pause reicht auf dem schnellen Entwicklungsrechner und nicht mehr auf dem ausgelasteten Runner der Pipeline. Moderne Werkzeuge warten stattdessen auf eine Bedingung, etwa darauf, dass ein Knopf bedienbar ist, und genau darauf solltest du dich stützen.
Der unterschätzte Teil sind die Daten. Ein Test, der ein Benutzerkonto anlegt und es nicht wieder entfernt, läuft beim zweiten Durchlauf in einen Namenskonflikt, und zwei Tests auf demselben Konto hängen von ihrer Reihenfolge ab. Jeder Test stellt sich seinen Ausgangszustand deshalb selbst her, am besten über eine Schnittstelle statt über die Oberfläche, weil das schneller und stabiler ist.
Schlägt ein Test in der Pipeline fehl, hilft die Aufzeichnung. Bildschirmfotos, Videomitschnitte und Ablaufprotokolle zeigen den Zustand im Moment des Fehlers, denn nachstellen lässt sich ein Fehlschlag auf dem Runner sonst kaum. Schalte sie von Anfang an ein, nicht erst, wenn der erste rätselhafte Fehler auftritt.
End-to-End-Test lernen
Wie du stabile Selektoren wählst und Tests in die Pipeline hängst, üben die Trainings zu Playwright und Cypress an einer laufenden Anwendung.
Wenn die Tests danach bei jedem Push laufen sollen, findest du den passenden Rahmen in den Kursen zur Automatisierung mit GitHub Actions.
Kurse, die End-to-End-Test behandeln
- Playwright Kompakt-Kurs: Robuste E2E Tests
- Cypress Training: Effektive End-to-End-Tests
- Robot Framework - End-to-End-Tests mit Python
- JavaScript Aufbaukurs
Weitere Kurse aus diesem Bereich
Häufige Fragen
Wie viele End-to-End-Tests sind sinnvoll?
Playwright oder Cypress?
Gegen welche Umgebung soll getestet werden?
Wer schreibt End-to-End-Tests?
Laufen E2E-Tests bei jedem Commit?
Passt thematisch dazu
Damit das Team dem Ergebnis weiter glaubt, musst du die Ursachen hinter wechselnden Testergebnissen abstellen.
Weil nur wenige Fälle über den Browser laufen sollen, wandert der Rest in Prüfungen eine Ebene unter der Oberfläche.
Deine Ansprechpartner
Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.
Norbert Jansen
Beratung & Inhouse
Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.
End-to-End-Test im Kurs statt im Lexikon
Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.