Logo QF-Test

Tutorial zur praktischen Einführung
in QF-Test

 

Gratis Testen  Download  Kaufen

Yann Spöri, QF-Test Entwicklung & Support

Die Beispiele, Demos und praktischen Übungen zu QF-Test verhelfen zu einem schnellen Start.

Yann Spöri,
Software Engineer, QFS

Uwe Klüh, Senior Sales Manager, QFS

Durchsuchen Sie die gesamte Dokumentation (Handbuch, Tutorial, Mailingliste, Standardbibliothek), indem Sie die Suchfunktion der Homepage nutzen.

Uwe Klüh, Sr. Sales Manager, QFS

Tutorial

6
Modularisierung [30-45 Min]

In diesem Kapitel werden wir auf den Konzepten aufbauen, die Sie in den vorhergehenden Kapiteln gelernt haben. Unser Ziel ist es, Ihnen zu zeigen, wie Sie Testsuiten modularisieren können. Die Features, die wir im Folgenden beschreiben, sind um einiges komplexer als die der vorhergehenden Kapitel, so dass Sie ein gründliches Verständnis des bereits abgedeckten Stoffs mitbringen sollten.

Wenn Sie damit beginnen, Testsuiten für Ihren spezifischen Bedarf zu erstellen, werden Sie häufig in eine Situation kommen, in der Sie immer wieder die gleichen - oft redundanten - Schritte durchführen. So benötigt vielleicht Suite A häufig die Verwendung von bestimmten Menüeinträgen in Ihrem SUT, die Suite B ebenso verwendet. Anstatt dieselbe Prozedur in beiden Testsuiten vorzuhalten ist es wesentlich praktischer und zuverlässiger, einen gemeinsamen Ort für diese Prozedur zu haben.

Dieser Gedanke führt uns zum Konzept einer "Hilfssuite" oder besser "Bibliothek", die gemeinsame Prozeduren für den Aufruf aus beliebigen anderen Testsuiten zur Verfügung stellt. Ihre Suite utils.qft, die Sie hoffentlich nach dem vorherigen Kapitel abgespeichert haben, wird uns nun als Bibliothek mit Hilfsprozeduren dienen. Auf diese können dann andere Testsuiten bei Bedarf zugreifen. Eine solche Struktur hat den Vorteil, dass beim Aufbau neuer Testsuiten auf fertige Prozeduren zugegriffen wird, die ihre akkurate und zuverlässige Funktion bereits bewiesen haben. Diese Art der Modularisierung ist mit QF-Test einfach zu bewerkstelligen, wie wir in den folgenden Abschnitten zeigen werden.

6.1
Erstellen der Hauptsuite

Erstellen Sie zunächst eine neue Testsuite über den Menüeintrag »Datei«-»Neue Testsuite...«. In dieser Suite werden Sie im Lauf der folgenden Abschnitte einen Test für das SUT erstellen.

Sie sollten auch die Suite utils.qft öffnen, die das "checkbox" Package aus dem vorherigen Kapitel enthält. Speichern Sie Ihre neue Datei im selben Verzeichnis wie utils.qft, damit Sie relative Pfadnamen verwenden können, wenn eine Testsuite die andere referenziert. Den Dateinamen selbst können Sie frei wählen.

6.2
Was gehört wohin

Falls Ihr SUT noch nicht läuft, starten Sie es jetzt.

Dabei werden Sie feststellen, dass die Knoten zum Start des SUT sich noch immer in utils.qft befinden. Eine echte Bibliothek sollte aber keinen direkten Bezug zum SUT haben, da sie auch von anderen Testsuiten benutzt werden kann, die andere SUTs testen.

Wenn Sie zum Beispiel zwei SUTs 'A' und 'B' zu testen haben, würden Sie zunächst eine Testsuite für jedes SUT erstellen. Beide SUTs könnten aber Kontrollkästchen enthalten, die mit Hilfe der Prozeduren in utils.qft ein- und ausgeschaltet werden können. Daher sollte utils.qft allgemein gehalten werden.

Im aktuellen Zustand enthält utils.qft Elemente, die es direkt mit dem SUT "Options demo" verbinden. Dies sind zum einen die Knoten "Vorbereitung" und "Aufräumen", die Sie in Abschnitt 4.1 erstellt haben und zum anderen der Inhalt des "Fenster und Komponenten" Knotens. Diese SUT-spezifische Information ist jetzt für die Bibliothek irrelevant und sollte in die Testsuite verschoben werden, die das SUT testet.

Gehen Sie also wie in Abschnitt 4.1 beschrieben vor, um die "Vorbereitung" und "Aufräumen" Knoten sowie die Unterknoten von "Fenster und Komponenten" in Ihre neue Testsuite zu verschieben. Achten Sie dabei darauf, die »Ausschneiden« Funktion anstelle von »Kopieren« zu verwenden, damit die Knoten auch wirklich aus der Bibliothek utils.qft entfernt werden. Wenn Sie fertig sind, sollte Ihre neue Suite jetzt genau wie das Skelett in Abbildung 4.1 aussehen. Außerdem können Sie noch die Prozeduraufrufe aus utils.qft entfernen, so dass diese Suite jetzt auf das Minimum reduziert ist, wie es die folgende Abbildung zeigt:

Abbildung 6.1:  Bibliothek utils.qft
6.3
Erstellen einer Testsequenz

In diesem Abschnitt werden Sie eine neue Testsequenz für das SUT in Ihrer neuen Testsuite erstellen. Es wird eine einfache Sequenz werden: Selektieren des "Miscellaneous" Knotens im SUT und Deaktivieren des Kontrollkästchens "Boolean option".

Fügen Sie in Ihrer Testsuite nach dem Knoten "Vorbereitung" einen neuen "Sequenz" Knoten mittels»Einfügen«-»Sequenz Knoten«-»Sequenz« ein. Geben Sie ihm einen Namen, z.B. "Deselect Checkbox". Klappen Sie den Knoten aus, so dass Sie neue Knoten darunter einfügen können.

Abbildung 6.2:  Die Sequenz "Deselect checkbox"

Klicken Sie nun den "Aufnahme starten" Knopf Record, um eine neue Sequenz von Events aufzunehmen. Selektieren Sie im Fenster des SUT den Knoten "Miscellaneous" im "Preferences" Baum. Sie sollten daraufhin das "Miscellaneous Options" Unterfenster im rechten Teil des SUT sehen. Wechseln Sie zurück zu Ihrer Testsuite und stoppen Sie die Aufnahme mit dem "Aufnahme beenden" Knopf Stop.

In der neu aufgenommenen Sequenz im "Extras" Knoten sollten Sie nur einen einzelnen Event sehen, nämlich den Klick auf den "Miscellaneous" Knoten. Verschieben Sie diesen "Event" Knoten in Ihren "Sequenz" Knoten, der nun in etwa so aussehen sollte:

Abbildung 6.3:  "Sequenz" Knoten mit aufgezeichnetem Mausklick
6.4
Aufruf einer Prozedur in der Bibliothek

Der nächste Schritt besteht darin, einen Prozeduraufruf zum Deaktivieren des Kontrollkästchens zu erstellen. Fügen Sie wie in Abschnitt 5.8 einen "Prozeduraufruf" Knoten für die Prozedur "checkbox.setState" ein. Diesen müssen wir nun allerdings etwas modifizieren, da sich die Prozedur jetzt in einer anderen Testsuite befindet.

Zum Aufruf einer Prozedur in einer anderen Testsuite verwendet QF-Test folgende Konvention: Der Name der Suite wird dem Namen der Prozedur - durch ein '#' Zeichen getrennt - vorangestellt. In unserem Beispiel ist die korrekte Form utils.qft#checkbox.setState. Vergessen Sie nicht, die Variablen wie in Abschnitt 5.8 anzugeben, mit dem Wert "false" für "select".

Abbildung 6.4:  Prozeduraufruf in die Suite utils.qft
6.5
Include Datei hinzufügen

Es gibt noch eine einfachere Methode, als Prozeduraufrufe mit einer expliziten Referenz der Testsuite wie in utils.qft#checkbox.setState zu versehen. QF-Test ermöglicht es, Testsuiten als Include Dateien einzubinden und diese damit zu einem festen Teil Ihrer gesamten Teststruktur zu machen.

Eine Include Datei ist eine implizite Referenz einer anderen Testsuite. Wenn QF-Test beim Ablauf eines Tests auf einen Prozeduraufruf ohne explizite Angabe einer Testsuite (d.h. ohne mit '#' vorangestellten Dateinamen) trifft, sucht es diese Prozedur zunächst in der aktuellen Testsuite. Führt diese Suche nicht zum Erfolg, werden der Reihe nach die Include Dateien der Testsuite durchsucht.

Klicken Sie auf den "Testsuite" Wurzelknoten Ihrer Suite. Unter den Attributen dieses Knotens sehen Sie eine Tabelle für "Include Dateien". Fügen Sie zu dieser Liste nun die Bibliothek utils.qft hinzu. Einträge in dieser Liste werden wie Variablen über die Knöpfe "Bearbeiten", "Hinzufügen", "Löschen" etc. bearbeitet. Sie sollten jetzt in etwa Folgendes sehen:

Abbildung 6.5:  Eine Include Datei

Hinweis Für detaillierte Informationen darüber, wie QF-Test implizite Referenzen bei Prozeduraufrufen auflöst, lesen Sie bitte den Abschnitt Auflösen von Include Dateien im Handbuch.

6.6
Modularisierung für verschiedene SUTs

Erinnern Sie sich an die Diskussion zu Beginn dieses Kapitels? Eine Bibliothek wie utils.qft sollte keine direkten Bezüge zum SUT Client haben. Wenn Sie sich utils.qft aber genau ansehen, werden Sie feststellen, dass es immer noch Bezüge zum "Options demo" gibt. Sehen Sie sich z.B. einen der "Check Boolean: selected" Knoten an und Sie sehen eine direkte Referenz im "Client" Attribut:

Abbildung 6.6:  Konstante Referenz des SUT Clients

Diese direkte Referenz hindert Sie natürlich daran, die Bibliothek utils.qft aus einer anderen Testsuite mit einem anderen SUT Client zu verwenden. Doch auch hierfür gibt es eine einfache Lösung: Statt einer festen Referenz auf den SUT Client machen wir das "Client" Attribut in allen Knoten der Bibliothek variabel, so dass es von der Testsuite, die utils.qft verwendet, gesetzt werden kann (und muss).

Ändern Sie nun also überall, wo Sie eine Referenz auf den Client "Options" finden, diese zu $(client) wie in folgender Abbildung:

Abbildung 6.7:  Variable Referenz des SUT Clients

Dies müssen Sie mit sämtlichen Client Attributen in der gesamten Testsuite utils.qft machen. Auch diese Arbeit macht Ihnen QF-Test allerdings leicht: Selektieren Sie zunächst den "Testsuite" Wurzelknoten und wählen Sie den Menüeintrag »Bearbeiten«-»Ersetzen«. Geben Sie bei "Suchen nach" den Wert Options ein, bei "Ersetzen durch" den Wert $(client) und wählen Sie bei "Im Attribut" das Attribut Client aus.

Den nächsten Schritt werden Sie sich bereits denken können. Sie müssen nun Ihre neue Testsuite so anpassen, dass der Wert der Variable "client" definiert ist, wenn beim Ablauf der Tests eine Prozedur in utils.qft ausgeführt wird. Ein möglicher Weg dazu wäre, die "client" Variable als Argument bei jedem Prozeduraufruf zu übergeben. Diese Lösung würde zwar durchaus funktionieren, sie erfordert aber viel Handarbeit und ist außerdem fehleranfällig.

Eine wesentlich elegantere Lösung besteht darin, die Variable einmal in Ihrer Testsuite zu definieren, so dass Sie danach gar nicht mehr daran denken müssen. Selektieren Sie hierzu den "Testsuite" Wurzelknoten Ihrer Suite und sehen Sie sich dessen Detailansicht an. In diesem Knoten können Sie Variablen definieren (unterhalb der Include Dateien und der abhängigen Dateien), die für die gesamte Testsuite Gültigkeit haben. Legen Sie nun eine Variable namens "client" an und setzen Sie diese auf den Wert "Options" wie folgt:

Abbildung 6.8:  Setzen einer Variable für die gesamte Testsuite

Wenn Sie diesen Schritt abgeschlossen haben, sollten Sie sich keine Gedanken mehr um diese Variable machen müssen. Erst wenn Sie eine neue Testsuite erstellen, die utils.qft verwendet, müssen Sie diese wieder entsprechend definieren. Ihre Bibliothek ist jetzt vollständig modular.

Videos Downloads Dokumentation Kaufen Gratis Testen