Tutorial Icon
QF-Test Tutorial Videoversion

Tutorial als Videoversion, in dem wir Sie Schritt für Schritt durch QF-Test führen...

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 Continue 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:

  • AktionAktivieren Sie den Check-Aufnahmemodus über "Checks aufnehmen" Record a check.
  • 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" Stop.
  • Ä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ü.
Abbildung 8.4:  Knoten konvertieren

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.
Abbildung 8.5:  Knoten einpacken

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.

  • AktionSelektieren Sie den 'Testfall' Knoten und drücken [Strg-A].
  • Klicken Sie die Schaltfläche "Prozedur auswählen" Prozedurauswahl 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.

  • AktionFügen Sie eine Variable mit dem Namen Zeilenim 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 Tabelle VehicleTable.
  • 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.
Abbildung 8.6:  Details eines 'Schleife' Knotens

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 nun VehicleTable@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.

  • AktionSchließ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 Package qfs.run-log wie oben beschrieben ein.
  • In der 'Variablendefinitionen' Tabelle tragen Sie Zeile nicht gefunden als Wert der Zeile messageein.
  • Tragen Sie true als Wert der Zeile withScreenshotsein.
  • 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.

  • AktionKopieren 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:

Abbildung 8.7:  Der neue Testfall
  • AktionFü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.
Abbildung 8.8:  Details eines 'Check Elemente' Knoten
  • AktionFühren Sie den Testfall nochmals aus.

Nun sollte der Test den 'Else' Knoten der Schleife ausführen und eine Fehlermeldung anzeigen.