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

3
Benutzen des Debuggers [30-45 Min]
3.1
Einführung

In diesem Kapitel werden wir lernen, wie der in QF-Test integrierte intuitive Debugger benutzt wird. Diejenigen unter Ihnen, die bereits Erfahrungen mit Java oder anderen Programmierumgebungen haben, werden hier Ähnlichkeiten in Funktion und Nutzen des Debuggers feststellen.

Im Debuggertutorial werden wir die Testsuite Options.qft verwenden, mit der Sie ja aus den vergangenen Kapiteln bereits bestens vertraut sein sollten. Falls diese Testsuite noch nicht auf Ihrem System läuft, führen Sie bitte den Startvorgang wie in Kapitel 1 beschrieben durch.

3.2
Starten des Debuggers

Der QF-Test Debugger kann auf verschiedene Arten gestartet werden. Eine Möglichkeit ist es, einen Knoten oder mehrere Knoten für die Ausführung zu markieren und den Button "Einzelschritt ausführen" Einzelschritt       ausführen oder "gesamte Anweisung" Gesamten Knoten       ausführen zu drücken, oder über das Menü »Debugger«-»Einzelschritt ausführen« oder »Debugger«-»Gesamten Knoten ausführen«.

Abbildung 3.1:  Auswählen eines Knotens in der Testsuite Options.qft und Starten des Debuggers.

Beachten Sie, wenn Sie einen Test in Ihrer Testsuite ausführen und den "Abspielen" Button benutzen, dass das Debuggerfenster in der Regel nicht sichtbar ist. Wenn Sie den Debugger über den Menüeintrag »Debugger«-»Debugger aktivieren« einschalten, wird er automatisch aktiviert, wenn eine nichtgefangene Exception auftritt. Wird ein benutzerdefinierter Haltepunkt erreicht, schaltet sich der Debugger in jedem Fall ein. In beiden Fällen wird die Ausführung des Tests am entsprechenden Knoten angehalten und dieser mit einem Pfeil markiert.

3.3
Das Debuggerfenster

Der Debugger kann entweder im normalen Testsuitefenster laufen, oder in einem extra Debuggerfenster. Letzteres erhält man durch »Debugger«-»Debuggerfenster öffnen...« wenn der Debugger bereits läuft.

Sie können auch einstellen, dass sich das Debuggerfenster automatisch öffnet, indem Sie dies in den globalen Einstellungen mittels »Debugger«-»Optionen«-»Debuggerfenster immer öffnen« festlegen.

Das Debuggerfenster selbst gleicht im Aussehen dem normalen Testsuitefenster. Jedoch beinhaltet es nur die Teilmenge der Funktionen von QF-Test, die für das Debuggen benötigt werden. Die folgende Graphik zeigt das Debuggerfenster nach dem Starten des Debuggers in der Options.qft Testsuite.

Abbildung 3.2:  Das Debuggerfenster.
3.4
Unterschied zwischen aktuellem und ausgewähltem Knoten

Wenn der Debugger läuft, wird ein Rahmen um das Icon des Knotens als Indikator verwendet, um den aktuell ausgeführten Knoten zu markieren. Beachten Sie auch, dass QF-Test die ganze Hierarchie der Ausführung, vom Eintrittspunkt hinunter bis zum aktuell ausgeführten Knoten, mit kleinen Pfeilen markiert. Siehe Abbildung 3.2. Sie weisen dem Benutzer den Weg zum aktuellen Knoten.

Sollte es im Debugger vorkommen, dass Sie den Knoten, der gerade ausgeführt wird, nicht sofort lokalisieren können, so lässt sich die Position schnell mit Hilfe des Knopfes "Aktuellen Knoten finden" Aktuellen Knoten finden bestimmen. Äquivalent geht es auch über das Menü »Debugger«-»Aktuellen Knoten finden«.

Ein "ausgewählter" Knoten wird hervorgehoben, wie wenn Sie Ihn mit der Maus anklicken. Das kann manchmal zu Verwirrung führen, weil der aktuelle Knoten während der Debugging Sitzung auch selektiert ist. Sie werden dies aber schnell zu unterscheiden lernen.

3.5
Sich im Einzelschritt durch einen Test oder eine Sequenz bewegen

Sie sind nun bereit, schrittweise durch die Knoten der Testsuite zu gehen, um das Verhalten des Debuggers zu sehen. Markieren Sie den Knoten "Sequenz: Table" wie in Abbildung 3.2 gezeigt und drücken Sie den Knopf "Einzelschritt ausführen" Einzelschritt ausführen.

Sie sehen, dass der Debugger den aktuellen Knoten öffnet, um die enthalten Kindknoten zugänglich zu machen. Anschließend wird der erste Kindknoten selektiert, wie die folgende Graphik zeigt.

Abbildung 3.3:  Nach dem Drücken des Knopfes "Einzelschritt ausführen".

Probieren Sie nun einige Male den "Einzelschritt ausführen" Knopf zu drücken. Der Debugger wird den jeweiligen Knoten ausführen, dann zum nächsten springen und anschließend in den Zustand "Pause" gehen, um das folgende Kommando abzuwarten.

Nachdem wir den "Einzelschritt" Modus gesehen haben, entriegeln Sie nun den "Wiedergabe fortsetzen" Wiedergabe       unterbrechen/fortsetzen Knopf, um die Sequenz bis zum Ende laufen zu lassen.

Nach der Ausführung der ersten Sequenz der Testsuite sollte sich das Debugger Fenster vergleichbar der folgenden Graphik präsentieren:

Abbildung 3.4:  Vorbereitung der Kommandos "gesamten Knoten ausführen".

Wenn in Ihrem Fenster der "Sequenz: Tab" Knoten nicht selektiert ist, so wählen Sie ihn bitte aus. Anschließend drücken Sie den Knopf "gesamten Knoten ausführen" Gesamten Knoten ausführen.

Diesmal reagiert der Debugger, indem er die gesamte Sequenz ausführt. Im Gegensatz zu vorher sehen Sie nun nicht die einzelnen Schritte. Während die Sequenz läuft, können Sie den Knoten "Sequenz: Tab" aufklappen, um die einzelnen Kindknoten zu sehen. In der Tat gibt es dort verschiedene andere Sequenzen.

Die Operation "gesamten Knoten ausführen" dient also dazu, einen Knoten auszuführen, ohne sich für die Details der Einzelschritte zu interessieren.

Nachdem die Ausführung des "Sequenz: Tab" Knotens beendet wurde, ist nun der "Sequenz: Text Check" Knoten ausgewählt. Drücken Sie den Knopf "Einzelschritt ausführen", so dass die Ansicht Ihres Debuggers folgender Graphik entspricht.

Abbildung 3.5:  Vorbereitung für die Operation "Bis Knotenende ausführen".

Drücken Sie nun den Knopf "Bis Knotenende ausführen" Bis Knotenende ausführen. Dies veranlasst den Debugger, die verbleibenden Knoten in der Sequenz auszuführen und den nächsten Knoten "Sequenz: Selected test" auszuwählen.

Was genau macht die Operation "Bis zum Knotenende ausführen"? Sehr einfach - sie führt alle Knoten aus, die auf der gleichen Hierarchieebene gefunden werden wie der aktuell ausgewählte Knoten und stoppt, wenn ein Knoten gefunden wird, der höher in der Hierarchie steht. Kindknoten werden während der Aktion natürlich mit ausgeführt.

Für dieses Beispiel ähnelt das "Bis zum Knotenende ausführen" sehr der Operation "Wiedergabe fortsetzen". Die Aktion ist auch gleich, bis auf einen entscheidenden Unterschied. Die Operation "Bis zum Knotenende ausführen" hält am nächsten Knoten, der höher in der Hierarchie steht an, wogegen "Wiedergabe fortsetzen" weiterläuft. Letztere terminiert erst, wenn ein Knoten derselben Hierarchieebene gefunden wird wie die des Startknotens, bei dem die Operation begann. Wenn sich das kompliziert anhört, versuchen Sie einfach ein wenig mit den zwei Operationen in der Testsuite zu experimentieren. Sie werden schnell dahinter kommen!

3.6
Knoten überspringen

Die "Überspringen" Funktionen erweitern die Fähigkeiten des Debuggers von QF-Test in einer Weise, die über den Funktionsumfang von Standardprogrammierumgebungen hinausgeht. Wie der Name andeutet, erlauben die "Überspringen" Operationen einen oder mehrere Knoten während des Testlaufs auszulassen, d.h. weiter zu springen ohne sie auszuführen. Dies kann aus verschiedensten Gründen sinnvoll sein, sei es um schnell an eine gewisse Position in Ihrem Testablauf zu gelangen oder einen aktuell zu einem Fehler führenden Knoten zu überspringen.

Bringen Sie die Testsuite wieder in den Ausgangszustand, wie im vorigen Abschnitt und betätigen Sie bitte solange den Knopf "Einzelschritt ausführen", bis sich der aktuelle Knoten in der Sequenz wie in Abbildung 3.3 dargestellt befindet. Nun drücken Sie den "Aus Knoten herausspringen" Aus       Knoten herausspringen Button. Sie sehen sofort, dass QF-Test einfach aus der Sequenz springt, in der Sie sich gerade befinden, ohne dass die verbleibenden Knoten in der Sequenz ausgeführt werden.

Ihre Testsuite sollte nun, wie in Abbildung 3.4 gezeigt, aussehen. Machen Sie in diesem Zustand weiter und drücken Sie den "Knoten überspringen" Knoten überspringen Knopf. Wir stellen ein ähnliches Verhalten fest wie bei "Aus Knoten herausspringen". QF-Test überspringt den ausgewählten Knoten, ohne dessen Kindknoten auszuführen. (Wenn Sie den Knoten, der übersprungen werden soll, aufklappen, sehen Sie, dass sich dort in der Tat verschiedene Sequenzen befinden, von denen keine ausgeführt wird.)

Noch eine Bemerkung zu "Knoten überspringen" und "Aus Knoten herausspringen": Benutzen Sie diese mit Vorsicht! Aus einer Sequenz herauszuspringen, bevor diese zu Ende gelaufen ist, kann dazu führen, dass Ihr SUT in einem unbekannten Status belassen wird, mit dem andere Sequenzen oder Tests in der Suite nicht zurechtkommen.

3.7
Setzen von Breakpoints

Setzen von Breakpoints (=Haltepunkte) ist ein deterministischer Weg, Ihre Testsuite bis zu einem bestimmten Knoten auszuführen und dann anzuhalten. Anschließend ist der Debugger aktiv und Sie können mit der gewünschten Operation weitermachen.

Um einen Haltepunkt zu setzen, markieren Sie einfach einen Knoten und wählen im Menü »Debugger«-»Breakpoint an/aus« oder alternativ [Strg-F8]. Breakpoints werden durch ein (B) vor dem Knoten gekennzeichnet, wie in der folgenden Graphik zu sehen ist.

Abbildung 3.6:  Setzen von Breakpoints.

Um zu sehen, wie Haltepunkte funktionieren, wählen Sie bitte den obersten Knoten Ihrer Testsuite aus und drücken Sie den "Wiedergabe" Knopf.

Um einen Breakpoint auszuschalten, selektieren Sie einfach den Knoten an dem der Haltepunkt gesetzt wurde und benutzen Sie im Menü »Debugger«-»Breakpoint an/aus« oder erneut die Tastenkombination [Strg-F8]. Das Kommando »Debugger«-»Alle Breakpoints löschen« ist ebenfalls nützlich, wenn alle Haltepunkte in allen Testsuiten gelöscht werden sollen.

Es gibt keine Beschränkung für die Anzahl an Breakpoints, die Sie in Ihrer Testsuite setzen können. Beachten Sie jedoch, dass Haltepunkte nicht mit Ihrer aktuellen Sitzung abgespeichert werden. Wenn Sie also Ihre Testsuite schließen, sind die Breakpoints weg.

3.8
Lösen von Laufzeitproblemen

Wenn Sie beginnen Ihre eigenen Testsuiten zu erstellen und diese abzuspielen, werden Sie möglicherweise mit Problemen wie "Keine Komponenten für QF-Test ID" oder "Unbekannter Prozedurname" konfrontiert. Diese Probleme treten dann auf, wenn QF-Test IDs bzw. Namen falsch eingegeben wurden oder sich die Namen der referenzierten Objekte selbst geändert haben. Zur Laufzeit äußert sich das Problem durch eine Unterbrechung des Testlaufs mit einer entsprechenden Fehlermeldung von QF-Test.

Dies eröffnet uns die Chance, eines der wichtigsten Features des Debuggers in QF-Test zu demonstrieren: Die Fähigkeit, solche Fehler direkt zur Laufzeit während der Ausführung Ihrer Testsuite zu korrigieren.

Wir wollen als Erstes Ihre Testsuite dazu veranlassen, eine Exception zu werfen, indem wir sie auf eine unbekannte Komponente treffen lassen. Ändern Sie in einer beliebigen Komponente die 'QF-Test ID' in einer Weise ab, dass diese offensichtlich falsch ist. Für dieses Beispiel haben wir den ersten Knoten unter der Sequenz "Table", die wir in Abbildung 3.6 benutzt haben, ausgewählt

Abbildung 3.7:  Auswahl des zu modifizierenden Knotens.

und die 'QF-Test component ID' modifiziert, so dass sie sich folgendermaßen darstellt:

Abbildung 3.8:  Der modifizierte Knoten.

Um das Feld 'QF-Test component ID' zu editieren, selektieren Sie den Knoten im Baum und wählen im Menü »Bearbeiten«-»Eigenschaften...« oder editieren Sie einfach das Feld in der Detailansicht (aktivierbar mittels »Ansicht«-»Details anzeigen«). Bestätigen Sie Ihre Änderung mit dem OK Knopf. Hier wird Ihnen eine Warnung präsentiert, dass die eingegebene QF-Test ID nicht gültig ist. Das ist gut so! Es ist QF-Test's Weg, Probleme bereits im Vorfeld zu finden. Jedoch wollen wir in diesem Beispiel eine inkorrekte Referenz erzeugen, so dass Sie bitte den "falschen" Eintrag belassen.

Wir können nun die modifizierte Testsuite ausführen. Wählen Sie bitte den Knoten "Test: Clickstream" und drücken Sie den Knopf "Ausführen". Der Test stoppt prompt mit dem Fehlerdialog:

Abbildung 3.9:  Keine Komponente für QF-Test ID.

Drücken Sie den OK Button, um den Dialog zu schließen. Nun sehen Sie, dass die Ausführung der Testsuite an dem modifizierten Knoten unterbrochen wurde. Der Debugger ist aktiv und wartet auf weitere Befehle. Möchten Sie den "Problemknoten" überspringen, den Testlauf komplett beenden um das Problem tiefer zu analysieren oder den Knoten direkt verändern und den Testlauf fortsetzen? Wir wählen die letzte Alternative (da wir ja bereits wissen, was zu tun ist).

In dem sich immer noch im Wartezustand befindlichen Debugger können Sie nun das Feld mit der 'QF-Test component ID' wieder in seinen ursprünglichen Zustand korrigieren. Wenn Sie den Originalwert nicht mehr wissen, können Sie ihn mit Hilfe von »Bearbeiten«-»Rückgängig machen« restaurieren, vorausgesetzt Sie haben keine weiteren Änderungen in der Testsuite vorgenommen.

Mit der korrekt wiederhergestellten QF-Test ID drücken Sie den "Wiedergabe fortsetzen" Wiedergabe unterbrechen/fortsetzen Knopf um dort weiter zu machen, wo der Testlauf unterbrochen wurde. Sie sehen, dass nun die Testsuite wie ursprünglich weiterläuft!

3.9
Sprung ins Protokoll

Hin und wieder ist die Fehlersuche in Ihrer Testsuite nicht so einfach wie in unserem Beispiel. Die Ursachen für einige Probleme, die zu Exceptions führen, müssen auch nicht im aktuellen Knoten liegen sondern können evtl. aus einer weiter zurückliegenden Sequenz von Events stammen.

Unter solchen Umständen kann das Protokoll äußerst hilfreich für Debugging Zwecke sein, da es im Detail die Schritte enthält, wie QF-Test jeden Knoten durchläuft und wie QF-Test IDs von Komponenten, Prozedurnamen, Variablen und andere Elemente aufgelöst werden.

Da die Suche im Protokoll mühsam sein kann, besonders wenn Ihre Testsuite komplexer wird, stellt der Debugger einen einfachen Mechanismus zur Verfügung, um direkt in den relevanten Bereich im Protokoll zu springen, wenn ein Fehler auftritt.

Wir werden dies am gleichen Beispiel wie in Abschnitt 3.8 demonstrieren, wo eine Exception aufgrund einer unbekannten QF-Test ID geworfen wurde. Wiederholen Sie bitte die Schritte des Kapitels und führen Sie die Testsuite aus, außer dass Sie den Fehler noch nicht beheben. Wir werden zuerst das Protokoll untersuchen. Um an die relevante Position im Protokoll zu springen wählen Sie im Menü »Debugger«-»In Protokoll springen« oder benutzen Sie das [Strg-J] Tastenkürzel. Das Protokoll wird nun geöffnet und der relevante Knoten wird automatisch selektiert, wie unten gezeigt:

Abbildung 3.10:  In das Protokoll springen.

Nehmen Sie sich nun ein wenig Zeit, um die verschiedenen Elemente im Protokoll genauer zu untersuchen. Obwohl das verwendete Beispiel einfach ist, fördert es Ihr Verständnis für dieses wirksame Hilfsmittel. Dieses wird Ihnen später von großem Nutzen sein, wenn Ihre eigenen Testsuiten komplexer werden.

Wenn Sie damit fertig sind, können Sie mit dem Beispiel wie im letzten Kapitel fortfahren oder auch einfach den Testlauf abbrechen. Achten Sie jedoch darauf die Testsuite nicht zu speichern, falls Sie den aktuellen Fehler nicht korrigiert haben.

Videos Downloads Dokumentation Kaufen Gratis Testen