Schleifen
QF-Test stellt zwei Knotentypen für die Implementierung von Schleifen zur Verfügung:
- Schleife Knoten führen ihre Kindknoten so oft aus, wie angegeben ist. Man kann die Schleife jedoch über einen Break Knoten jederzeit verlassen.
- While Knoten führen ihre Kindknoten so oft aus, bis die angegebene Bedingung nicht mehr gegeben ist. Derartige Schleifen können ebenfalls über einen Break Knoten jederzeit verlassen werden.
Hinweis
Schleife Knoten enden auf jeden Fall nach der angegeben Anzahl von
Wiederholungen. Bei While Knoten muss man jedoch selbst dafür
sorgen, dass die Ausführung irgendwann endet, indem die Bedingung falsch wird.
Ansonsten kommt es zur Endlosschleife. Im interaktiven Modus können Sie
in so einem Fall einfach die Pausetaste
drücken. Im Batch-Modus, d.h. wenn Sie QF-Test mit dem Kommandozeilenparameter
-batch
starten um die angegebene Testsuite ohne die QF-Test
Benutzeroberfläche auszuführen, müssen Sie dann jedoch den QF-Test Prozess "abschießen".
In der folgenden Übung wollen wir einen Testfall implementieren, der prüft, ob eine bestimmte Zeile in der Tabelle des CarConfig Demos angezeigt wird.
Die im Testfall durchgeführten Aktionen sind:
- Anzahl Tabellenzeilen bestimmen.
- Über alle Zeilen iterieren und prüfen, ob die Zeile passt.
- Wenn die Zeile gefunden wurde, die Schleife abbrechen.
- Falls die Zeile nicht gefunden wurde, einen Fehler ins Protokoll schreiben.
Bitte beginnen Sie mit der Aufnahme eines Checks auf die zu suchende Zeile:
-
Aktion
Aktivieren Sie den Check-Aufnahmemodus über "Checks aufnehmen"
.
- Führen Sie einen Rechtsklick auf eine Tabellenzeile im CarConfig Demo aus und wählen Sie den Menüpunkt »Zeile« aus dem Popup-Menü.
-
Beenden Sie die Aufnahme über "Aufnahme beenden"
.
-
Ändern Sie den Namen der aufgenommenen Sequenz z.B. in
Zeile prüfen
. - Wandeln Sie die Sequenz in einen Testfall um: Rechtsklick auf den Sequenz Knoten und Auswahl des Untermenüpunkts »Knoten konvertieren in«-»Testfall« im Popup-Menü.

In QF-Test können Sie sehr effizient Knoten hinzufügen, indem Sie einen Knoten in einen anderen einpacken:
- Aktion Öffnen Sie den Testfall Knoten und packen Sie den aufgenommenen Check Knoten in eine Schleife indem Sie rechts auf den Knoten klicken und in dem sich öffnenden Popupmenü den Punkt »Knoten einpacken in«-»Schleife« auswählen.

QF-Test ermittelt dynamisch, in welche Knoten ein Knoten eingepackt werden kann und bietet nur diese zur Auswahl an. Entsprechend kann es passieren, dass Sie "Schleife" im Untermenü nicht finden. Sie sollten dann prüfen, ob Sie den Rechtsklick auf den richtigen Knoten ausgeführt haben. Dasselbe gilt für die Operationen "Knoten konvertieren in" und "Knoten einfügen".
Als nächstes setzen wir den Wert für das Attribut 'Anzahl Wiederholungen' des
Schleife Knoten. Dazu müssen wir bestimmen, wie viele Zeilen die
Tabelle hat. Es gibt keinen Knoten, der diese Operation direkt ausführen kann.
Allerdings gibt es eine derartige Prozedur in der im letzten Kapitel besprochenen
Standardbibliothek. Diese befindet sich im Package qfs.swing.table
und heißt getRowCount
.
- Aktion Selektieren Sie den Testfall Knoten und drücken Strg+A.
-
Klicken Sie die Schaltfläche "Prozedur auswählen"
links neben der Überschrift 'Name der Prozedur'.
- Wählen Sie den Reiter 'qfs.qft' im 'Prozedur auswählen' Dialog.
- Navigieren Sie zu 'getRowCount' im Package 'qfs.swing.table'
- Drücken Sie 'OK' um die Prozedur auszuwählen.
- Drücken Sie 'OK' um den 'Prozeduraufruf' Dialog zu schließen.
Das Hinzufügen einer Prozedur über Strg+A wurde bereits in Manuelle Erstellung von Prozeduren behandelt. Dort finden Sie auch Screenshots zur Aktion.
-
Aktion
Fügen Sie eine Variable mit dem Namen
Zeilen
im Attribut 'Variable für Rückgabewert' ein. -
Ändern Sie den Standardwert für
id
in der Variablendefinitionen-Tabelle auf die QF-Test Komponenten ID der TabelleVehicleTable
. - Klicken Sie OK.
- Wählen Sie den 'Schleife'-Knoten.
-
Im Attribut 'Anzahl Wiederholungen' des Schleife Knotens
tragen Sie eine Referenz auf die Variable
$(Zeilen)
ein. -
Tragen Sie den Namen der Zählervariable, z.B.
i
, im entsprechenden Attribut des Schleife Knotens ein. - Klicken Sie OK.

In den Details des Check Knotens tragen wir nun in der QF-Test ID der Komponente statt des aufgenommenen Zeilenindex eine Referenz auf die Zählervariable ein und setzen eine Ergebnisvariable. Außerdem fügen wir einen If Knoten unter dem Check Knoten hinzu, der das Ergebnis auswertet und die Schleife über einen Break Knoten verlässt, wenn die entsprechende Zeile gefunden wurde.
- Aktion Öffnen Sie den Schleife Knoten.
- Selektieren Sie den Check Knoten.
-
Ändern Sie den aufgenommenen Zeilenindex der QF-Test ID der Komponente
in Zählervariable
$(i)
. Die QF-Test ID der Komponente sollte nunVehicleTable@Modell&$(i)
lauten. -
Tragen Sie den Variablennamen
ZeileGefunden
in das Attribut 'Variable für Ergebnis' ein und klicken OK. - Führen Sie einen Rechtsklick auf den Check Knoten aus und wählen Sie aus dem Popup-Menü den Unterpunkt »Knoten einfügen«-»Ablaufsteuerung«-»Break« aus.
- Drücken Sie 'OK' im 'Break' Dialog.
- Packen Sie den Break Knoten in einen If Knoten mittels des Tastaturkürzels Strg+Umschalt+I (Sie können natürlich auch über das Menü gehen).
-
In den Details des 'If'-Knotens
tragen Sie
$(ZeileGefunden)
im Attribut 'Bedingung' ein und klicken OK.
Die Variable ZeileGefunden
wird vom Check Knoten entweder auf den Wert
'true' oder auf den Wert 'false' gesetzt, so dass wir im Attribut 'Bedingung' des
If Knoten nur die Referenz auf die Variable $(ZeileGefunden)
einzutragen brauchen.
In den nächsten Schritten wollen wir einen Else Knoten als letzten
Knoten im Schleife Knoten einfügen. Er wird nur ausgeführt, wenn die Schleife
so oft wie angegeben ausgeführt wurde, was in unserem Fall bedeutet, dass die
Variable ZeileGefunden
nie wahr wurde, weil die Zeile nicht gefunden wurde.
- Aktion Schließen Sie den If Knoten, falls dies nicht bereits der Fall ist. Dies ist wichtig, da sonst der Else Knoten zum If Knoten und nicht zum Schleife Knoten gehören würde.
- Führen Sie einen Rechtsklick auf den If Knoten aus und wählen Sie auf dem Popup-Menü den Unterpunkt »Knoten einfügen«-»Ablaufsteuerung«-»Else«.
- Klicken Sie im 'Else' Dialog 'OK'.
- Öffnen Sie den Else Knoten.
-
Fügen Sie aus der Standardbibliothek die Prozedur
logError
aus dem Packageqfs.run-log
wie oben beschrieben ein. -
In der 'Variablendefinitionen' Tabelle tragen Sie
Zeile nicht gefunden
als Wert der Zeilemessage
ein. -
Tragen Sie
true
als Wert der ZeilewithScreenshots
ein. - Drücken Sie OK.
Wenn Sie die Tests im Batch-Modus ausführen, sind Screenshots eine gute
Unterstützung bei der Fehleranalyse. Da aber eine große Zahl Screenshots
sehr große Protokolldateien erzeugen würden, ist der Standardwert für
withScreenshots false
.
Nun bleibt nur noch, den Testfall mit Vorbereitung und Aufräumen Knoten zu vervollständigen und ihn in den oberen Teil der Testsuite zu verschieben.
- Aktion Kopieren Sie die Vorbereitung und Aufräumen Knoten aus 'Testset: Einfache Tests' in den neuen Testfall als ersten und letzten Knoten.
- Verschieben Sie den Testfall aus dem Bereich Extrasequenzen in den oberen Bereich der Testsuite hinter den Knoten 'Testset: Einfache Tests'.
Damit würde der neue Testfall wie folgt aussehen:

- Aktion Führen Sie den neuen Testfall aus.
Er sollte ohne Fehler laufen.
-
Aktion
Ändern Sie nun in den Details des Check Elemente Knotens
den Namen des Fahrzeugs zum Beispiel auf
Falscher Wert
.

- Aktion Führen Sie den Testfall nochmals aus.
Nun sollte der Test den Else Knoten der Schleife ausführen und eine Fehlermeldung anzeigen.