zurück
Avatar of Pascal Bihler
Autor: Pascal Bihler
20. Februar 2025

Objekte in QF-Test Variablen – ein Überblick

Wenn man in QF-Test mit Variablen arbeitet, war es bisher die größte Herausforderung nachzuvollziehen, welche Variable gerade mit welchem Wert gültig ist – wichtig sind hier die Variablen-Stapel. Das Handbuch erklärt ihre Funktion ausführlich.

Was bisher geschah

Die Werte, die in Variablen gespeichert wurden, waren grundsätzlich Zeichenketten, andere Objekte (zum Beispiel Zahlen) wurden beim Speichern in Variablen mit rc.setLocal oder rc.setGlobal in eine Zeichenkette umgewandelt und im QF-Test Hauptprozess gespeichert. Beim Auslesen mit rc.getInt oder rc.getBool wurde der Wert dann nur zurückübersetzt.

Mit diesem Konzept ist es auch problemlos möglich, in einem SUT-Skript eine Variable zu setzen und deren Wert dann in einem Server-Skript oder einem If-Knoten zu verwenden (und andersrum). Wollte man komplexe Objekte zwischenspeichern, so musste man grundsätzlich mit den “globalen” Skript-Variablen einer Skriptsprache arbeiten, und über Prozessgrenzen hinweg musste man auf rc.fromSUT und rc.toSUT bzw. rc.fromServer und rc.toServer zurückgreifen.

Nach über 20 Jahren ist dieses simple Wertverständnis an seine Grenzen gestoßen und wurde mit QF-Test 9 erweitert: nun ist es möglich, beliebige Objekte in QF-Test Variablen abzuspeichern und so zum Beispiel komplexe Objekte aus einer Prozedur zurückzugeben.

Rückwärtskompatibilität bleibt gesichert

Das Wichtigste zuerst: Wir haben viel Zeit investiert, damit alles weiterhin genauso funktioniert wie bisher. Die Zugriffsmethoden im RunContext geben die gleichen Typen zurück, Werte lassen sich genauso speichern und wenn es kompliziert wird (wenn zum Beispiel ein nicht-serialisierbares oder sehr großes Objekt aus einem SUT-Skript heraus in einer QF-Test Variable ablegen möchte), dann fällt QF-Test auf die bisher verwendete Darstellung als Zeichenkette zurück.

Objektvariablen in Variablentabellen

In QF-Test kann man direkt in den Variablentabellen (zum Beispiel im Optionsdialog oder im Debugger-Fenster) sehen, ob ein Variablenwert eine Zeichenkette ist oder einen anderen Typ hat: Im ersten Fall sieht alles so aus wie bisher, d.h. nur die Zeichenkette erscheint in der Tabelle – im zweiten Fall wird dem Variablenwert in Klammern der Typ des Objekts vorangestellt, z.B. (Boolean) true.

Hier kann über das Kontextmenü auch der Typ einer gespeicherten Variable geändert werden.

Objektvariablen in “Variable setzen”, “Return” und Parameter-Tabellen

Beim “Variable setzen”-Knoten und beim “Return”-Knoten in einer Prozedur kann nun auch der Typ der gesetzten bzw. zurückgegeben Variable festgelegt werden. Dies geschieht zur Laufzeit, das heißt: Beim Ausführen des Knotens wird z.B. die im Knoten als Wert angegebene Zeichenkette in den gewählten Typ umgewandelt.

Genauso kann auch in Parameter-Tabellen, zum Beispiel bei Sequenzen, der Typ des Parameters festgelegt werden – auch hier geschieht die Umwandlung beim Ausführen des Knotens. In der Tabelle erscheint der Wert des Parameters dann wieder mit einem Typ-Hinweis, zum Beispiel: (als Number) 3.141. An dem “als” erkennt man, dass die Konvertierung zur Laufzeit erfolgt.

Eine solche Konvertierung kann auch an allen Stellen, an denen eine Variablen-Expansion erfolgt, mit Hilfe der speziellen Gruppe “as” durchgeführt werden, die Syntax ist dann zum Beispiel ${as:fromjson:[1,2,3,4]}.

Objektvariablen über rc.getObjund rc.vars

Um den Objektwert einer Variable in einem Skript oder Skriptausdruck auszulesen, kann die Methode rc.getObj verwendet werden. Analog zu den bestehenden Methoden wie rc.getStrrc.getNum oder rc.getBool wird hier die Variable (bei einem Parameter) bzw. eine Gruppenvariable (Property, bei zwei Parametern) ausgelesen und ihr Wert – in diesem Fall ohne Konvertierung – zurückgegeben.

Eine Expansion verschachtelter Variablen-Ausdrücke im Wert erfolgt nur dann automatisch, wenn es sich beim Wert um eine Zeichenkette handelt, andernfalls muss man sie über den Parameter expand=true erzwingen.

Eine praktische Abkürzung zum Variablen-Objekt bietet der RunContext nun auch: Statt rc.getObj("variablenname") kann man jetzt auch einfach rc.vars.variablenname schreiben, und rc.groups.qftest.suite.file liefert das File-Objekt der aktuellen Testsuite.

Objektvariablen und $(name)

Wenn man bei Variablen die bekannte $-Schreibweise verwendet, so wird so lange wie möglich der Objektwert der Variable verwendet: hat die Variable durchschnitt zum Beispiel den Wert (Double) 2.3, so würde bei einem “Variable setzen”-Knoten mit Defaultwert $(durchschnitt) die neue Variable ebenfalls den Typ Double haben. Kombiniert man hier aber die Variablen mit weiterem Text, z.B. Mein Schnitt: $(durchschnitt), so wird automatisch die String-Darstellung des Variablenwerts verwendet und die neue Variable wird auch automatisch eine Zeichenkette.

Wie bisher auch kann man in einem If-Knoten also nicht einfach als Prüfausdruck $(name) == "John" schreiben, sondern mit korrekter Syntax "$(name)" == "John" – aber bei Skriptausdrücken sollte ja grundsätzlich auf die $-Notation verzichtet werden, also besser rc.getStr("name") == "John" – oder jetzt rc.vars.name == "John" verwendet werden.

Diverse kleine Neuerungen

Der neue Unterbau ermöglicht es uns auch, lang ersehnte Features in QF-Test 9 zu integrieren: Die Standard-Prozeduren und die spezielle “qftest”-Gruppe geben, wie oben gesehen, ihre Werte jetzt als Objekte zurück.

Auch ist es nun an vielen Stellen über das Kontextmenü möglich, Werte in Variablen zu verstecken und erst zur Laufzeit mit ${decrypt:...} wieder auszuwerten, ohne dass die Werte im Protokoll erscheinen.

Und bei den “Programm-starten”-Knoten kann nun als Parameter auch ein Listen-Objekt übergeben werden, so dass es nun möglich ist, Startknoten mit variabler Parameterzahl einfacher zu realisieren.

Viele Kleinigkeiten also, die aber alle dazu beitragen, das Arbeiten und Testen mit QF-Test noch einfacher zu machen.

Ausblick

Wenn Sie bis hier her durchgehalten haben, so haben Sie auch bemerkt: Das Thema ist komplex und kann hier sicherlich nicht erschöpfend behandelt werden.

Weitere Details werden die Entwicklerinnen und Entwickler hinter QF-Test daher in einem Spezialwebinar zum Thema Objektvariablen erzählen. Und im neu gestalteten QF-Test Handbuch werden die Variablen ebenfalls ausführlich erläutert.

Die Kommentarfunktion ist für diesen Artikel deaktiviert.

0 Kommentare