zurück
Avatar of Ute Erler
Autor: Ute Erler
08. Oktober 2019

Excel-Dateien lesen und schreiben mit QF-Test

Wenn Sie in Ihrem Testfall Daten aus einer Excel Datei  verwenden wollen oder Testergebnisse in eine Excel Datei schreiben wollen, sind Sie bei diesem Artikel richtig.

Beispiele finden Sie in der angefügten Datei, QFSExcel.qft, die Daten aus der Excel-Datei "Data.xlsx" einliest. Kopieren Sie die beiden Dateien in das gleiche Verzeichnis und öffnen Sie QFSExcel.qft mit QF-Test um die Beispiele auszuführen.

Excel Daten lesen

1. Der Datentreiber-Knoten

Am einfachsten lassen sich Excel Daten über den 'Datentreiber' Knoten einlesen. Eine Excel Datei enthält eine bestimmte Anzahl Datensätze (ein Satz pro Zeile oder wahlweise pro Spalte). Der Datentreiber liest alle Datensätze ein und generiert so viele Schleifendurchläufte wie es Datensätze gibt. In jeder Schleife werden alle Testfälle im Testfallsatz, der den Datentreiber enthält, ausgeführt.

Als Ergebnis wird jeder Testfall einmal für jeden Datensatz ausgeführt.

'Datentreiber' Knoten können in 'Testfallsatz' und 'Testschritt' Knoten verwendet werden.

2. Der ‘Excel Datei’ Knoten allein

Wenn Sie die Excel Daten in einer anderen Art und Weise nutzen wollen, können Sie den 'Excel Datei' Knoten auch ohne Datentreiber verwenden. Damit werden die Daten in eine Gruppenvariable eingelesen.

In obigem Beispiel werden die Excel Daten in die Gruppenvariable "data" eingelesen.

Mit der Prozedur "listAllMembersOfPropertyGroup" aus dem Package qfs.utils.variables der QF-Test Standardprozedurbibliothek qfs.qft können Sie alle Variablen aus der Gruppe anzeigen lassen.

Die Syntax um eine einzelne Variable in einer Gruppe anzusprechen ist ${Gruppenname:Variable}. Die Variablensyntax um eine Excel Zelle anzusprechen ist "Spaltenname.Index", bzw. "Zeilenname.Index". Für eine Zelle wäre also die komplette Syntax  ${Gruppenname:Spaltenname.Index}, wenn die Datensätze in Zeilen vorliegen.

Die Namen müssen in der ersten Zeile bzw. Spalte des Datenblattes angegeben werden. Die Indexzählung beginnt in der folgenden Zeile bzw. Spalte. Alle Indizes beginnen mit Null.

Somit würde man die Zelle B4 über die Variable ${data:Test-case.2} referenzieren, mit "data’ als Gruppenname.

Der "Excel Datei" Knoten legt noch zwei weitere Variablen an, die die Anzahl der eingelesenen Datensätze, ${Gruppenname:size}, und die Gesamtzahl eingelesener Zeilen bzw. Spalten, ${Gruppenname:totalsize},  angeben. Die beiden Werten weichen nur voneinander ab, wenn es Leerzeilen bzw. -spalten zwischen den Datensätzen gibt.
Siehe Handbuch 'Excel Datei'.

Excel Dateien schreiben

1. Die Prozeduren im Beispiel

Im dritten Beispiel der beigefügten Testsuite wird eine bestehende Excel Datei in eine neue kopiert und ein Ergebnis in die Datensätze geschrieben.

Die Prozedur "createWorkBookFromFile" liest die bestehende Excel Datei über das Excel API in eine Jython Variable ein. Die nächste Prozedur weist das Excel Blatt einer weiteren globalen Jython Variable zu. Eine Prozedur zeigt wie man das Excel API verwenden kann, um einzelne Zellen auszulesen, eine weitere wie man einen Wert in eine Zelle schreibt. Die letzte Prozedur schreibt die Daten in eine neue Excel Datei. Alle Prozeduren verwenden globale Jython Variablen um die komplexen Datenstrukturen wie das Excel Work book und das Datenblatt von einer Prozedur zur anderen zu übergeben.

2. Skripting Beispiel zum API

Ich habe das Excel API von Apache verwendet. Dies enthält noch sehr viel mehr Methoden. Also einfach das vorliegende Beispiel nehmen und nach Bedarf erweitern. Hilfreich fand ich die Seite poi.apache.org/spreadsheet/quick-guide. Die API Methoden können in QF-Test Server Skripten verwendet werden.

Erläuterung des Skripts in der ersten Prozedur:

In Zeilen 1 und 2 werden die benötigten Module des Excel API (org.apache.poi.ss.usermodel) und der Dateiverwaltung (java.io) eingelesen.

In Zeile 4 wird "wrkbook" als globale Jython Variable definiert. Somit kann die Variable "wrkbook" auch in anderen Jython Skripten genutzt werden.

In Zeile 6 wird der übergebene Parameter "file"der Jython Variablen "filename" zugewiesen. Dies geschieht über die Methode "lookup" des QF-Test Moduls "rc".

In Zeilen 7 bis 10 wird die Excel Datei eingelesen. Falls sie nicht existiert, wird eine Exception geworfen.

In Zeile 12 wird das Excel Work book unter Verwendung einer Excel API Methode der Variablen "wrkbook" zugewiesen.

In Zeile 14 wird die Datei über die Java Methode "close" geschlossen.

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

2 Kommentare

Karlheinz

09. März 2022

Hallo QF-Test Benutzer,

 

danke für die Frage!

Das beschriebene Verhalten sollte sich recht einfach realisieren lassen. Man sucht mit einer Schleife in der ersten Spalte nach dem gewünschten Zelleninhalt. Wird dieser gefunden, benutzt man den aktuellen Zeilenindex, um auf die zweite Spalte zuzugreifen.

In QF-Test sollte man das mit der folgenden angedeuteten Knotenstruktur abbilden können:

 

Schleife [ Anzahl Wiederholungen: ${data:size}, Zählervariable: i ]

    if [ Bedingung: "${data:Number.$(i)}" == "1a" ]

        Variable setzen [ Variablenname: meinWert, Defaultwert: ${data:Test-case.$(i)} ]

        Break

 

"data" ist wie unter 2. der Gruppenname. Der Wert der Zählervariable wird mittels $(i) genutzt.

Sollte es weitere Detailfragen dazu geben, schlage ich vor, dies über support@qfs.de zu tun.

 

Schöne Grüße


QF-Test Benutzer

09. März 2022

Guten Tag,

 

ich habe eine Frage zu Punkt 2 ("Daten lesen"). Dort wird nämlich ein Variablenwert über die Zeilenangabe referenziert. Ist es aber möglich, einen Wert aus der Spalte B neben einem Wert aus der Spalte A zu referenzieren? In Excel heißt diese Funktion "SVERWEIS". D.h. in Ihrem Beispiel, dass man, anstatt eine Zeile, z.B. den Wert "Number.1a" eingeben würde und QF-Test einen entsprechenden Wert aus der Spalte B ermitteln.

 

Danke.

 

Mit freundlichen Grüßen,