Teil 1 – Pear
Teil 2 – Zend
Teil 3 – Java
Teil 4 – Groovy
Groovy ist eine agile und dynamische Sprache für die Java Virtual Machine, die das Testen neben ihren vielen anderen Features extrem erleichtert. Da Groovy 100 % Byte Code kompatibel zu Java ist, lassen sich alle in dieser schönen Sprache geschriebenen Programme und Bibliotheken (und davon gibt es reichlich) nutzen. So ist es nicht verwunderlich, dass es in Groovy viele Möglichkeiten gibt, eine Webapplikation zu testen.
Ich habe mich für das Gespann Groovy und dem Testing Framework HtmlUnit entschieden, auf dem auch andere Open Source tools wie Canoo WebTest, JWebUnit, WebDriver, JSFUnit und Celerity aufsetzen. HtmlUnit unterstützt auch Javascript und hat damit wie auch HttpUnit einen Vorteil gegenüber den PHP Lösungen.Mir gefällt die kurze und knappe Syntax von Groovy hervorragend und deswegen wird es jetzt auch Zeit sich den Beispiel Code für die Aufgabe anzuschauen:
package de.koo.groovy.webtests import junit.framework.TestCase import com.gargoylesoftware.htmlunit.WebClient import com.gargoylesoftware.htmlunit.html.* public class GoogleSearchTest extends TestCase{ def webClient void setUp() throws Exception{ webClient = new WebClient() } void testSearch() throws Exception{ def url='http://www.google.de' HtmlPage page = webClient.getPage(url) assert 'Google' == page.titleText def form = page.getFormByName('f') form.getInputByName('q').valueAttribute='http client examples' page = form.submit(form.getInputByName('btnG')) page.anchors.each { a -> if (a.classAttribute=='l') { println "$a.textContent" } } page.cleanUp() } }
Da das Abfragen der Google Suche ein funktionaler Test ist, habe ich das Beispiel auch gleich als Groovy TestCase geschrieben. Eine der wunderbaren Eigenarten der Groovy Syntax ist, dass man bei gettern und settern jeweils das get und set weglassen kann, so dass es so aussieht als würde man direkt auf die Attribute zugreifen. Settern kann man den Wert sogar zuweisen (s. Zeile 22).
Ein zweites tolles Feature ist der Umgang mit Strings (Zeichenketten). Endlich kann man wieder (wie in PHP auch) Variablen innerhalb des Strings verwenden ohne ihn konkatenieren zu müssen (was Groovy für einen aber im Hintergrund tut).
Und drittens sind die Closures (wenn man sie mal verstanden hat – Zeile 25) ein wunderbares Sprachmittel, was der „Wirtssprache“ Java noch fehlt.
Fazit:
Ein HTTP Client lässt sich mit Groovy extrem einfach und auf vieler Art und Weise realisieren. Mit der kurzen und prägnanten Syntax macht das Schreiben von funktionalen Tests für Webapplikationen mir sogar richtig Spaß. Hinzu kommen die Möglichkeit auch Webapps, die JavaScript benutzen, zu testen und die gute Einbindung in IDE’s (wie Eclipse, Idea oder NetBeans).
Es ist einfach groovy 🙂