Einführung
Beim End-to-End-Testen (E2E) werden realistische Nutzungsszenarios in einer Anwendung durchgespielt, wobei so viele Funktionsbereiche und Teile des in der Anwendung verwendeten Technology-Stacks miteinbezogen werden sollen wie möglich. Im Gegensatz zu Unittests, die wesentlich eingeschränkter ablaufen, sind E2E-Tests breit angelegt und werden deshalb oft auch als „Broad-Stack-Tests“ oder „Full-Stack-Tests“ bezeichnet. E2E-Tests sind darauf ausgerichtet, die Workflows einer Anwendung aus der Endnutzerperspektive zu überprüfen, weswegen sie besonders bei Management und Kunden einen hohen Stellenwert genießen. Normalerweise werden E2E-Tests am Ende des Testzyklus durchgeführt, nach Unit-, Integrations- und Systemtests. Der hohe Wert von E2E-Tests steht im Kontrast zu ihrer hohen Komplexität, Fehleranfälligkeit und einem hohen Wartungsaufwand. Aufgrund dessen ist es üblich, weniger E2E-Tests als Unit- und Integrationstests zu implementieren, wie in der Testautomatisierungspyramide dargestellt. E2E-Tests werden gewöhnlich in einer möglichst realitätsnahen Testumgebung durchgeführt, inklusive Backend-Dienste und externer Schnittstellen wie Netzwerk-, Datenbank-, und Drittanbieterdienste. Das ist auch der Grund, warum E2E-Testen Probleme aufzeigen kann, die sonst nur in einer Live-Umgebung ersichtlich sein würden, wie zum Beispiel Wartezeiten durch Kommunikationsprobleme mit einem Zahlungsdienst. In der isolierten Umgebung von Integrationstests bleibt diese Art von Problemen verborgen.
Ein E2E-Beispiel
Nehmen wir an, Sie wollen einen Webshop testen, der auf einen Drittanbieter zur Verifizierung von Zahlungen angewiesen ist. In diesem Fall würde der E2E-Test der Anwendung z.B. folgende Vorgänge beinhalten:
- Der Nutzer loggt sich ein, sucht nach einem Artikel, gibt ihn in den Warenkorb, wählt Zahlungs- und Versandart aus, schließt die Bestellung ab und loggt sich wieder aus.
- Der Nutzer loggt sich ein, sucht nach einer bestehenden Bestellung, die bereits unterwegs ist, überprüft die Sendungsverfolgung, erhält eine detaillierte Auskunft über den Auslieferungsstatus der Bestellung und loggt sich wieder aus.
- Der Nutzer loggt sich ein, sucht nach einer bestehenden Bestellung, die bereits unterwegs ist, beantragt eine Rücksendung, erhält ein Rücksendeetikett und loggt sich wieder aus.
- Der Nutzer loggt sich ein, geht auf sein Benutzerkonto, fügt eine neue Zahlungsart hinzu, erhält eine Bestätigung über die Gültigkeit der Zahlungsart und loggt sich wieder aus.
Diese Tests greifen auf Drittanbieterdienste wie Verifizierung der Zahlungsart und Sendungsverfolgung zu und beziehen Informationen wie Kundendaten, Artikelbestände, Bestellungen etc. aus einer oder mehrerer Datenbanken.
Best Practices für E2E-Tests
Ein typischer E2E-Test kann komplex ausfallen, mit einer Vielzahl an Schritten, die manuell ausgeführt viel Zeit in Anspruch nehmen. Aufgrund dieser Komplexität können E2E Tests schwierig zu automatisieren und langsam in der Ausführung sein. Die folgenden Tipps können dazu beitragen, die Kosten für E2E-Tests zu verringern und trotzdem von ihren Vorteilen zu profitieren.
Denken Sie wie der Endnutzer
Gestalten Sie E2E-Tests aus der Perspektive des Endnutzers und konzentrieren Sie sich auf die Features der Anwendung statt ihrer Implementierung. Falls möglich, verwenden Sie User-Storys, Akzeptanztests oder BDD-Szenarios, um die Nutzerperspektive zu dokumentieren.
Ausnahmen sollen Ausnahmen bleiben
Risikoanalyse durchführen
In der richtigen Reihenfolge testen
Nicht die Testumgebung vernachlässigen
Testlogik von UI-Elementdefinitionen trennen
UI-Elemente und Wartezeiten
Die richtigen Geräte
Setup- und Teardown-Prozesse optimieren
Fazit
Beim E2E-Testen ist es wichtig, auch manuelles und exploratives Testen miteinzubeziehen, da nicht immer alle Aspekte automatisiert werden können, bspw. Usability und User-Experience. Auch Leistungs- und Lasttests sollten Teil Ihrer Testprozedur sein, um alle Bereiche abzudecken. Dieser Art von Test widmen wir uns im nächsten und letzten Artikel dieser Serie.