smoke – Lean Testing Tool
In den letzten Jahren haben sich Testivals für mich als eines der wichtigsten Testinstrumente herausgestellt. Eine Gruppe von Personen testen einen Releasekandidaten innerhalb von zwei Stunden und generieren somit einen Eindruck über die Qualität des Systems. Sehr günstig und sehr effektiv. Was in einem solchen Zweistunden-Test nicht gefunden wird, sollte auch im Produktiveinsatz keine großen Probleme machen.
Wenn ich bei einem solchen Testival selbst als Tester eingeladen bin, dann bin ich derjenige, der einen technischen Blick auf das System wirft. Sind die Header korrekt? Sieht das HTML gut aus? Valides JavaScript? All das sind meine ersten Aufgaben bei der Analyse. Da dies vom Ablauf her immer identisch geschieht, kam die Idee auf, diesen Part einer Qualitätsbewertung automatisiert geschehen zu lassen. Die Idee zu smoke war geboren.
Smoke ist ein Open-Source-Tool, welches sich durch eine gegebene Webseite crawlt und die gefundenen Seiten, Skripte, CSS-Files, RSS-Feeds, JSON-Files und XML-Dateien gegen einen Satz von Regeln validiert. Alles möglichst ohne Konfiguration und einfach einzusetzen. In der letzten Woche habe ich mich dann hingesetzt und das Projekt umgesetzt.
Das ganze kann auf GitHub gefunden und geforkt werden. In der ersten Version ist der Regelsatz schon recht umfangreich, wenn auch noch nicht vollständig. Folgende Überprüfungen werden bereits durchgeführt:
- HTML-Größe: Webseiten sollten eine Größe von 300 Kilobyte nicht überschreiten
- HTML-Tag: Existiert eine schließendes HTML-Tag?
- CSS-File-Count: Sind mehr als 10 CSS-Dateien eingebunden? Falls ja, sollte man überlegen, ob combining sinnvoll ist.
- JS-File-Count: Das gleiche wie für die CSS-Files, nur im JavaScript-Kontext
- Insecure-Content: Wenn eine HTTPS-Seite analysiert wird, wird untersucht, ob sich HTTP-Ressourcen eingeschlichen haben
- Duration: Sollte die „time to first byte“ größer als eine Sekunde sein, schlägt dieser Test an
- GZip: Ist die Komprimierung der Seiten aktiv?
- HTTP-Status-Code: Der Status-Code sollte kleiner 400 sein.
- Expires: Das Ablaufdatum sollte in der Zukunft liegen
- Max-Age: Sollte normalerweise nicht Null sein
- No-Cache: Sollte auch nicht zu finden sein
- Bilder-Größe: Alles über 100KB sollte zumindest bekannt gemacht werden
- JS-Syntax: Sind die JavaScript-Files valide?
- JSON-Syntax: Sind die JSON-Files syntaktisch korrekt?
- RSS-Validierung: Validieren die Feeds gegen das RSS2 XSD?
Für den ersten Wurf sind schon die wichtigsten Sachen drinnen. An der CSS-Validierung arbeite ich gerade und sicherlich kommen bald auch noch weitere Regeln dazu. Der Aufruf des Tools ist denkbar einfach:
Smoke.phar analyse "http://www.amilio.de"
Natürlich geht auch noch mehr Individualisierung, aber ich gehe davon aus, dass das in den meisten Fällen gar nicht notwendig ist. Da ich das ganze als Open-Source auf Github gestellt habe, würde ich mich ordentlich freuen, wenn ein paar von euch das Tool mal ausprobieren. Worüber ich mich aber mindestens genau so freuen würde, sind neue Ideen für Regeln. Welche Eigenschaften muss eine Webseite haben, damit sie einen Smoke-Test besteht?
Und jetzt viel Spaß mit dem Tool.
PS: Wer auf der Kommandozeile nicht so fit ist, dem habe ich eine einfache Weboberfläche gebastelt, mit der er rumspielen kann.
Danke für deine Arbeit und das tolle Tool.
8000 ! 😉
Bin ich der 8000te ?
Scheinbar klappt momentan der phar-Download nicht (siehe: https://github.com/phmLabs/Smoke/blob/master/README.md) …
curl -O -LSs https://raw.github.com/phmLabs/Smoke/master/bin/Smoke.phar && chmod +x Smoke.phar
Sollte wieder gehen.
Schönes Tool.
Habe die Web Variante getestet:
Eine Verlinkung zu den Fehlern (Beschreibung mit Lösung) wäre noch hilfreich.
Als weitere Regel könnte man noch eien Test auf ein gültiges SSL-Zertifikat vollziehen inklusive den Tests bezüglich mixed code.
Da bin ich gerade dabei. Werde es wahrscheinlich im ersten Schritt sauber in thewebhatesme integrieren und dann gegebenenfalls mit Blogartikeln zu den einzelnen Regeln anreichern.
Echt ne geile Sache. Und ab in die Buildchain damit!
Danke