Avatar of Karlheinz Kellerer
Autor: Karlheinz Kellerer
30. Januar 2020

Wie kann man Jython Scripts in QF-Test debuggen?

Motivation

Durch die Verwendung von Skriptknoten erlaubt QF-Test die Einbettung von kundenspezifischer Funktionalität in Ihrer Testfälle. Im Regelfall sollten diese Skripte vergleichsweise kurz und einfach sein und  nur dedizierte Funktionalität enthalten, während der Hauptteil der Testlogik durch die visuellen Knoten von QF-Test abgebildet wird.

Das Überprüfen der funktionalen Korrektheit solcher Skripte kann deshalb überwiegend per Augenschein erfolgen oder durch Einfügen einfacher print Befehle, um Ausgaben in das QF-Test Terminal zu schreiben (siehe auch Blog zu print).  Für Jython gibt es auch einen integrierten Post Mortem Debugger, um die Ursachen für Exceptions während der Skriptausführung zu analysieren (siehe Post Mortem Handbuchkapitel).

Jedoch kann es Situationen geben, in denen Skripte eine gewisse Komplexität erreichen und der Bedarf für erweitertes Debugging entsteht, z.B. mittels Setzen von Haltepunkten, schrittweises Ausführen und die Analyse von Variablenwerten. Um solche Debugging-Features zu ermöglichen, können Sie PyDev verwenden, eine IDE für Python Entwicklung. Es gibt sie als Eclipse Plug-in oder unabhängige Applikation unter dem Namen Liclipse.

In diesem Beitrag wird beschrieben, wie man die Eclipse bzw. Liclipse IDE konfiguriert, dass es sich mit dem Jython Interpreter von QF-Test verbindet, um so erweitertes Debugging nutzen zu können.

IDE konfigurieren

Wenn Sie die Eclipse IDE nutzen, wird im folgenden Schritt 1 gezeigt, wie PyDev als Plug-in eingerichtet wird.

Alternativ kann man direkt die PyDev IDE, genannt Liclipse, herunterladen, die das PyDev Plug-in bereits beinhaltet (http://www.liclipse.com/). Dann kann der erste Schritt übersprungen werden.

Schritt 1: Eclipse Pydev Plug-in installieren (nicht notwendig für Liclipse)

PyDev Package

Schritt 2: Jython Interpreter in Eclipse / Liclipse konfigurieren

  • Menü: Window → Preferences
  1. PyDev → Interpreters → Jython Interpreter
  2. Browse for Jython jar
  3. Zum lib\jython.jar innerhalb Ihres QF-Test Versionsverzeichnisses navigieren
Jython Interpreter
  • Es erscheint ein Fehlermeldung, aber einfach dort trotzdem fortfahren mit „Proceed anyways“

Jython interpreter error message
  • Hinzufügen des QF-Test jython\Lib Verzeichnis
  1. Neues Verzeichnis: New Folder
  2. Den jython\Lib Ordner aus ihrem versionsspezifischen QF-Test Verzeichnis zum Python Path dazu fügen
jython\Lib directory

Damit ist die grundlegende Konfiguration von Eclipse / Liclipse erfolgt.

QF-Test konfigurieren

Schritt 1: PyDev zum QF-Test Python Pfad dazufügen

Um die notwendigen pydev Module zum Python Path dazu zu fügen, können Sie QF-Test mit einem zusätzlichen Kommandozeilenparameter starten

-J-Dpython.path=<Pfad zu den relevanten pydev Modluen>

Die relevanten pydev Module liegen im pysrc Verzeichnis innerhalb des pydev.core Plug-ins. Dieses wiederum befindet sich im plugins Ordner innerhalb der Eclipse/Liclipse Installation und startet mit org.python.pydev.core.

z.B. für Liclipse kann es sich wie folgt darstellen:

“C:\Programme\Brainwy\LiClipse 5.0.3\plugins\org.python.pydev.core_6.5.0.201809011413\pysrc”

Ein möglicher Ort für Eclipse wäre:

"C:\Programme\Eclipse\eclipse-4.11-64\plugins\org.python.pydev.core_7.2.1.201904261721\pysrc"

Die QF-Test Kommandozeile, die auch für eine Desktop-Verknüpfung genutzt werden kann, könnte folgendermaßen aussehen für Liclipse :

"C:\Programme\QFS\QF-Test\qftest-4.6.0-dev\bin\qftest.exe" -reuse -J-Dpython.path=
"C:\Programme\Brainwy\LiClipse 5.0.3\plugins\org.python.pydev.core_6.5.0.201809011413\pysrc"

ezw. Eclipse:

"C:\Programme\QFS\QF-Test\qftest-4.6.1-dev\bin\qftest.exe" -reuse -J-Dpython.path="T:\common\eclipse\eclipse-4.11-64\plugins\org.python.pydev.core_7.2.1.201904261721\pysrc"

Schritt 2: QF-Test konfigurieren, dass temporäre Jython Dateien immer geschrieben werden

QF-Test schreibt Jython Skriptknoten systembedingt in temporäre Dateien (z.B. _script3452345823457.py im QF-Test Benutzerverzeichnis), jedoch im Standardfall nur einmal oder wenn bei der Ausführung ein Fehler auftritt. Da diese temporären Dateien aber vom PyDev Debugger genutzt und angezeigt werden, ist es empfehlenswert QF-Test so zu konfigurieren, dass die temporären Dateien bei jeder Code-Änderung geschrieben werden. Dies kann durch Setzen der folgenden Option in einem Server-Skriptknoten geschehen

rc.setOption(Options.OPT_PLAY_SCRIPT_JYTHON_SAVE, Options.VAL_PLAY_SCRIPT_JYTHON_SAVE_IF_CHANGED)

der einmal vor dem Beginn des Debuggings ausgeführt werden muss.

Schritt 3: Eclipse/Liclipse in QF-Test als externen Editor nutzen (optional)

  • Wenn man Eclipse/Liclipse als IDE parat hat, kann es hilfreich sein,  dies als externen Skripting-Editor in QF-Test zu definieren, um Jython Skripte dann komfortabler zu bearbeiten. Mit den folgenden Schritte ist dies einfach möglich:
  1. Menü: Bearbeiten → Optionen
  2. Optionen auswählen: Allgemein → Externe Programme
  3. Kommando für externen Editor auf das Eclipse/Liclipse .exe mit dem Parameter –launcher.openFile
  4. Mit OK bestätigen
External programs
  • Nun werden Script Knoten direkt in Eclipse/Liclipse geöffnet, wenn der “In externem Editor öffnen” Button gedrückt wird.

Edit in external editor

Schritt 4: Skript für das Remote Debugging anpassen

  • Um Ihr Jython Skript für das Debugging vor zu bereiten, müssen Sie einige Zeilen Code einfügen:

import pydevd

pydevd.stoptrace()

pydevd.settrace('127.0.0.1', port=5678, suspend=True, stdoutToServer=True, stderrToServer=True, overwrite_prev_trace=True)

An dieser Stelle wird dann die Ausführung unterbrochen und die Kontrolle wechselt zum PyDev Debugger.

Prepare Jython script to be debugged

Schritt 1: PyDev Debug Server starten

  • Um PyDev zu erlauben, die Ausführung von Jython Skripten zu unterbrechen und dann zu kontrollieren, muss der PyDev Debug Server in Eclipse/Liclipse gestartet werden

 

  1. Zur Debug Perspektive wechseln
  2. Menü: Pydev → Start Debug Server
Start debug server

Schritt 2: Jython Server Skripten debuggen

  • Die Ausführung des Testlaufs mit Jython Server Skripts in QF-Test starten
  1. Wird das Skript mit der pydevd.settrace Anweisung ausgeführt, kommt es zu Unterbrechung durch den Debugger
  2. Die weitere Steuerung ist nur in Eclipse/Liclipse möglich
Test execution of Jython Server Script in QF-Test
  • Der Debug Server tritt in Aktion
  1. Der Ausführungsstapel wird auf im linken Bereich angezeigt.
  2. Der Skriptknoten wird geöffnet (es ist eine temporär generierte Datei _script…..).
  3. 1) Die Ausführung bleibt genau nach dem pydevd.settrace Aufruf stehen
  4. 2) Debugger Aktionen können nur genutzt werden, um die weitere Ausführung zu kontrollieren.
  5. Variablen können im rechten Bereich untersucht werden.
Debug server
  • Hinweis: PyDev Debugger Warnungen können in der Konsole erscheinen

pydev debugger: Unable to find real location for: C:\Users\qfs\AppData\Roaming\qfs\QF-Test\edit_ms.py.

sollten aber keinen negativen Einfluss haben.

Schritt 3: Jython SUT Skripte debuggen

  • Besonders SUT Skripte sollten kurz und einfachen sein, um das SUT so wenig wie möglich zu beeinflussen. Komplexe oder zeitaufwendige Operationen sollte in Server Skripte verlagert warden. Wenn die Ausführung eines SUT Skripts pausiert wird, bringt dies das ggf. gesamte SUT zum Stillstand mit evtl. negativen Seiteneffekten bis hin zum Absturz.
  1. Wenn es wirklich die Notwendigkeit für Remote Debugging von Jython SUT Skripten gibt, dann muss das pysrc Verzeichnis auch zum python.path des SUTs dazu gefügt werden und
  2. deshalb z.B. der Startbefehl des SUTs entsprechend angepasst werden.

Als ein Beispiel kann der Startbefehl des Swing CarConfigurators in der CarConfig.cmd Datei im Verzeichnis  demo/carconfig der QF-Test Distribution durch den zusätzlichen python.path Parameter in folgender Form angepasst werden:

%JAVA_BIN% -cp "../../qflib/qfdemo.jar;../../qflib/qflib.jar;../../lib/looks.jar;../../lib/jgraphx.jar"
-Dpython.path=" T:\common\eclipse\eclipse-4.11-64\plugins\org.python.pydev.core_7.2.1.201904261721\pysrc " "de.qfs.apps.qftest.demo.multi.CarConfigurator" %*

Nach dem Starten des CarConfig Demos sollten Sie Jython SUT Skripte für diesen Client debuggen können.

Zusammenfassung

Die Nutzung der Eclipse/Liclipse IDE für das Editieren und Debuggen von Jython Code in QF-Test kann eine sehr wirkungsvolle und hilfreiche Erweiterung für das Arbeiten mit komplexeren Skripten sein.

Groovy oder JavaScript Code kann nicht mittels PyDev o.Ä. erfolgen. Hier ist man also weiterhin auf die Überprüfung per Augenschein oder durch Print Befehle beschränkt.

Neuer Kommentar
( wird auf der Seite/Blog erscheinen )
( wird nicht auf der Seite/Blog erscheinen )

0 Kommentare

Sie haben Themenwünsche?
Wir freuen uns über Anregungen an blog@remove-this.qfs.de oder im Kommentar.

Benachrichtigung bei neuen Blog-Artikeln