Automatische Oberflächentests für Magento mit Selenium 

Gestern bin ich über einen Blogbeitrag von Matthias Zeis gestolpert, in dem er auf das Magento Test Automation Framework (TAF) und die sich damit ergebenden Möglichkeiten eingeht. Wir beschäftigen uns auch bereits seit geraumer Zeit mit automatischen Oberflächentests für Magento, die und gerade in den letzten Projekte - z.B. beim Relaunch von WMF - extrem geholfen haben, die Qualität der auszuliefernden Shop-Software zu verbessern. Daraus haben wir inzwischen ein Produkt für automatische Oberflächentests für Magento entwickelt, mit dem Magento-Shops automatisch getestet werden können. Diese fix und fertige Lösung steht Magento Shopbetreiber sowie Dienstleister ab sofort - auf Wunsch auch als White-Label-Lösung - zur Verfügung . Mit diesem Beitrag möchten wir hier über unsere Ansätze und Erfahrungswerte berichten.

Regelmäßiges Testen ist Voraussetzung für die Entwicklung qualitativ hochwertiger Software. Dies gilt ganz allgemein, im Falle von Magento aber insbesondere. Der mögliche Einsatz von Testautomatisierung nimmt dem Tester dabei sehr viel Arbeit ab und bietet im Gegenzug viele Effizienzvorteile. Speziell im Umfeld von automatischen Oberflächentests bei Webapplikationen scheint sich aber die Erfahrung und der Einsatz entsprechender Techniken noch in Grenzen zu halten. Die Vorteile erweisen es als lohnenswert, sich mit dem Thema näher zu beschäftigen und den Einsatz einer solchen Lösung im nächsten Projekt in Erwägung zu ziehen. Eine mögliche Realisierung wird anhand des Automatisierungswerkzeugs Selenium vorgestellt.


Abb.: TechDivision Produkt "Automatisierte Oberflächentests für Magento" 


Anwender moderner Webapplikationen wollen diese ununterbrochen erreichen und fordern einwandfreie Funktionalität. Eine Webanwendung muss zudem auf jedem der auf dem Markt bekannten Browser einwandfrei und auf gleiche Weise arbeiten. Die Entwicklung oder kleine Änderungen an der Applikation gefährden dieses Ziel zumindest temporär. Bei eingeschränkter Funktionalität wandern die Benutzer frustriert ab. Dies kann unter Umständen zu finanziellen Verlusten führen.
Dieses Dilemma können Tests beheben, die kontinuierlich den Zustand der Software testen und auswerten. Genau dies machen unsere automatisierten Oberflächentests für Magento und sorgen so für Sicherheit und Gewährleistung der Umsätze. Sie stellen dem Entwicklungsprozess eine Metrik bereit, an der die Qualität der Software gemessen werden kann. Dabei ist es wichtig, auch die Oberfläche auf Funktionalität zu testen, um zum einen die Kompatibilität zu den verschiedenen Browsern zu garantieren, und um zum anderen die Anwendungsfälle der Benutzer mit Tests abzudecken. Schließlich ist die Oberfläche die Schnittstelle zwischen Benutzer und Webapplikation. Der Aufwand und die Komplexität einer solchen Testabdeckung sind aufgrund der vielen Browser und Plattformen sehr hoch, deshalb ist es sinnvoll, dieses Vorhaben zu automatisieren.

Einführung in die Testautomatisierung

Automatische Tests machen Softwarequalität messbar und zeigen Fehler schneller als bei manuellen Testvorgängen auf. Sie informieren das Entwicklungsteam innerhalb kürzester Zeit über den aktuellen Zustand der zu entwickelnden Software. Durch Durchführung der Tests in regelmäßigen Abständen kann die Qualität auf ein konstantes Niveau gehoben werden und neu in das System integrierte Funktionen schneller validiert werden. Tests können theoretisch unendlich oft unter verschiedenen Bedingungen ausgeführt werden. Sogenannte datengetriebene Tests erlauben die Testausführung mit unterschiedlichen Testdaten: Sinnvolle (semantisch richtige) Kombinationen beziehungsweise Eingaben sind genauso möglich wie sinnlose (semantisch falsche). Dieses Vorgehen deckt abhängig vom Testaufwand einen Großteil der Anwendungsfälle ab, die täglich auftreten.

Automatisierte Tests müssen dabei die folgenden Kriterien erfüllen:

  • Garantie von Vor- und Nachbedingungen
  • Ausführung und Kontrolle des Tests
  • Dokumentation des Testvorgangs
  • Vergleich zwischen eingetretenem und erwartetem Ergebnis
  • Entscheidung über Erfolg oder Misserfolg
  • Übersichtliche Darstellung des kompletten Testvorgangs

Der Automatisierungsvorgang weist allerdings auch Grenzen auf. Ein zu automatisierender Prozess muss standardisierbar und stereotyp sein. Jeder einzelne Teilschritt des Prozesses muss in den automatisierten Vorgang integrierbar und wiederholbar sein. Der Konzeptionsaufwand ist vergleichbar mit der Entwicklung einer Produktivsoftware. Ist allerdings das Grundgerüst gestellt, die Hardwareinfrastruktur eingerichtet und erste Erfahrungen gesammelt, lässt sich die erstellte Testsuite leicht einsetzen und für ähnliche Webapplikationen wiederverwenden.

Browsersteuerung mit Selenium

Selenium ist ein aus dem Open-Source-Bereich stammendes Framework zur automatischen Browsersteuerung, welches unter der Apache-2.0-Lizenz veröffentlicht wurde. Es unterstützt die Lokalisierung und Interaktion mit Oberflächenelementen einer Webapplikation und arbeitet plattformunabhängig und browserübergreifend. Dieser Vorteil erlaubt es, mit Selenium gesteuerte Testfälle sehr gut zu skalieren und zu parallelisieren, indem ein Testfall in mehreren Browsern auf verschiedenen Betriebssystemen ausgeführt wird.

Die Grenzen von Selenium IDE und Selenium 1

Selenium gibt es in mehreren Versionen: Das Firefox-PlugIn Selenium IDE ist ein Capture & Replay-Werkzeug, mit dem man Anwendungsfälle live aufzeichnen und später abspielen kann. Für verlässliche und professionelle Testsuiten eignet sich Selenium IDE aus drei Gründen nicht: Erstens generiert es starr und unflexible Testscripte mit im Code fest eingebetteten Parametern. Zweitens überprüft es bei der Generierung von Lokalisierungsmöglichkeiten von Webelementen diese nicht auf Eindeutigkeit. Drittens weisen die mit dem PlugIn erstellten Tests insbesondere bei ansynchroner Kommunikation zwischen Applikation und Webserver große Instabilität auf. Somit können Testfehlschläge entstehen, obwohl die Webapplikation einwandfrei funktioniert.


Selenium 1 erschien 2004 und kommuniziert über injizierte JavaScript-Befehle mit dem Browser. Aufgrund der Same-Origin-Policy moderner Browser muss ein Proxyserver (Selenium RC) eingebunden werden, der aus Sicht des Browsers den Applikationsserver darstellt und somit die Injizierung zulässt. Der Aufbau einer Testsuite ist im Vergleich zu Selenium 2 dementsprechend umständlicher.


Abbildung 1: Mit Hilfe des Selenium RC – Servers wird die Same Origin Policy moderner Browser umgangen


Selenium 2 im Grid

Die zweite Version von Selenium ist eine Fusion der ersten Version und dem WebDriver Framework von Googles Entwickler Simon Stewart. Sie ist abwärtskompatibel zur ersten Version, steuert aber die Browser über ihre nativen Automatisierungs-APIs und umgeht somit das JavaScript-Problem der Vorgängerversion. Wichtig für Cross-Browser-Tests ist Selenium Grid. Es übernimmt die Kommunikation und Verteilung von Testabläufen in einem verteilten System; automatisierte Testabläufe lassen sich deshalb horizontal skalieren. Die Testfälle spezifizieren eine bestimmte Browser/Plattform-Kombination, bei der sogar verschiedene Browserversionen spezifiziert werden können. Anhand dieser Spezifikation wird in dem vorhandenen verteilten System nach einer verfügbaren Maschine gesucht, die diese Anforderungen erfüllen kann und auf ihr der Test zur Ausführung gebracht. Stellt man Maschinen redundant zur Verfügung, lassen sich Tests bis zum Erreichen des maximalen Parallelisierungsgrades gleichzeitig ausführen. Diese automatische Vorgehensweise liefert Testergebnisse in Minutenintervallen. Ein Tester würde bei manueller Testabdeckung hingegen Tage benötigen.

Der Weg zur Testsuite

Wie kann die Architektur einer Testsuite mit Selenium 2 und Selenium Grid aussehen, die Cross-Browser-Tests auf verschiedenen Plattformen ausführen kann? Beispiel für eine Application Under Test (AUT) ist eine Standardinstallation des Webshops Magento. Unsere Testlandschaft besteht aus virtuellen Maschinen (VM) mit verschiedenen Plattformen und möglichst vielen unterschiedlichen Browserversionen. Eine VM wird als der sogenannte „Hub“ ausgewählt. Dieser teilt den einzelnen Testfällen eine verfügbare Test-VM zu. Auf ihm wird der Selenium Server gestartet: java -jar selenium-server-standalone-2.x.x.jar -role hub. Auf jeder anderen VM wird ebenfalls der Server gestartet, allerdings mit anderen Parametern: java -jar selenium-server-standalone-2.x.x.jar -role wd -hub http://hub-ip-adress/grid/register -port 5555.  Jede VM registriert sich nun beim Hub und wartet auf Tests zur Ausführung. Mit weiteren Parametern kann die Testmaschine unter Anderem die Anzahl an gleichzeitigen Testausführungen einschränken, Browserarten und -versionen, sowie die Plattform spezifizieren und dem Hub somit bekannt machen. Unsere Testfälle können nun entweder von einem Entwicklercomputer oder während eines Nightly Builds aus einem Continuous-Integration-System in der Testlandschaft gestartet werden.



Abbildung 2: Architektur der Testsuite


Wie gestaltet man die Testfälle?

Der beste Weg ist ein Testframework wie JUnit oder TestNG als Unterstützung zu benutzen. Folgende drei Designpatterns gestalten die Testsuite generisch und flexibel:

  • Page Object Design Pattern

Einzelne Seitenabschnitte oder komplette Seiten werden als Java Klasse repräsentiert, welche verschiedene Methoden zur Interaktion mit der repräsentierten Seite anbietet (z.B: Login-Formular mit enterLoginData() und login()). Diese Klassen können von mehreren Testfällen benutzt werden. Die Ergebnisvalidierung findet trotzdem NUR im Testfall statt!

  • UI-Mapping

Oberflächenelemente werden mit Hilfe von Lokalisierungsmöglichkeiten wie beispielsweise XPath, ID- oder Class-Attributen adressiert. Da sich diese im Verlauf der Entwicklung der Webapplikation ändern können, ergibt es Sinn, diese an einer Stelle (z.B. XML-Datei) in Verbindung mit einem Alias, welcher in der kompletten Testsuite repräsentativ für die Lokalisierungsmöglichkeit steht, zu kapseln.

  • Data Provider des Testframeworks benutzen

Die Testdaten kann man zum Beispiel aus XML-Dateien oder Datenbanken auslesen und mit Hilfe der Data Provider eines Testframeworks an die einzelnen Testfälle vermitteln.

Übersichtliche Darstellung des Testergebnisses

Niemand möchte sich lange mit undeutlichen Fehlermeldungen rumschlagen. Da sich Projektleiter, Manager oder andere Stakeholder für das Testergebnis interessieren, sollte dieses möglichst gut verständlich und übersichtlich dargestellt sein. Ein idealer Weg ist die Videodokumentation während der Testausführung. Dazu wird vor Beginn eines Testfalles eine Videoaufzeichnung auf der jeweiligen Test-VM gestartet. Anschließend wird das Video zentral auf einem Videostreaming-Server kopiert (auch hier könnte eine VM gute Dienste leisten). Gute Videocapturing-Werkzeuge sind der VLC Player oder FFmpeg, wobei letzteres eine etwas bessere Performance bietet. Wie soetwas dann exemplarisch aussehen kann, zeigt das nachfolgende Video für einen Magento Standard Checkout



In einem Continuous-Integration-System stellt man das Testergebnis übersichtlich dar und fügt jedem Testfall die benutzten Testdaten und einen Link zum Video hinzu. Über eine Notifications-App wie „Notifo“ lässt sich das Testergebnis sogar auf Smartphones schicken.


Abbildung 3: Reporting im CI-System


Abbildung 4: iPhone-Benachrichtigung


Abbildung 5: Videostreamingserver


Fazit

Die hier angesprochenen Ideen für eine automatisierte Testsuite wurden nur oberflächlich angeschnitten, um einen Gesamteindruck der Möglichkeiten zu bekommen, wie man das Testen teilweise effizienter gestalten und die Softwarequalität steigern kann. Manuelles Testen kann Stunden oder Tage in Anspruch nehmen, Cross-Browser-Tests gestalten sich als sehr langwierig, stereotype Arbeit ermüdet – all diese Probleme sind mit dieser Lösung aus der Welt geschaffen und wurden gegen Vorteile wie Zeit- und Kostenersparnis eingetauscht.

Man muss sich trotz allem vorher die Frage stellen, ob sich Testautomatisierung wirklich lohnt. Dies ist sehr stark von dem individuellen Projekt abhängig. Die untenstehende Tabelle fasst die wichtigsten Punkte hierzu noch einmal zusammen. Die Realisierung einer Testautomatisierung erfordert geschickte Planung. Projekte können zu klein sein, um den nötigen Zeitaufwand oder Budget für die Umsetzung der Automatisierung bereitzustellen. Speziell bei automatischen Oberflächentests von Webapplikationen muss sehr exakt vorgegangen werden, da die instinktive Wahrnehmung eines menschlichen Testers fehlt. Es ist der gesunde Menschenverstand, der genau dann gefragt wird und entscheidet, wenn die stereotype Abarbeitung der Testabläufe durch nicht erwartete Ereignisse unterbrochen wird.

Hier lohnt sich die Automatisierung

  • Testfälle sind stereotyp
  • Regressionstests
  • Schnelle Evaluation und Nachweisbarkeit der Funktionalität der Applikation
  • Kosten- und Zeitersparnis

Hier lohnt sich die Automatisierung nicht

  • Zeitaufwand für die Erstellung der automatischen Tests im Verhältnis zur Entwicklungszeit der Applikation zu hoch
  • Hardwareinfrastruktur fehlt
  • Fehlende Erfahrung oder Wissen im Bereich der Testautomatisierung von Weboberflächen

Wir verwenden automatisierten Testverfahren bereits seit geraumer Zeit und bei unterschiedlichen Magento-Projekten sehr erfolgreich. Insbesondere bei umfangreichen und komplexen Shop-Projekten kann die Qualität und Sicherheit der auszuliefernden Shop-Software - sowohl auf Shopbetreiber- als auch Agenturseite - damit signifikant erhöht werden. Aufgrund des doch nicht immer ganz geringen Aufwandes für derartige Testverfahren, eignet sich das Ganze primär für größere und komplexere Shop-Projekte.

Für interessierte Shopbetreiber sowie Dienstleister bieten wir unsere automatisierten Oberflächentests für Magento inzwischen auch als Produkt - auf Wunsch auch als White-Label-Lösung - an. Alle wichtigen Informationen dazu finden Sie auf unserer Website. Bei Fragen stehen wir natürlich auch jederzeit gerne zur Verfügung.

Neueste Posts

360 Stories – ein Spiel für Teams Die B2B E-Commerce Pyramide
Digital Storytelling - ein Kurztrip in die Kreativität und wieder zurück
TechDivision veröffentlicht Magento 2 Schnittstelle für pixi* TechDivision wird von Focus Business als „TOP Arbeitgeber Mittelstand 2018“ ausgezeichnet

Archiv

Dezember November Oktober September August Juli Juni Mai April März Februar Januar
Dezember November Oktober September August Juni Mai April Februar Januar
Dezember November Oktober September August Juli Juni März Februar
Oktober September August Juli Juni Mai April März Januar
Dezember November Oktober September August Juli Mai April Februar
November Oktober September April Februar
Dezember September Juni Mai Februar Januar
Juli Mai April März Februar Januar
September August Juli März
Oktober September Juli Juni Mai März Februar
Februar

Kategorien

E-Commerce Unternehmensmeldung Online-Marketing Magento Commerce Neos TYPO3 SEO SEA Usability Digitale Transformation Agile Projektentwicklung Corporate Web Analytics Künstliche Intelligenz Mobile Marketing Social Media Veranstaltungen Research & Development

Unser Herz schlägt online -
Deins Auch?


Wir stellen uns jeden Tag neuen Heraus-forderungen des Online-Business – immer auf der Suche nach spannenden Lösungs-ansätzen und sinnvollen Technologien. Eine Vielzahl namhafter Kunden vertrauen auf das Online Know-how „Made in Kolbermoor / Rosenheim und München“. 

Lust auf TechDivision? Hier geht zu unseren Stellenanzeigen

eStrategy Magazin


Erfahren Sie mehr zu den Themen E-Commerce, Online-Marketing, Mobile, Projektmanagement, Webentwicklung und E-Recht in unserem kostenlosen Online-Magazin.

Jetzt herunterladen!

Whitepaper:
Agiles Projektmanagement


In unserem kostenlosen Whitepaper versuchen wir Basiswissen und Erfahrungen aus vielen Jahren täglicher Projekt- und Unternehmenspraxis zu vermitteln, mit denen Sie die Anforderungen des Arbeitslebens von Heute besser bewältigen können.

Jetzt herunterladen!

Autor

Haben wir Ihr Interesse mit unserem Blog geweckt?

Wir sind der richtige Partner für anspruchsvolle Projekte im Bereich E-Commerce, Corporate Web, Consulting und Online-Marketing. Sprechen Sie mit uns!

Autor

Josef Willkommer Geschäftsführer / CMO