Web-Anwendungen effektiv testen

Web-Anwendungen effektiv testen

7. November 2008 - Das Testen von Webapplikationen mit kommunen Unit-Tests ist unzureichend. Denn es muss das ganze Client/Server-System auf Funktionalität und Leistung geprüft werden.
Artikel erschienen in IT Magazine 2008/20

Die Forderung nach qualitativ hochwertiger und auch wartbarer Software setzt eine enge Verknüpfung von Entwicklung und Tests (wie in der Test-getriebenen Entwicklung) voraus. Testansätze, wie sie manchen noch aus dem Wasserfall-Modell bekannt sind, wo zunächst die Implementierung erfolgt und dann am Ende die Anwendung getestet wird, entsprechen in keinster Weise mehr den Anforderungen an zeitgemässe Software-Entwicklung, insbesondere bei kurzen Release-Zyklen oder Web-Applikationen, die gar keine Versionen mehr im klassischen Sinn kennen.



Auch vereinfachen sie die Entwicklung in Teams, da die Auswirkungen von einzelnen Änderungen über das ganze Projekt einfacher gebändigt werden können. Daher ist es nicht nur wesentlich, dass eine hinreichende Zahl an Tests vorhanden ist, sondern vor allem, dass diese im Rahmen einer Build-Automatisierung (z.B. über Werkzeuge für Continuous Integration) sowie in der IDE des Entwicklers einfach und automatisiert ausgeführt werden können. Dies ist bei Tests niedriger Granularität wie Unit-Tests noch relativ einfach machbar. Möchte man jedoch Anwendungen oder Services, die übers Internet angeboten werden, automatisiert testen, so steigen die Anforderungen an Testumgebung und Tools deutlich an. Auch reichen bei Client/Server-Systemen rein funktionale Tests nicht mehr aus: Es muss gewährleistet werden, dass die Anwendung die Performance-Anforderungen erfüllt!


In diesem Artikel werden die Open-Source-Projekte Apache JMeter sowie htmlunit und JWebUnit vorgestellt. Mithilfe dieser und ähnlicher Tools kann man Webanwendungen auf funktionale Aspekte sowie auch auf Performance-Anforderungen hin testen. Diese Tests lassen sich auch vergleichsweise einfach in eine Build-Automatisierung (wie Apache Ant oder Maven) integrieren.


Funktionale- und Last-Tests

Zunächst muss man hier zwischen zwei sehr unterschiedlichen Arten von Tests unterscheiden: Bei funktionalen Tests versucht man festzustellen, ob sich die Anwendung verhält, wie man das erwartet. Bei einer Webanwendung muss das Werkzeug automatisiert Seiten aufrufen, Formulare ausfüllen, mit JavaScript interagieren sowie überprüfen können, ob die Ergebnisse den Erwartungen entsprechen.


Bei Last-Test steht zunächst eine andere Frage im Vordergrund: Ist die Webanwendung (oder auch der Webservice) in der Lage, mit der erwarteten Last an Benutzeranfragen umzugehen, und ab wann kann der Server die Anfragen nicht mehr mit hinreichender Geschwindigkeit beantworten? Denn wenn man Load-Balancing-Strategien plant, sollten sie auf ihre Effektivität hin getestet werden


Allerdings muss man hier einschränken, dass Last-Tests in der Praxis wesentlich aufwendiger und komplexer sind, als man dies auf den ersten Blick erwarten würde. Zunächst muss der Testaufbau für einen Last-Test geeignet sein. Man benötigt also eigene Maschinen, ein eigenes Netzwerk sowie hinreichend viele Clients, die in der Lage sind, die notwendige Last zu erzeugen. Denn kommt man in die Sättigung eines Services, kann dies verschiedenste Ursachen haben: Die Client-Rechner sind ausgelastet, die Router sind der Flaschenhals oder der Server beziehungsweise die Services am Server sind die Ursache. Daher müssen Last-Tests mit grosser Sorgfalt geplant sowie möglichst alle externen Einflüsse ausgeschaltet werden, um zu einer sinnvollen Interpretation der Ergebnisse zu kommen.


Weiter sind Last-Lests meist auch mit funk-
tionalen Tests zu kombinieren. Feuert man einfach mit einem Tool wie JMeter auf die Startseite der Webanwendung, so wird die Anfrage vielleicht sofort vom schnellen Cache beantwortet und die Ergebnisse sind wertlos.

 
Seite 1 von 3

Neuen Kommentar erfassen

Anti-Spam-Frage Welche Farbe hatte Rotkäppchens Kappe?
Antwort
Name
E-Mail
SPONSOREN & PARTNER