React Native im Rampenlicht: 5 überzeugende Argumente für seine Verwendung
04/09/2023Was ist „DevOps“ und wie kann es helfen, besser im Wettbewerb zu bestehen?
16/11/2023Der Erfolg einer E-Commerce-Website hängt hauptsächlich von einer Kombination aus 4 grundlegenden Merkmalen ab:
- Ansprechendes Design
- Hochwertiger Content
- Klare und nutzungsfreundliche User-Flows
- Verlässliches Funktionieren
Mit anderen Worten, die Websitte sollte nicht nur die Produkte auf die beste Weise präsentieren, sondern auch sicher und stabil sein.
Wenn Sie eine solche Website betreiben, möchten Sie auf keinen Fall Geld verlieren, wenn etwas kaputtgeht. Als Entwicklerin oder Entwickler müssen Sie einen Weg finden, um sicherzustellen, dass die wichtigsten Funktionen korrekt funktionieren und Sie so schnell wie möglich über Probleme informiert werden.
In diesem Artikel werden wir über eine der möglichen Lösungen sprechen, um diese Ziele zu erreichen, nämlich automatisierte Tests.
Was ist Automatisiertes Testen?
Wie aus dem Namen hervorgeht, handelt es sich bei automatisierten Tests um eine Technik, die den Einsatz spezieller Werkzeuge zur Durchführung von Aufgaben der Funktionsvalidierung ohne Einsatz von Personal beinhaltet. Das bedeutet, dass Sie, sobald Sie sich für die Integration automatisierter Tests für Ihre Website entscheiden, von einer größeren Genauigkeit, Effizienz, Geschwindigkeit und Wiederverwendbarkeit der Testskripte profitieren und sich Ihr Team auf andere wichtige Aufgaben konzentrieren kann.
Wenn Sie mit Tests im Allgemeinen vertraut sind, kennen Sie sicherlich die verschiedenen Testarten wie Unit-, Integrations-, Leistungstests usw. Für E-Commerce-Websites empfehlen wir die Automatisierung von End-to-End-Tests (E2E), die das echte Benutzerverhalten in der realen Anwendungsumgebung nachbilden.
Ein Testskript kann die Produktliste öffnen, die Ergebnisse filtern, ein Produkt auswählen und kaufen – alles genau so, wie es ein echter Benutzer tun würde, wobei jedoch alle möglichen Probleme sofort aufgedeckt und gemeldet werden.
Für welche Features sollten Sie automatisierte Tests einsetzen?
Wenn Sie von den Vorteilen automatisierter Tests bereits so beeindruckt sind, dass Sie sofort damit beginnen, sie zu schreiben, warten Sie bitte einen Moment und lesen Sie weiter – vor allem, weil es nicht wirklich sinnvoll ist, alles zu automatisieren.
Ausgehend von dem, was wir bisher erwähnt haben, ist es leicht zu erraten, was in erster Linie durch automatisierte Tests abgedeckt werden sollte. Hier ist unsere Top-3-Liste:
- Funktionalitäten, die für den User Flow kritisch sind (z.B. Bezahlung)
- Szenarien, die aus irgendeinem Grund nicht manuell getestet werden können oder einen hohen manuellen Aufwand während des Testens erfordern (z.B. das Ausfüllen mehrerer Formulare nach bestimmten Regeln oder das Einrichten bestimmter Filterkriterien, um ein Produkt zu finden, das ohne weitere Stornierung-Möglichkeiten gekauft werden darf)
- sich wiederholende Tests (z.B. wenn es mehrere White Labels mit der gleichen Codebasis, aber unterschiedlichen Konfigurationen gibt).
Automatisierte Tests für diese Fälle sind auf jeden Fall ein guter Ausgangspunkt und ein großer Schritt in Richtung einer verbesserten Stabilität.
Warum sind automatisierte Tests eine wertvolle Ergänzung zum Monitoring und Alarmierung??
Wenn man über die Zuverlässigkeit und Stabilität von Webanwendungen spricht, kommt man nicht umhin, Konzepte wie Metriken, Überwachung und Warnmeldungen zu erwähnen. Wenn das Überwachungssystem ordnungsgemäß eingerichtet ist und bereits aussagekräftige Ergebnisse liefert, einschließlich der Benachrichtigung über Vorfälle in Echtzeit, könnte man sagen, dass es nicht notwendig ist, etwas darüber hinaus zu haben. Man sollte jedoch nie vergessen, dass all diese Komponenten normalerweise nur in der Produktionsumgebung laufen und nur auf bestimmte kritische Ereignisse reagieren. Sie sollten auch ein Instrument haben, um die Funktionalität der Website ständig zu überprüfen.
Automatisierte Tests können in jeder Umgebung ausgeführt werden, angefangen beim Rechner der Entwicklerin bzw. des Entwicklers. Wenn Ihr Team eine neue Funktion entwickelt oder einen Fehler behebt, möchten Sie den Gesamtzustand der Anwendung so früh wie möglich überprüfen.
Wenn Sie den Prozess der kontinuierlichen Integration (Continuous Integration, CI) um automatisierte Tests erweitern, ist es viel wahrscheinlicher, dass das Qualitätsniveau der Anwendung nicht sinkt, und Sie sind in der Lage, mögliche Fehler bereits nach der ersten Bereitstellung auf einer internen Instanz zu erkennen.
Wenn also ein Testskript bei der Bezahlung eines Produkts versagt, müssen Sie nicht warten, bis dasselbe bei einem echten Benutzer auf der echten Seite passiert – außerdem haben Sie bereits eine Vorstellung davon, welche Änderung dieses Problem verursachen könnte, und somit die Möglichkeit, es direkt zu untersuchen.
Warum wird das Projektmanagement glücklich (und auch unglücklich!) sein, wenn Sie automatisierte Tests integrieren??
Als Verantwortliche für organisatorische Aufgaben und für die direkte Kommunikation mit der Website-Betreiberin bzw. des Website-Betreibers sollten Projektmanagerinnen und -manager immer einen guten Nachweis haben, dass alles, was live ist oder live gehen soll, auch funktioniert. Mit automatisierten Tests geht das.
Wenn die Tests fehlschlagen, können Sie im Voraus erkennen, dass einige Funktionen zusätzliche Arbeit erfordern, und können entsprechend vorausplanen. Das Projektmanagement kann die Entwicklerinnen und Entwickler so schnell wie möglich auf die Probleme in der produktiven Umgebung hinweisen. Wenn die Tests erfolgreich sind, können Sie sicher sein, dass eine neue Version pünktlich und ohne Probleme ausgeliefert wird oder dass die produktive Umgebung wie erwartet funktioniert.
Aber auch die automatisierten Prozesse können manchmal ins Stocken geraten. Zum Beispiel kann eine Pipeline, die ein Testskript ausführen soll, aufgrund von Ressourcenmangel stecken bleiben, was zu falschen Fehlermeldungen führen kann. Wenn es nicht möglich ist, zwischen diesen Meldungen und echten Fehlern zu unterscheiden, kann dies zu Panik führen. An dieser Stelle ist die Team-Arbeit wichtig – jemand mit technischem Hintergrund sollte in der Lage sein, auf die Fehlermeldung zu reagieren und festzustellen, ob es sich um ein echtes Problem oder nur um einen Fehlalarm handelt.
Warum brauchen Sie wahrscheinlich einen eigene QA-Expertise in Ihrem Team, um die Tests zu erstellen und zu pflegen??
Ein automatisiertes Testskript zu erstellen bedeutet, etwas Code zu schreiben. Aber wenn Sie glauben, dass dies ein neues Abenteuer für Ihr Team von Entwicklern ist, irren Sie sich vielleicht. Natürlich sind Entwicklerinnen und Entwickler in der Regel gut darin, neue Technologien zu erlernen, und sie wissen genau, wie alles auf der Website funktionieren sollte. Das ist jedoch nicht genug.
Bei automatisierten Tests geht es nicht nur um die Erstimplementierung, sondern auch um die Wartung. Wann immer sich etwas an der Website ändert, müssen die Testskripte entsprechend aktualisiert werden, um den neuen Zustand abzudecken. Entwicklerinnen und Entwickler, die sich auf ihre eigentliche Aufgabe konzentrieren, werden bessere Ergebnisse erzielen als solche, die ständig damit beschäftigt sind, das zu tun, was eigentlich QA-Ingenieurinnen und -Ingenieure tun sollte.
Aus professioneller Sicht hat QA einen anderen Blickwinkel auf den Testprozess. Sie können markantere Testszenarien erkennen, geeignetere Testtools auswählen und werden höchstwahrscheinlich weniger Zeit mit dem Schreiben von Testskripten verbringen. Entwicklerinnen und Entwickler sollten Features erstellen – QA sollten sie verifizieren. Dieses Tandem ist der Schlüssel zu einer effizienteren Arbeit und damit zur Zuverlässigkeit der Website-Funktionen.
Warum wir uns entschieden haben, automatisierte Tests zu schreiben, und wie wir sie einsetzen?
Eines der neuesten Produkte von freshcells, die TravelSandbox® QuickStart, ist eine Verkaufsplattform für den Online-Reisemarkt. Sie läuft erfolgreich in der Produktion für mehrere Kunden, darunter sehr große Akteure der Reisebranche.
Wie andere E-Commerce-Websites bietet sie die Möglichkeit, ein Produkt zu kaufen, das in unserem Fall eine Kombination aus Unterkunft, Flug und verschiedenen Zusatzleistungen wie Versicherungen oder Mietwagen ist. Um all diese Dinge abzudecken, müssen wir Buchungsabläufe einführen, die aus technischer Sicht recht komplex sind – wenn beispielsweise eine Versicherung direkt bei einem Drittanbieter gebucht wird, berücksichtigen wir getrennte Zahlungen für diese und das Hauptreisepaket. Außerdem geht es manchmal darum, neue verfügbare Dienstleistungen oder Zahlungsmethoden hinzuzufügen oder sich an die Änderungen der externen APIs oder der Geschäftsanforderungen anzupassen.
Daraus ergibt sich natürlich die Notwendigkeit, alle Teile des Buchungsprozesses äußerst stabil zu halten, insbesondere diejenigen, die von externen Systemen abhängig sind, und in der Lage zu sein, etwaige Probleme abzufangen, noch bevor sie bei echten Nutzern auftreten.
Überwachung der Infrastruktur
Als Erstes haben wir die Überwachungsinfrastruktur eingerichtet – jede wichtige interne Aktion des Buchungs-Microservice erzeugt Log-Datensätze, die zur Identifizierung von Fehlern und zur Erstellung von Warnungen verwendet werden können, wenn die durchschnittliche Fehlerrate ein bestimmtes Niveau erreicht. Das Support-Team wird über solche Fälle sofort benachrichtigt und kann sich direkt um die Probleme kümmern.
Wir wollten dies aber noch weiter verbessern und kamen auf die Idee, mindestens zweimal am Tag automatisierte Tests gegen die Produktionsumgebungen laufen zu lassen. Auf diese Weise konnten wir die kritischsten buchungsbezogenen Funktionen explizit überprüfen, und selbst wenn es in den letzten 24 Stunden keine echten Buchungen gab, konnten wir sie selbst auslösen, um zu prüfen, ob sich das System im Normalzustand befindet.
Automatisierte Tests
Die Erstellung automatisierter Tests war auf jeden Fall eine gute Lösung, die wir zumindest aus folgenden Gründen in Betracht zogen:
- Obwohl die Websites der Kundinnen und Kunden aufgrund bestimmter kundenspezifischer Anforderungen bis zu einem gewissen Grad unterschiedlich sind, stammen sie alle aus demselben QuickStart-Kern, wodurch wir den Vorteil der Wiederverwendbarkeit der Testskripte nutzen können
- Die Möglichkeit, Tests außerhalb der normalen Arbeitszeiten, am späten Abend oder am Wochenende, durchzuführen, wenn keine manuellen Ressourcen zur Verfügung stehen, aber die Systemlast steigen kann, weil die Leute Zeit haben, sich zu entspannen und eine Reise für einen bevorstehenden Urlaub zu buchen, gibt uns einen zusätzlichen Einblick in das, was in diesen sehr wichtigen Zeiträumen passiert, in denen unsere Kunden das meiste Geld verdienen.
Als Testframework haben wir uns für Cypress entschieden – eine moderne, leichtgewichtige Lösung, die Funktionen wie Cross-Browser-Support, Debug-Fähigkeit, CLI-Befehle, offizielle Docker-Images für die Ausführung in CI, Screenshots, die bei Fehlern automatisch erstellt werden, und Videos der gesamten Testsuite bietet, die für die weitere Analyse der Ergebnisse im Cypress Dashboard zur Verfügung stehen.
Für unsere Buchungsablauftests war es auch besonders relevant, eine Anzahl von Wiederholungsversuchen konfigurieren zu können, da die Verfügbarkeitsprüfung für ein Angebot fehlschlagen kann, wenn ein Zimmer oder ein Flug ausgebucht ist, was aber nicht bedeutet, dass die Buchung nicht funktioniert. In solchen Fällen wollten wir den Test nicht direkt als fehlgeschlagen markieren, sondern mit einem anderen Angebot neu beginnen. Glücklicherweise bietet Cypress dies von Haus aus an.
Ein zusätzliches Plus war das offizielle ESLint-Plugin, sodass wir Tests nach den besten Praktiken schreiben und ihren Code so sauber halten konnten wie den Code unserer Anwendung im Allgemeinen. Die endgültige Entscheidung wurde von den Entwickler- und DevOps-Teams gemeinsam getroffen, d. h. alle, die an der Erstellung von Tests und deren Einbindung in den CI-Prozess beteiligt waren, einigten sich auf die Verwendung von Cypress, da es ihren Anforderungen entsprach.
Dokumentation
Bevor wir die Tests schrieben, bereiteten wir eine Dokumentation vor.
Zunächst erstellten wir Flussdiagramme als visuelle Darstellung des zu testenden Buchungsprozesses für jeden Kunden. Auf diese Weise konnten wir die gemeinsamen Muster für die Kernimplementierung und die für die Kundenprojekte hinzuzufügenden Besonderheiten ermitteln.
Zweitens haben wir die Buchungsregeln mit allen Kundinnen und Kunden genehmigt. Das Testen in der Produktionsumgebung bedeutet, dass die Buchungen in den realen Buchungssystemen landen und nicht jedes System in der Lage ist zu erkennen, dass es sich nur um einen Test handelt, der auf bestimmten Kriterien wie einem bestimmten Vor- und Nachnamen der Reisenden, einem bestimmten Kommentar oder einer gefälschten Kreditkartennummer basiert.
Manchmal ist es notwendig, eine Stornierung per E-Mail mit der Reservierungsnummer zu beantragen oder ein bestimmtes Reisebüro auszuwählen, das die Zahlung entgegennehmen und die Nachbuchungs-Vorgänge verwalten soll. All diese Regeln müssen im Voraus berücksichtigt werden, um einen Test zu erstellen, der die kritischen Funktionen abdeckt und gleichzeitig die Backoffices nicht stört.
Als Proof of Concept schrieben wir schließlich Tests für den Kern, die in einer internen Umgebung ausgeführt werden sollten. Parallel dazu entwickelten wir eine CI-Lösung, um den Testlauf automatisch nach der Bereitstellung in dieser Umgebung auszulösen, und richteten einen CRON-Job ein, der dies viermal am Tag tut. Nachdem dies erledigt war, schulten wir alle Entwickler über die Grundlagen von Cypress und die genaue Implementierung unserer Tests.
Mit dieser Grundlage konnten wir mit der Arbeit an der ersten Client-basierten Integration der Buchungsablauftests beginnen, die erfolgreich in Betrieb genommen wurde und derzeit funktioniert und uns hilft, die wichtigsten Funktionen der Website im Auge zu behalten.
Fazit
Die Einführung von automatisierten Tests ist eine großartige Möglichkeit, die Zuverlässigkeit der kritischsten Funktionen Ihrer E-Commerce-Website zu überprüfen und zu erhalten. Bei freshcells planen wir auf jeden Fall, automatisierte Tests nicht nur für den Buchungsablauf, sondern auch für andere Bereiche einzusetzen, einschließlich der User Experience und interner Szenarien, wie z. B. Content Management mit freshMS.