CasperJS LogoWas ist eigentlich dieses End2End Monitoring? Während viele Nutzer von Icinga haarklein jede Ecke ihrer IT-Landschaft überwachen, und sofort merken sollten wenn ein Dienst ausfällt oder ein Dateisystem voll läuft, werden Funktionstests aus der Endbenutzer-Sicht oft vernachlässigt.
Hier bietet CasperJS einen netten Funktionsrahmen um solche Tests für Webseiten einfach zu machen und z.B. den Inhalt zu prüfen oder mit der Webseite zu interagieren.
Ein kleiner Auszug der Funktionen von Casper:

  • Navigations-Schritte definieren und abarbeiten
  • Formulare ausfüllen und absenden
  • Interaktion mit der Webseite (Buttons und Links)
  • Screenshots zu jedem Zeitpunkt
  • Javascript Code im Context der Webseite (DOM) ausführen
  • Test Funktionen für den Inhalt der Webseite

Den Kern hinter Casper bildet dabei das Browser-Framework PhantomJS, dass einen Webkit Browser simuliert den man über Javascript steuern kann. Der große Unterschied zu einem echten Browser ist nur dass PhantomJS keinerlei Frontend bietet, alles geschieht im Hintergrund, und erfordert somit auch keine Desktop Oberfläche. Als Alternative lässt sich auch SlimerJS nutzen, was einen ähnlichen Funktionsumfang wie Phantom bietet, aber auf der Firefox Engine (Gecko) basiert.
Beide Tools liefern eine komplette Javascript API um den Browser zu steuern, was Casper beisteuert sind viele Hilfsfunktionen, die man sich sonst selbst schreiben müsste.
Aber wie sieht so ein CasperJS Skript eigentlich aus? Hier ein einfaches Beispiel:

/*
 * Webseite www.netways.de
 */
var url = 'http://www.netways.de';
casper.test.begin('NETWAYS.de', 4, function suite(test) {
  casper.start(url, function() {
    test.assertHttpStatus(200, "HTTP Request erfolgreich");
    test.assertUrlMatch(url, "auf der richtigen Webseite");
    test.assertTitleMatch(/NETWAYS/, "Titel der Webseite");
    test.assertExists('a[href="de/info/jobs/"]', 'Link auf Jobs');
  });
  casper.run(function() {
    test.done();
  });
});

Das Ergebnis auf der Kommandozeile sieht dann so aus:
CasperJS www.netways.de
Für einen Kunden integriere ich gerade CasperJS in Icinga, damit man zum einen die Ergebnisse melden, als auch Performancedaten sammeln und auswerten kann. Ich werde berichten sobald es etwas herzeigbares gibt!
Für alle die gerne jetzt, oder am Wochenende, mit CasperJS erste Gehversuche machen folgen noch ein paar Links. Am besten sollte man mit der Beta Version testen – dort sind viele neue Funktionen enthalten.
Weiterführende Links

P.S. Unsere Stellenanzeigen sollte man übrigens wirklich mal “von Hand” checken, Automatisierung ist nicht für alles gut…

Markus Frosch
Markus Frosch
Principal Consultant

Markus arbeitet bei NETWAYS als Principal Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.