Aufgabenstellung
Bei einer Einspielung müssen Testdaten in einer bestimmten Datenstruktur in das Testsystemübertragen, meistens wird in einem der Grunddatentypen:
- xml - eine traditionelle Baumstruktur
- html - was auch einem xml entspricht, nur mit vordefinierten Tags
- json - ebenfalls in einer Baumstruktur
- csv - Daten in Tabellenform
Lösungsidee
Es wird ein Mapping auf das Zielformat definiert und dieser Verarbeitungsschritt wird in den technischen Ablauf konfiguriert. Wie die strukturierten Daten übertragen werden, ob mittels Datenstrom oder mittels einer abgelegten Eingabedatei, ist Aufgabe der >> Link:Datenübertragung >>.
Einbettung in Testautomation
Da es sich bei der Dateneinspielung um eine technische Schnittstelle handelt, ist es eine im wesentlichen ein Automatisierungsaufgabe und wird daher in der Konfiguration der Automatsierungskomponente vorgenommen.
Der genaue technische Durchführungsablauf wird in der Konfiguration definiert, für Testspezifikation wird ein Übergabeverfahren als Referenz mitgeteilt, z.B. "REST-synchron".
Mapping
Als Grundlage für die Mapping-Konfiguration wird eine Beispiel verwendet. Dieses wird in beispielsweise eine Yaml-Datei transformiert, um diese anschließend besser zu bearbeiten und in Komponentenverzeichnis gespeichert. Der Dateiname sollte dem Namensschema "mapping-{format}.yml" entsprechen.
In der Beispieldatei gibt es anfangs Einzelwerte, die durch dynamisch durch Testdaten zu ersetzen sind. Dazu muss jeder Einzelwert durch eine Referenz auf die Testdaten der unterschiedlichen Scopes ersetzt werden. Die verschiedenen Scope werden mit ihren jeweiligen Schlüsselwörtern und ihrer Pfadstruktur ersetzt:
Datenherkunft | ||
Testfall-Spezifikation | {_data.tabelle.feld(referenz)} {_row.feld} |
|
Wertelisten | {_catalog.domäne.wert} | |
Ablaufinformation | {_steps.feld[.argument]} | |
Parameter | {_par.parameter} | |
Umgebungswert | {_env.paramter} | |
Generierter Wert |
{_gen.funktion(argumente)} |
Ermitteln der Datenzeile
Es werden eine oder mehrere Datensätze/-zeilen übertragen. Hierzu gibt es in der Baumstruktur multiple Knoten, unter denen die jeweiligen Objektdaten eingetragen werden, z.B. "<messages><message><feld>wert</feld>..</message></messages>".
Eine Voraussetzung ist, dass in der Komponenten-Konfiguration das Datenobjekt wie eine Tabelle konfiguriert ist. Optimalerweise wird ja derselbe Objektname verwendet wie für andere Komponenten auch, beispielsweise "person". Die betreffende Tabellenkonfiguration kann aus einer anderen Komponente kopiert und angepasst werden. Das hat den Vorteil, dass die Personendaten über die Komponenten hinweg miteinander vergleichbar sind (>> Link.Prestep-Auswertung >>).
Für die Referenzierung der jeweiligen Datenzeilen werden die entsprechende Automatisierungsschlüsselwörter eingefügt:
Beispiel | Beschreibung | ||
_foreach | msgid={_steps.refnr} | In der Spezifikation ist im Referenzfeld (_id) angegeben, welche Datenzeilen eingespielt werden. Mit "{_steps.refnr}" wird eine Liste der Referenznummern ermittelt, über die iteriert werden kann Die jeweils aktuelle ID wird in das Feld "msgid" gespeichert, so dass später hierauf referenziert werden kann. |
|
_id | id={msgid,posid} | In einer Untertabelle besteht die ID aus mehreren IDs, was hier dargestellt ist. Mit der ID kann eine bestimmtes Feld oder bestimmte Datenzeile gelesen werden. |
|
_row | {_data.tabelle(msgid)} {_data.tabelle(_id)} |
Die gelesene Datenzeile kann als internes temporäres Objekt für die anschließenden Feld-Mappings verwendet werden, um nicht für jedes Feld die Tabelle zu lesen. |
Ermitteln der Feldwertes
Wenn die Datenzeile einmal
Konfiguration
Zur Komponente müssen für das Mapping folgende Daten konfiguriert werden.
Objekte in Tabellendefinitionen
Für alle verwendeten Objekte müssen die Daten konfiguriert werden.
Mapping
Das Mapping der daten wie oben beschreiben.
Ablaufschritt in CONFIG-Datei
In der Konfigurationsdatei werden die technischen Schritt für Erzeugung und Versenden der Daten konfiguriert.
Für die Erzeugung der Einspieldatei sind folgende Argumente erforderlich:
tool | file | Grundtechnik für die Einspielung. Alternativen: db: für direkte inserts - automatisch in der Initialisierung cli: Befehl über die Kommandozeile - betrifft das Übertragen api: z.B. Rest-Aufrufe - betrifft das Übertragen |
type | xml | Dateiformat Alternativen: json, csv, yml |
fct | create | Funktionsbeschreibung, dass die Datei erzeugt wird |
mapping | Dateiname der oben angelegten Mappingdatei |
Alternativ könnte eine vorhandene Einspieldatei genutzt werden, bei der ggf. nur Datumswerte aktualisiert werden. Das hätte jedoch den Nachteil, dass Änderungen in der Testfall-Spezifikation sich dadurch nicht auswirken.
Alternativ können die jeweiligen Verarbeitungsschritte in der Komponentenklasse selbst implementiert werden.