Testautomatisierung im Browser

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.

EbenePrüftLaufzeit je TestAnzahl
Unit-TestEine Funktion oder Klasse isoliertMillisekundenSehr viele
IntegrationstestZusammenspiel einiger Bausteine, etwa Dienst und DatenbankBis zu einigen SekundenMittel
End-to-End-TestEinen ganzen Ablauf über die OberflächeSekunden bis MinutenWenige

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
Nicht verwechseln

End-to-End-Test und was oft damit gleichgesetzt wird

End-to-End-Test gegen Unit-Test

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.

End-to-End-Test gegen Integrationstest

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.

End-to-End-Test gegen Abnahmetest

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.

End-to-End-Test gegen Ende-zu-Ende-Verschlüsselung

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
In der Praxis

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.

Häufige Fragen

Wie viele End-to-End-Tests sind sinnvoll?
So wenige wie möglich und so viele wie nötig, um die geschäftskritischen Wege abzudecken. Eine gute Faustregel ist: ein Test je Ablauf, bei dessen Ausfall Umsatz verloren geht oder Kunden anrufen. Alles andere prüfst du eine Ebene tiefer, weil es dort schneller läuft und die Ursache genauer benennt.
Playwright oder Cypress?
Beide lösen dieselbe Aufgabe zuverlässig. Playwright deckt mehr Browser-Engines und mehrere Programmiersprachen ab, Cypress bindet sich enger an JavaScript und punktet mit seiner interaktiven Oberfläche beim Entwickeln. Entscheide anhand der Sprachkenntnisse im Team und der Browser, die du abdecken musst.
Gegen welche Umgebung soll getestet werden?
Gegen eine eigene Testumgebung mit kontrollierten Daten, nicht gegen die Produktion. Fremdsysteme wie Zahlungsanbieter oder Versanddienstleister ersetzt du durch deren Testsysteme oder simulierte Antworten, weil der Test sonst rot wird, sobald deren Verfügbarkeit schwankt.
Wer schreibt End-to-End-Tests?
In vielen Teams die Entwickler selbst, ergänzt um Spezialisten für Testautomatisierung, die Werkzeuge, Testdaten und Pipeline-Anbindung betreuen. Wichtig ist, dass die Tests im selben Repository wie der Code liegen und bei jeder Änderung laufen, sonst veralten sie schneller, als sie gepflegt werden.
Laufen E2E-Tests bei jedem Commit?
Ein kleiner Satz von Rauchtests für die wichtigsten Wege kann bei jedem Push laufen, die vollständige Suite oft erst vor dem Merge oder nachts. Parallelisierung über mehrere Runner verkürzt die Laufzeit deutlich, setzt aber voraus, dass die Tests keine Daten miteinander teilen.

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.

Persönlich für dich da

Deine Ansprechpartner

Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.

Norbert Jansen

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.