"Untestbare" Webprojekte mit LiveTest zeitnah testen

PHP-Code auf dem Prüfstand
Kommentare

In den wenigsten Fällen haben Entwickler die Chance, eine Applikation komplett zu entwerfen. Häufig bekommen sie bereits fertige Anwendungen, zum Beispiel von ehemaligen Kollegen oder von anderen Agenturen. Bis größere Anpassungen anstehen, ist es oft kein Problem. Im Idealfall stellen ohnehin ausreichende Unit Tests sicher, dass es nicht zu Seiteneffekten kommt. Die Realität sieht jedoch meist anders aus. LiveTest kann nun dabei helfen, auch quasi untestbare Webapplikationen testbar zu machen.

LiveTest ist eine Open-Source-Applikation, die von Nils Langner und Mike Lohmann in PHP entwickelt wurde. Sie braucht eine Webapplikation nicht im Kern zu kennen, um jede Methode prüfen zu können. Die zu testende Webapplikation wird viel mehr oberflächlich als eine Art Blackbox betrachtet. Man geht davon aus, dass die erwartete Ausgabe einer dynamischen Webseite nur erfolgt, wenn das System als Ganzes zusammenarbeitet. Fehlermeldungen, die im Normalbetrieb nicht ausgegeben werden, deuten ebenfalls auf Fehler hin.

Auf Basis dieser Annahmen kann man überprüfen, ob alle Einzelteile eine Einheit bilden und korrekt zusammenarbeiten und auch komplexe Anwendungen mit vergleichsweise geringem Aufwand automatisiert testen. Dennoch ist LiveTest, obwohl es sich dank seiner Flexibilität ideal dafür eignet, kein klassisches Tool für das Monitoring von Webseiten. Es wurde vor dem Hintergrund der Integration in Continuous-Integration-Systeme entwickelt und kann deutlich schneller Testergebnisse liefern. Ein Monitoring Tool wie Nagios ist darauf ausgelegt, Systemausfälle zu erkennen und regelmäßige Tests durchzuführen. Zwischen der Ausführung der Tests im Einzelnen liegen oft mehrere Minuten. Bis bei der Entwicklung schließlich eine Änderung getestet wurde, vergeht wertvolle Zeit und der Workflow wird unterbrochen. LiveTest hingegen kann einen Entwickler sehr zeitnah auf mögliche Fehler aufmerksam machen. In diesem Artikel wird die Einrichtung eines grundlegenden Testszenarios beschrieben, das als Grundlage für eigene Webprojekte genutzt werden kann.

Ein Blick unter die Haube

Bevor es nun mit der Konfiguration und Einrichtung los geht, sollten wir uns LiveTest genauer anschauen. Es ist nur wenig beruhigend, sich auf die Ergebnisse von Tests zu verlassen, wenn man der Software, die sie erstellt hat, bereits nicht vertraut. Zudem räumt ein konsequent sauberer Programmierstil schnell Zweifel an der Qualität von LiveTest aus. Sinnvoll gewählte PHP Namespaces sorgen für eine Unterteilung in logische Pakete. Abhängigkeiten werden mittels Dependency Injection injeziert, und durch eine fast vollständige Abdeckung des Quellcodes mittels Unit Tests wird nichts dem Zufall überlassen. Das Herzstück und eine der großen Stärken von LiveTest ist der Event Dispatcher. Über Listener, die erzeugte Events behandeln, kann das System angepasst und erweitert werden, was das Verhalten leicht beeinflusst, ohne dass der Quellcode von LiveTest selbst verändert werden muss. Das Prinzip „alles ist eine Extension“ wird konsequent verfolgt.

Außerdem wird die Ausgabe der Testergebnisse von LiveTest flexibel gelöst. Über so genannte Writer können die Testergebnisse über verschiedene Medien dargestellt werden. Mitgeliefert werden Writer, die generierte Testergebnisse über „echo“ ausgeben, in eine Datei schreiben oder als E-Mail versenden können. Weitestgehend unabhängig vom gewünschten Ausgabemedium kann das Format für die Darstellung gewählt werden. Unterstützt wird zum Beispiel die Darstellung im CSV-, HTML- sowie JUnit-Format. Wird ein anderes Format gewünscht oder sollen die Ergebnisse beispielsweise in einer Datenbank gespeichert werden, kann LiveTest erweitert werden.

Testfälle

LiveTest verwendet so genannte TestCases, um Prüfungen auszuführen. Testfälle stellen die konkrete Implementierung von Tests dar, in denen die Logik für Prüfungen gekapselt wird. Derzeit können HTML-Dokumente sowie Eigenschaften und Parameter von HTTP-Verbindungen überprüft werden. Unter anderem werden folgende Tests derzeit unterstützt:

  • Überprüfung von HTTP-Statuscodes
  • Suche nach Strings in Webseiten
  • Anwendung regulärer Ausrücke auf Dokumente
  • Validierung von HTML
  • XPath-Abfragen

Eine genaue Liste der verfügbaren Extensions steht unter [1] zur Verfügung. Sollte ein Testfall noch nicht abgedeckt werden, kann man LiveTest um eigene Testfälle beziehungsweise die entsprechende Testlogik erweitern. Während eines Testlaufs können theoretisch beliebig viele Testfälle ausgeführt werden. Diese müssen zuvor einmalig festgelegt werden. Beginnen wir aber zunächst mit der Installation von LiveTest.

Installation von LiveTest

Für LiveTest steht ein eigenes PEAR Repository bereit. Das erleichtert die Installation und die Einrichtung einer Testumgebung. Zusätzlich kann es direkt aus dem Github Repository des Projekts [2] bezogen werden. Die Beispiele in diesem Artikel basieren allerdings auf der PEAR-Installation von LiveTest und gehen davon aus, dass der Befehl LiveTest im Suchpfad verfügbar ist. Die notwendigen Befehle zur Installation mithilfe des PEAR Installers unter Linux sind folgende:

pear channel-discover pear.phmlabs.com
pear install -a pear.phmlabs.com/LiveTest

Schon ist die Installation abgeschlossen. Um zu prüfen, ob alles funktioniert hat, kann nun der Befehl LiveTest in der Kommandozeile aufgerufen werden. Dabei sollten Hinweise zur Benutzung ausgegeben werden, wie es in Abbildung 1 gezeigt wird. Nachdem die Installation abgeschlossen ist, müssen wir für unsere Tests eine Testsuite einrichten und zu testende Seiten sowie passende Tests definieren.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -