Freitag, 19. Oktober 2007

Dieser Blog ist tot. Ich blogge weiter auf dem «Agile Trail».

[Grails eXchange] Session: Canoo Web Test & Grails (Dierk König)

Dierk ist (einer der) der Entwickler von Canoo WebTest, Autor von GinA und Comitter von Groovy und Grails. WebTest wird für die Entwicklung funktionaler Tests verwendet (aka Akzeptanztests). Es ist Opensource, obwohl der Name (Canoo) da vielleicht fehlleitet.

Dierk zeigt zuerst mal, wie der Nicht-Grails-Webtest aussieht: eine XML-Datei, in der man Schritt für Schritt angeben kann, wie man eine Webseite bedienen möchte: Klick hier, trage dort BlaBla ein und dann verifiziere, dass im Titel danach Foo steht. Diese XML-Datei ist ein valides Ant-Skript und so führt man es auch aus.

Das Ergebnis wird in einem Report dargestellt, in dem man im Browser surfen kann, da es sich um HTML-Seiten handelt. Der Report ist sehr aussagekräftig. Lustig: es gibt da eine Auflistung der Schritte, die man im Test bereits gemacht hat. Dierk meint, wenn jemand manuell testen möchte, dann hat man es hier super aufgeschrieben und kann einem dann das sog. Storyboard geben :-)

Dierk zeigt vier Pattern beim Testen: Capture/Replay, Modelbasiertes Testen, Dategetriebenes Testen und geskriptete Automatisierung, worauf Dierk kurz eingeht. Je weiter in der Liste, desto effizienter das Pattern. Dierk mag definitiv keine Capture/Replay-Tools ("the least cost-effective way of test automation"!).

Typische Projekte werden vorgestellt und die Strukturen hinter einem Webtest. Dierk erzählt davon, dass er am Ende eines Projektes, dass er mit WebTests versieht, bei 5000-7000 Tests landet! 5 bis 7 Kilo!

Zu den Zusicherungen meint Dierk, dass man sie so spezifisch wie nötig und so "loose" wie möglich definieren sollte. Wie wahr! Er favorisiert XPath für die Zusicherungen, um sich die zu untersuchenden Elemente herauszupicken. Dabei macht Dierk anhand eines Beispieles deutlich, wie man schlechte und gute Ausdrücke unterscheidet.

Auf der Webseite ist eine sehr gute Dokumentation zu sehen - kann ich bestätigen, die ist wirklich super!

Wie wird nun WebTest groovyfiziert? Erstmal zeigt Dierk, wie man Groovy per Ant-Task in einem Ant-File einbinden kann, um feine Veränderungen in z.B. der Konfiguration zu machen. Einfach scheint auch das Einfügen eines neu erstellten Schrittes (Step) zu sein. Dierk zeigt da gerade noch mehr interessanten Kram: Er erweitert XPath um eine neue Funktion mit Groovy. Abgefahren :-)

Nun aber kommt endlich die DSL, die man aus Grails auch kennt - keine spitzen Klammern mehr, willkommen in der Curly-Braces-World! Im Endeffekt ist das eine 1-zu-1-Abbildung von XML nach Groovy.

Dierk setzt hin sich zur Live-Demo. Übrigens der erste Speaker, der an einem PC arbeitet. Alle seine Vorgänger, die ich hier erlebt habe, brachten einen Mac mit. Egal, Details.

Juchu, Dierk macht TDD. Naja, so fast: er erzeugt die Domainklasse, ohne die Tests vorher rot laufen zu lassen (die ja noch nicht da sind). Aber das bekomme ich gleich aufs Brot geschmiert, indem er dem Publikum erläutert, dass ich das getan hätte. Puh, TDD-Ehre gerettet :-)

Dierk erstellt also eine Domain-Class, danach generiert er das Scaffolding und den Webtest hierzu und läßt das ganze Laufen per Grails. Es poppt eine Webseite mit dem Report auf. Der generierte Webtest beeinhaltet schon rudimentäre Tests für die CRUD-Methoden.

Cool: in dem Report kann man mitlerweile wie mit dem Daumenkino durch die Schritte blättern, die der Test durchlaufen ist. Tolles Feature, wenn man rote Tests hat!

Genial: Es gibt einen WebTest-Rekorder, den man in Firefox einbinden kann. Wow, das Tool rockt total! Schaut Euch das mal an! Und schaut Euch auch (und ganz besonders) die Warnung im roten Rahmen an. Darauf geht Dierk gerade in den weiteren Folien ein. Kann ich ganz dick unterstreichen, seine Ausführungen.

So schaut übrigens ein typischer Test aus:


invoke(description: "Get the page: Google", url: "http://www.google.de/")
invoke(url: "http://www.google.de/")
setInputField(name: "q", value: "Groovy")
clickButton(label: "Google-Suche")
verifyTitle(description: "Verify page's title", text: "Groovy - Google-Suche")


Toller Vortrag (bin noch nie enttäuscht worden, wenn ich zu einem Vortrag von Dierk gegangen bin). Sehr empfehlenswert.

blog comments powered by Disqus