Testausführung im Batchmodus
Grundlage für die Ausführung von Tests über die Kommandozeile bildet eine Vielzahl von Argumenten, mit denen QF-Test im Batchmodus gestartet werden kann. Anschließend werden exemplarisch einige davon behandelt; eine Übersicht über alle Optionen findet man in Kapitel 44.
Die nachfolgenden Beispiele sind für Windows geschrieben, lassen sich aber leicht auf
Linux übertragen. Neben den Pfadangaben unterscheidet sich die Syntax nur noch in Bezug
auf die Platzhalter (Abschnitt 44.2.4): Unter Linux kann neben der Form
+X auch %X verwendet werden. Unter Windows gibt es außerdem neben der GUI-Anwendung
qftest.exe
auch eine Konsolen-Variante qftestc.exe
. Diese
wartet, bis die Ausführung von QF-Test beendet ist und gibt u. a. auch print-Ausgaben von
einem Server-Skript aus.
Verwenden der Kommandozeile
Der einfachste Aufruf von QF-Test, um einen Test auszuführen, sieht so aus:
qftest -batch -run c:\mysuites\suiteA.qft
Das Argument -batch
sorgt dafür, dass QF-Test ohne graphische
Benutzeroberfläche gestartet wird. Das zweite Argument, -run
, sagt QF-Test,
dass ein Test ausgeführt werden soll. Den Abschluss der Kommandozeile bildet die
auszuführende Testsuite.
Hinweis Das Argument -run
ist optional, d. h. die
Testausführung ist als Standard für den Batchmodus definiert.
Führt man die obige Anweisung aus, werden alle Testfall und
Testfallsatz Knoten nacheinander ausgeführt, die in der Testsuite
suiteA.qft
auf der obersten Ebene (d. h. direkt unterhalb des
Testsuite Knotens) definiert sind. Nach Beendigung des Testlaufs findet man im
aktuellen Verzeichnis, unter dem gleichen Namen wie die Testsuite, eine
Protokolldatei, der man das Testergebnis entnehmen kann.
Durch Angabe von -nolog
kann die Erstellung der Protokolldatei auch
unterdrückt werden. Das macht aber wahrscheinlich nur dann Sinn, wenn man seinen Test
um eigene Protokollausgaben bereichert hat, die etwas in eine Datei geschrieben werden.
Ansonsten lieferte nur noch der Rückgabewert von QF-Test einen Hinweis auf den Ausgang
des Testlaufs: 0 bedeutet, dass der Test erfolgreich absolviert wurde, ein positiver
Wert hingegen ist die Folge von Warnungen, Fehlern oder gar Exceptions (siehe Abschnitt 44.3).
In der Regel möchte man also wohl ein Protokoll des Testlaufs erstellen und dieses an
einer bestimmten Stelle im Dateisystem ablegen. Das geht über den Parameter
-runlog
:
qftest -batch -compact -runlog c:\mylogs\+b c:\mysuites\suiteA.qft
Nun wird eine Protokolldatei suiteA.qrz
im angegebenen Verzeichnis
c:\mylogs
erstellt. Der Platzhalter +b
sorgt dafür, dass sie
den Namen von der Testsuite übernimmt. Durch die Angabe von -compact
wird
erreicht, dass nur die wichtigsten Knoten in die Protokolldatei übernommen werden,
also nur solche, die für den Report und gegebenenfalls die Fehleranalyse benötigt
werden. Bei sehr umfangreichen Tests kann dieser Parameter helfen, den
Anspruch an Arbeitsspeicher in Grenzen zu halten, wobei die neuere Möglichkeit,
Protokolldateien zu splitten, sogar noch mächtiger ist. Nähere Informationen dazu finden Sie in
Abschnitt 7.1.
Hinweis Ob die Datei hier tatsächlich als komprimiertes Protokoll
(das ist vom obigen "compact" zu unterscheiden) mit der Endung .qrz
erstellt wird, hängt von den Einstellungen ab. Um ein bestimmtes Format zu erzwingen,
kann die Endung explizit angegeben werden, also z. B. -runlog
c:\mylogs\+b.qrl
, wenn unkomprimiertes XML gewünscht wird.
Manchmal möchte man vielleicht nicht die komplette Testsuite, sondern nur bestimmte
Testfälle ausführen. Über den Parameter -test
lässt sich ein ganz
bestimmter Knoten zur Ausführung festlegen:
qftest -batch -runlog c:\mylogs\+b -test "Mein Test" c:\mysuites\suiteA.qft
Die Angabe "Mein Test"
bezieht sich dabei auf das Attribut QF-Test ID des
auszuführenden Knotens; bei Testfall oder Testfallsatz Knoten kann auch deren
qualifizierter Name angegeben werden. Sollen mehrere Knoten ausgeführt werden, kann
das Argument -test <ID>
auch mehrfach angegeben werden. Neben der
QF-Test ID eines Knotens versteht -test
auch die Angabe eines numerischen Index. So
würde etwa -test 0
den ersten Knoten unterhalb von Testsuite
ausführen.
Das Protokoll liefert eine eher technische Sicht auf den Ablauf eines Tests; es ist
vor allem nützlich, um während eines Testlaufs aufgetretene Fehler zu analysieren
(vgl. Abschnitt 7.1). Eine übersichtliche Darstellung über die
ausgeführten Testfälle und eventuell aufgetretene Fehler bietet hingegen der Report.
Er wird aus der Protokolldatei erstellt und liegt anschließend im XML- und/oder
HTML-Format vor. Der Report kann also auch nachträglich aus einer (oder mehreren)
Protokolldateien erstellt werden (vgl. Kapitel 24). Um gleich bei
der Testausführung dafür zu sorgen, verwendet man -report
:
qftest -batch -runlog c:\mylogs\+b -report c:\mylogs\rep_+b_+y+M+d+h+m c:\mysuites\suiteA.qft
Hier werden die XML- und HTML-Reportdateien in einem Verzeichnis erstellt, dessen Name
sowohl die Testsuite wie auch Datum und Uhrzeit enthält, etwa:
c:\mylogs\rep_suiteA_0806042152
. Ersetzt man das Argument
-report
durch -report.xml
bzw. -report.html
, so
wird nur der XML- bzw. nur der HTML-Report erstellt.
Testfälle sind oft parametrisiert, das heißt, sie verwenden Variablen, deren Werte den
Testablauf bestimmen. Ist beispielsweise im Testsuite Knoten eine Variable
myvar
definiert, kann deren Vorgabewert zur Testausführung überschrieben
werden:
qftest -batch -variable myvar="Value from command line" -runlog c:\mylogs\+b c:\mysuites\suiteA.qft
Sollen mehrere Variablen gesetzt werden, kann -variable
<name>=<wert>
auch mehrfach angegeben werden.
Windows Befehlsskript
Die Möglichkeit, Tests über die Kommandozeile ausführen zu können, bildet die
Grundlage zur einfachen Integration von QF-Test in bestehende Testmanagement-Systeme
(siehe Anbindung an Testmanagementtools). Wer hingegen kein Testmanagement-System
betreibt, mag es vielleicht praktisch finden, das Kommando zur Testausführung in ein
Skript einzubetten. Ein einfaches Windows Befehlsskript (qfbatch.bat
)
könnte zum Beispiel wie folgt aussehen:
@echo off setlocal if "%1" == "" ( echo Usage: qfbatch Testsuite goto end ) else ( set suite=%~f1 ) set logdir=c:\mylogs pushd c:\programs\qftest\qftest-9.0.0\bin @echo on .\qftest -batch -compact -runlog %logdir%\+b %suite% @echo off if %errorlevel% equ 0 ( echo Test terminated successfully goto end ) if %errorlevel% equ 1 ( echo Test terminated with warnings goto end ) if %errorlevel% equ 2 ( echo Test terminated with errors goto end ) if %errorlevel% equ 3 ( echo Test terminated with exceptions goto end ) if %errorlevel% leq -1 ( echo Error %errorlevel% goto end ) :end popd
qfbatch.bat
zur Ausführung einer Testsuite
Nun braucht man nur noch das Skript auszuführen, mit dem Dateinamen der auszuführenden
Testsuite als Parameter. Der Rest geht von alleine: Die Testsuite wird ausgeführt, die
Protokolldatei im Verzeichnis logdir
abgelegt und abschließend gibt das
Skript in Abhängigkeit vom QF-Test Rückgabewert eine Statusmeldung aus.
3.0+25.1.3
Groovy
Seit Version 3 ist die Sprache Groovy Bestandteil von QF-Test (siehe Kapitel 11). Hauptsächlich gedacht ist sie zum Schreiben von Server- und
SUT-Skripten, aber Groovy kann ebenso wie Jython auch außerhalb von QF-Test verwendet werden.
Diese Sprache ist sicher gut geeignet, um sich selbst ein kleines Management-System
zur Testautomatisierung zu erstellen. Mit Groovy lässt sich übrigens auch der Einsatz
von Ant vereinfachen, denn statt mit klobigen XML-Dateien, über die sich zudem etwa
Bedingungen nur schwer umsetzen lassen, kann man dank AntBuilder
mit
übersichtlichem Groovy-Code arbeiten. Das folgende Beispiel kommt allerdings ohne Ant
aus:
def suite = '' if (args.size() == 0) { println 'Usage: groovy QfExec Testsuite' return } else { suite = args[0] } def qftestdir = 'c:\\programs\\qfs\\qftest\\qftest-9.0.0' def qftest = qftestdir + '\\bin\\qftest.exe' def command = [qftest, "-batch", "-compact", "-runlog", "c:\\mylogs\\+b", suite] def printStream = { stream -> while (true) { try { stream.eachLine { println it } } catch (IOException) { break } } } println "Running command: $command" def proc = command.execute() new Thread().start() { printStream(proc.in) } new Thread().start() { printStream(proc.err) } proc.waitFor() switch (proc.exitValue()) { case '0': println 'Test terminated successfully'; break case '1': println 'Test terminated with warnings'; break case '2': println 'Test terminated with errors'; break case '3': println 'Test terminated with exceptions'; break default: println "Error ${proc.exitValue()}" }
QfExec.groovy
zur Ausführung einer Testsuite
Sollte Groovy unabhängig von QF-Test auf Ihrem Rechner installiert sein, kann die
Beispiel-Testsuite einfach mit groovy QfExec c:\mysuites\suiteA.qft
ausgeführt werden. Andernfalls kann auch die Groovy jar-Datei aus der QF-Test
Installation verwendet werden. Am besten nutzt man in diesem Fall zur Ausführung von
Groovy wieder ein Befehlsskript:
@echo off setlocal if "%1" == "" ( echo Usage: qfexec Testsuite goto end ) set qftestdir=c:\programs\qftest\qftest-9.0.0 set scriptfile=QfExec.groovy java -cp %qftestdir%/lib/groovy-all.jar groovy.ui.GroovyMain %scriptfile% %* :end
qfexec.bat
zur Ausführung von Groovy (hier
QfExec.groovy
)
Die Testsuite kann nun mit qfexec c:\mysuites\suiteA.qft
ausgeführt
werden.