Unsere Ideen für Ihr Projekt

Werkzeuge für automatisierte Oberflächen-QA

Wie wir Webanwendungen testen

Der Ausschnitt eines Kompass

Unter QA (Quality Assurance; auch QS: Qualitätssicherung) versteht man die Sicherstellung der Qualität eines Produktes oder einer Dienstleistung. Bei Software ist dies im wesentlichen die Funktion von Einzelkomponenten und Modulen, deren Korrektheit unter anderem durch sogenannte "Unit-Tests" sichergestellt wird. Webanwendungen, wie wir sie erstellen und betreuen, sind da eine besondere Form von Software, da sie immer einen Browser benötigen, in dem sie ablaufen. Zur Gewährleistung der Qualität einer Webanwendung ist sicherzustellen, dass sie auf verschiedenen Browsern (Internet Explorer, Firefox, Chrome, Safari usw.) einwandfrei und in gleicher Weise arbeiten. Auch die verschiedenen Benutzerinteraktionen müssen auf korrekte Funktionsweise überprüft werden. Beispielsweise ist es aufgrund der unterschiedlichen Browserverhalten nicht abwegig, dass für eine Kontaktanfrage die Implementierung einer clientseitigen Formularvalidierung in den Browsern Firefox und Chrome funktionieren kann, dagegen im Internet Explorer 8 das Absenden des Formulars nicht erfolgt. Dadurch könnte die Anfrage eines potentiellen Neukunden verloren gehen oder die Bestellung in einem Webshop könnte nicht übermittelt werden. Wir benötigen also eine Reihe von Tests, die wir auf den verschiedenen Browsern zur Ausführung bringen. In der einfachsten Form sind dies "Rezepte", die dann von einem menschlichen Tester abgearbeitet werden wie zum Beispiel "Klicke auf den Link im Impressum und schaue, ob das Impressum aufgerufen wird."

Pro automatisiertes Testen

Je komplexer eine Webapplikation wird, umso mehr Gründe sprechen gegen ein manuelles Testen der Gesamtfunktionalitäten. Nicht nur gehen mit dem hohen zeitlichen Aufwand Kosten einher, durch die monotone Abarbeitung immer gleicher Testreihen werden eventuell Fehler übersehen oder Anwendungsszenarien (Äquivalenzklassen) schlicht nicht bedacht. Ein mögliches Anwendungsszenario wäre beispielsweise eine negative Produktanzahl während eines Bestellprozesses mit resultierender negativer Kaufsumme.

Automatisierte Tests dagegen bieten kürzere Testzyklen, da eine Wiederholung eines automatisierten Tests nur sehr geringen Aufwand verursacht oder gar automatisiert an Funktionsimplementierungen gekoppelt ist. Außerdem sind diese unabhängig vom Fach-/ Anwendungswissen der Tester ausführbar, sind zeitlich unabhängig und können beliebig oft wiederholt werden, am besten nach jeder abgeschlossenen Änderung.

Unsere Werkzeuge

Das Logo des Selenium-Frameworks

Die Grundlage unserer Testwerkzeuge stellt das "Selenium-Framework" (Selenium WebDriver) dar, über welches Benutzerinteraktionen mit einem beliebigen Browser durchgeführt werden können. Darauf aufbauend nutzen wir "geb", das uns sowohl das Schreiben von Tests als auch deren Wartung erleichtert. "geb" stellt eine Schnittstelle zu "Selenium" dar und bietet die Vorteile:

  • Das Schreiben von verständlichen Oberflächentests. Die an jQuery angelehnte Notation zur Bestimmung eines Browser-Elements ist uns durch den Einsatz von jQuery in unseren Projekten vertraut und erleichtert somit das Schreiben und Lesen von Tests.
  • Einen Mechanismus zur Seitenabstraktion über sog. Page Objects, die einen leichten und einheitlichen Zugriff auf HTML-Strukturelemente bietet.
  • Integration des Test-Frameworks "Spock", welches wir intern für alle unsere Java-/Groovy-/Grails-Projekte verwenden.
Logo der Jenkins-Software

Alle für ein Projekt angelegten Tests werden durch unseren Continuous Integration Server "Jenkins" nach jeder Code-Änderung ausgeführt, so dass auf eventuell auftretende Probleme zeitnah reagiert werden kann und stets vollständige Funktionsstabilität sichergestellt ist.

Fazit

Durch Automatisierung aller Testfälle und Anwendungsszenarien findet eine konstante Qualitätsüberprüfung auf gleichbleibend hohem Niveau statt. Insbesondere die Abdeckung unterschiedlicher Betriebssysteme und Browser ist für aktuelle Webanwendungen unerlässlich. So tragen automatisierte Oberflächen-Tests maßgeblich zur Effizienz und Effektivität des Entwicklungsprozesses bei und sorgen für Projektsicherheit bei Entwicklern und Kunden.