End-to-End-Tests sind eine klassische Methode der Softwarequalitätssicherung, um fachliche Geschäftsabläufe zu prüfen. Im Vergleich zu Unit-Tests und Integrationstest werden dabei nicht nur kleine Codeabschnitte oder konkrete Schnittstellen getestet. Der E2E-Test nimmt mehrere Teile des Systems unter die Lupe. Dabei sind in der Regel Frontend, Backend, Datenbanken und APIs im Spiel.
Häufig werden E2E-Tests auf Basis der zu Beginn des Projektes festgelegten Anforderungen des Kunden entwickelt. Der E2E-Test soll eine reale Benutzerinteraktion von Anfang bis Ende nachstellen und prüfen, ob die Software den Kundenerwartungen entspricht. Üblicherweise wird diese Testart deshalb auch als Akzeptanz- oder Abnahmetest bezeichnet. In der Testpyramide sind sie auf oberster Ebene angeordnet.
In diesem Beitrag möchte ich den E2E-Test noch etwas genauer beleuchten.
Ziele des E2E-Testings und ein exemplarischer E2E-Test
Bei der Ausführung eines E2E-Tests wird validiert, ob die Software innerhalb eines Worksflows mit allen Subsystemen korrekt zusammenarbeitet. Dabei wird nicht nur die Interaktion zwischen den Softwarekomponenten der zu prüfenden Anwendung getestet, auch externe Services und die Datenkonsistenz entlang des gesamten Arbeitsablaufes sind von Relevanz.

Angenommen, die Website eines Kino-Betreibers soll einem End-to-End-Test unterzogen werden. Ein automatisierter Testablauf könnte dann wie folgt aussehen:
- Benutzer unter 18 Jahre loggt sich auf der Website ein (Prüfung externer Service, z.B. der Schnittstelle zur Benutzerdatenbank und Authentifizierungsdienst)
- Er sucht nach einem konkreten Film (Prüfung externer Service, z.B. API, um an Filmdaten zu gelangen)
- Er versucht, den neu erschienen Film „Nightmare on Elm Street 12“ dem Warenkorb hinzuzufügen (Prüfung externer Service, z.B. Schnittstelle zur externen Jugendschutz-Datenbank)
- Es erscheint eine Hinweismeldung, dass er aufgrund seines Alters für diesen Film keine Tickets kaufen könne.
- Der Warenkorb bleibt weiterhin leer.
- Der Kunde wählt einen anderen Film und fügt zwei Tickets hinzu (Prüfung externer Service, z.B. API zum Hinzufügen der Tickets im Warenkorb)
- Warenkorb füllt sich und Tickets können gekauft werden (Prüfung externer Service, z.B. Interaktion mit Zahlungsdienstleister)
Welche Tools und Technologien für E2E-Tests?
E2E-Testfälle lassen sich gut automatisieren und gehören zu den typischen Aufgaben eines Testingenieurs. Einige bewährte Tools dafür sind:
- Postman für die Prüfung von APIs
- Selenium, Playwright oder Cypress für Oberflächentests
- Appium als Branchenstandard für mobiles Testing
- Allure für umfangreiche Reports
Darum sind E2E Tests essenziell im Software Testing
- Da sie Workflows nachstellen, werden viele Komponenten der Anwendung abgedeckt, so bieten E2E-Tests eine hohe Testabdeckung.
- Können als Regressionstests dienen, um zu validieren, dass Codeänderungen keine neuen Fehler an anderer Stelle nach sich ziehen.
- Simulieren vollständige Nutzerinteraktionen in der Anwendung und können zum Abgleich mit den definierten Kundenanforderungen genutzt werden.
Hürden beim E2E-Testing
- Im Vergleich zu Unit-Tests sind E2E-Tests häufig mit größerem Wartungsaufwand verbunden, vor allem wenn größere Änderungen im Front- und Backend vorgenommen werden. Auch setzen sie eine stabile Testumgebung voraus.
- Für agile Softwareentwicklungsprojekte reichen E2E-Tests nicht aus, sie sollten ergänzend zu Unit- und Integrationstests verwendet werden.
- Aufgrund ihrer Komplexität führen sie häufig zu unerwünschten Nebeneffekten und sogenannten Flaky-Tests.
- Da verschiedene Subsysteme validiert werden, sind häufig umfangreiche Testdaten-Sets erforderlich.
Tipps für das Handling von E2E-Tests
- Bei vielen, komplexen Testfällen eignet sich eine parallele Ausführung, um die Test-Execution-Time zu reduzieren.
- E2E-Tests sollten durchdacht und nur in begrenztem Umfang erstellt werden, viele Komponenten können bereits mit einfachen Integrationstests geprüft werden.
- E2E-Tests dürfen nicht durch kleine Anpassung im Frontend abbrechen, daher sollten von Beginn stabile CSS- oder XPath-Selektoren bestimmt werden.
- Nicht immer sind externe APIs erreichbar, hierfür können Mocking-Systeme (z.B. von Postman) genutzt werden.
Abschließende Worte
E2E-Tests sind ein bewährtes Mittel, um echte Nutzeraktionen zu simulieren. Darüber hinaus können sie gut als automatisierte Regressionstests fungieren. Sie unterstützten, die gesamte Anwendung aus Benutzersicht zu validieren, sollten jedoch aufgrund ihrer Komplexität selektiv ausgewählt werden.
Zum Verständnis der unterschiedlichen Testarten empfehle ich auch folgenden Artikel: Testpyramide.
Weiterführende Links
FAQ
Was sind End-to-End-Tests (E2E-Tests) und wofür werden sie eingesetzt?
End-to-End-Tests prüfen komplette Anwendungsprozesse aus Sicht des Benutzers, von Anfang bis Ende. In der Praxis setze ich E2E-Tests ein, um kritische Nutzerpfade wie Anmeldung, Bestellungen oder Zahlungsprozesse abzusichern. Auch für Abnahmetests sind sie gut geeignet.
Wie unterscheiden sich E2E-Tests von Unit- oder Integrationstests?
Unit-Tests prüfen einzelne Funktionen, Integrationstests das Zusammenspiel mehrerer Komponenten. E2E-Tests hingegen testen die gesamte Anwendung inklusive Frontend, Backend und Datenbank. In Projekten nutze ich z. B. WebdriverIO oder Playwright für solche Tests.
Welche Tools eignen sich für E2E-Tests?
Beliebte Tools sind WebdriverIO, Playwright, Cypress oder Selenium. Ich bevorzuge WebdriverIO in Projekten mit komplexen Frontends, da es ein flexibles Setup und viele Zusatzfunktionen bietet.
Sind E2E-Tests zeitaufwendig?
Ja, sie sind aufwendiger und laufen langsamer als Unit- oder Integrationstests. Aus meiner Erfahrung sollte man daher die Testpyramide beachten: viele Unit-Tests, einige Integrationstests und die wichtigsten E2E-Tests.
Für welche Arten von Anwendungen sind E2E-Tests besonders sinnvoll?
E2E-Tests sind sinnvoll für komplexe Web- und SaaS-Anwendungen, bei denen der komplette Workflow des Benutzers überprüft werden muss. Für kleine, rein logikbasierte Module reicht oft ein Unit-Test.
Wie kann ich E2E-Tests effizient in Projekten einsetzen?
Ich empfehle, nur kritische Pfade abzudecken, Testdaten automatisiert bereitzustellen und E2E-Tests regelmäßig in CI/CD-Pipelines auszuführen. So spart man Zeit und hält die Tests wartbar.