Sandro Keil Selbstständig

„Wer schon einmal ein Selenium-Grid aufgesetzt hat, weiß, dass das wegen der Abhängigkeiten und der Konfiguration im besten Fall mehrere Stunden dauern kann. Mit Docker realisiert man das in Minuten, inklusive Skalierung.“

Gute Dinge kommen in kleinen Containern. Da ein Selenium-Grid aus mehreren Nodes besteht, ist Docker dafür der ideale Partner. Leichtgewichtig, stemmt auch schwere Last und kann sich sogar vervielfältigen. Vorbei sind die Zeiten, in denen man Selenium-Tests gestartet hat und dann erst mal Mittagessen gegangen ist, um nach einer Stunde festzustellen, dass es doch einen Fehler gab. In diesem Artikel erstellen wir gemeinsam ein skalierbares Selenium-Grid in wenigen Minuten, mit nur einer Handvoll Konfigurationszeilen.

Mithilfe von Selenium wird die Interaktion mit der Webanwendung automatisiert; Akzeptanz- oder Funktionstests werden dabei in einem Browser ausgeführt. Gerade beim Ausfüllen von Formularen wird auf diesem Weg viel Tipparbeit und Zeit eingespart. Die Integration von Selenium-Tests in PHPUnit ist sehr einfach und kann somit in die vorhandene Teststruktur integriert werden.

Während Unit-Tests jedoch nur einen bestimmten Teil der Applikation testen – in den meisten Fällen ist das eine einzelne Klasse – dienen Funktionstests hingegen der Verifikation. Wurde ein korrekt funktionierendes Produkt entwickelt und erfüllt die Software die Businessanforderungen? Bei dieser Art von Tests gibt es Testfälle, die alle möglichen Szenarien abdecken; auch solche, die nicht wirklich in der realen Welt existieren. Ziel ist es, eine möglichst hohe Testabdeckung zu erhalten.

Akzeptanztests hingegen stellen sicher, dass die Software die Spezifikation des Kunden oder des Product Owners erfüllt und die erwartete Funktionalität liefert. Akzeptanztests sind aus Kundensicht geschrieben und behandeln typische Szenarien, in der die Software benutzt wird. Es ist wichtig, sich auch Gedanken über die Funktionalität der Software aus Endkundensicht zu machen.

Das Selenium-Grid dient dazu, Akzeptanz- oder Funktionstests parallel auszuführen und die Ausführungszeit damit deutlich zu reduzieren. Der große Vorteil von Selenium besteht darin, Tests in einem echten Browser inklusive JavaScript und Betriebssystem auszuführen. Dadurch wird echtes Verhalten, einschließlich Browserbugs, getestet.

Mink als Abstraktion

Die Mink Library ist aus der Behat-Community bekannt, um damit Behaviour-driven Development (BDD) umzusetzen. Da es sich um eine eigenständige PHP-Library handelt, kann es sehr leicht in PHPUnit benutzt werden. Mink bietet allerdings eine höhere Flexibilität gegenüber der direkten Abstraktion von Selenium in PHPUnit.

Durch das einheitliche API von Mink für verschiedene Browser-Libraries können die Tests auch mit Headless-Browsern wie Goutte durchgeführt werden, ohne den Test anpassen zu müssen. Tests mit Headless-Browsern sind deutlich schneller als Tests mit Selenium. Die Auswahl des Treibers ist abhängig von der zu testenden Funktionalität; der Goutte-Driver unterstützt z. B. kein JavaScript, und unter Selenium werden Request und Response Header nicht ausgewertet.

Insgesamt stehen sechs Treiber zur Verfügung: Neben Goutte sind das Selenium 2, BrowserKit, Zombie, Selenium und Sahi. In diesem Beispiel wird Mink mit dem Selenium-2-Treiber verwendet. Wer gerne ein Full-Stack-Testing-Framework nutzen möchte, sollte sich Codeception anschauen. Es nutzt PHPUnit und bietet ebenfalls eine Abstraktionsschicht.

Den vollständigen Artikel lesen Sie in der Ausgabe:

PHP Magazin 5.16 - "Lizenz zum Coden"

Frontend-Tests mit Selenium sind eine gute Sache – im Grid allerdings aber sehr ressourcenintensiv. Zum Glück gibt es Docker. Und diesen Artikel, der erklärt, wie man ein Selenium Grid in Minuten an den Start bekommt.

Alle Infos zum Heft
252647Selenium-Grid mit Docker
X
- Gib Deinen Standort ein -
- or -