Kriterien für GUI-Testwerkzeuge

Das Testen von Benutzeroberflächen wird oft stiefmütterlich behandelt, obwohl es dafür hervorragende Werkzeuge gibt. Der Artikel zeigt am Beispiel von Qt und C++, wie GUI-Testwerkzeuge funktionieren und worauf es beim Zusammenspiel von GUI-Entwicklung und Testing ankommt.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 15 Min.
Von
  • Gerhard Schuster
Inhaltsverzeichnis

Das Testen von Benutzeroberflächen wird oft stiefmütterlich behandelt, obwohl es dafür hervorragende Werkzeuge gibt. Der Artikel zeigt am Beispiel von Qt und C++, wie GUI-Testwerkzeuge funktionieren und worauf es beim Zusammenspiel von GUI-Entwicklung und Testing ankommt.

Zur Entwicklung und Durchführung von GUI-Tests gibt es viele hervorragende Tools. Allerdings sind nicht alle Werkzeuge für sämtliche Programmiersprachen geeignet. Ist die Auswahl an GUI-Test-Werkzeugen für Java zum Beispiel reichlich, stellt sich die Situation bei C++ beziehungsweise Qt anders dar. Doch auch Java-Entwickler, die für das Erreichen einer besseren Performance oder das Implementieren eines besonderes Look & Feel eigene GUI-Elemente (Widgets) entwickelt haben, werden kein für sie geeignetes Kauf-Tool finden.

In diesen Fällen bietet es sich an, ein Open-Source-Tool (was nicht bedeutet, dass es kostenlos sein muss) zu erwerben und an seine eigenen Bedürfnisse anzupassen. Das ausgewählte Tool sollte mindestens die folgenden Anforderungen erfüllen:

  • offener Quellcode: Zur Identifikation selbst geschriebener Widgets muss man in der Lage sein, in den Code einzugreifen.
  • Remote-Zugriff auf die zu testende GUI: Wenn der Debugger auf den gleichen Rechner läuft wie die zu testende GUI, verändert sich der Tastatur- und Mausfokus durch das Debuggen, womit der Ablauf dabei nicht mehr dem Ablauf ohne Debuggen entspricht.
  • Tests in Skriptform: Testdefinition in tabellarischer Form oder durch grafische Verschaltung von Symbolen hat sich nicht bewährt.
  • ausgefeilter Algorithmus zur eindeutigen Identifikation von Widgets: Tests funktionieren nur befriedigend, wenn Widgets immer wieder erkannt werden, selbst wenn sie der Entwickler verändert hat.

Hat das Team das geeignete Tool ausgesucht, müssen Entwickler und Tester es in der Folge an ihre Bedürfnisse anpassen. Darum sei zunächst eine Einführung in die Grundfunktionen von GUI-Test-Tools gebracht.

Zunächst muss das GUI-Testwerkzeug mit der zu testenden Applikation in Kommunikation treten. Die meisten Tools sind in der Lage, Informationen über die GUI-Elemente einer Applikation zu erhalten, ohne dass diese dafür zu verändern wären. Die eingesetzten Mechanismen sind allerdings sprachabhängig, funktionieren nicht immer und sind auch nicht einfach zu handhaben. Sofern man Zugriff auf den Quellcode der zu testenden Applikation hat, ist eine immer funktionierende Methode, in die zu testende Applikation einen kleinen Trojaner einzubauen, mit dem das Testwerkzeug Verbindung aufnimmt.

Zu testende Applikation mit Trojaner (Abb. 1)

Damit das Testwerkzeug auf einem beliebigen Rechner im lokalen Netz laufen kann (Remote-Zugriff), stellt man die Verbindung zwischen Tool und zu testender Applikation über TCP/IP her, auf das ein proprietäres Protokoll gesetzt wird. Idealerweise ist dieses in XML implementiert. Somit lassen sich die übertragenen Daten mitlesen, das Datagramm lässt einfach auf Korrektheit prüfen, und das Protokoll ist jederzeit erweiterbar. Ein Beispiel

<GUITestTool>
<Header version="1.1.1" sequenceNo="3245"/>
<Datagram>
<Command type="ActionRequest" command="ClickWidget"
id="QLineEdit_1" />
<Synchronisation type="ClickWidget" timeout="500"/>
<WaitBeforeExecution time="0"/>
<WaitAfterExecution time="10"/>
</Datagram>
</GUITestTool>

Über diese Verbindung lassen sich Informationen über die zu testende Applikation abfragen und Fernsteuerungsbefehle absetzen. Das Werkzeug bietet Testkommandos an, wie clickButton(...), die in eine Standardskriptsprache eingebettet sind. Darüber liegt eine Testskript- und Testergebnisverwaltung. Wer will, kann über diesen Mechanismus Applikationen des Kunden fernsteuern oder durch den Kunden zur Demonstration eines Fehlers einen Bedienungsablauf aufzeichnen.