ABAP Tipp - Aufbau von Testdaten
Welche Herausforderungen hat man beim Aufbau von Testtabellen und Testdaten und wie kann dir die maschinelle Verarbeitung dabei helfen.
Inhaltsverzeichnis
Beim heutigen Tipp geht es um eine leichte Erstellung von Testdaten, eine Migration der Testanwendung in andere Systeme und die schnelle Wiederherstellung der Daten im System. Dabei schauen wir uns die verschiedenen Möglichkeiten einmal genauer im Detail an.
Daten bereitstellen
Du baust gerade eine neue Tabelle auf und möchtest diese direkt mit Daten befüllen? Hierbei gibt es zwei Wege die Daten in die Tabelle zu bekommen:
- Anlage eines Pflegeviews
- Einfügen per Programm
Setzen wir dazu erst einmal eine Tabelle auf. Der einfache und schnelle Weg ist dabei die Anlage über die ABAP Development Tools (ADT), da hier die Tabelle in einfacher Form definiert wird. Im Anschluss sparst du dir die Einstellung der technischen Details und den Absprung in die Erweiterungskategorie. Unsere Testtabelle sieht dabei wie folgt aus:
Pflegeview
Hierbei wird nach dem Erstellen der Tabelle ein Tabellenpflegeview angelegt. Mit diesem kannst du dann neue Datensätze einfügen, bearbeiten und löschen. Dabei wird eine Funktionsgruppe und Pflegebausteine generiert, es werden also relativ viele Objekte benötigt.
- Funktionsgruppe mit Bausteinen
- Dynpros
- Includes mit Events
Programm
Hierbei legst du eine ausführbare Klasse oder einen Report an und übernimmst das Befüllen der Daten auf Knopfdruck. Es wird nur ein einfaches Objekt (Klasse, Report) benötigt. Wie könnte so eine ausführbare Klasse also aussehen?
CLASS zcl_bs_demo_fill_account DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_bs_demo_fill_account IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA:
lt_account TYPE STANDARD TABLE OF zbs_dy_account WITH EMPTY KEY.
lt_account = VALUE #(
( identifier = '1000000010' amount = '12.34' currency = 'EUR' account_active = abap_true )
( identifier = '1000000011' amount = '200.00' currency = 'USD' account_active = abap_true )
( identifier = '1000000012' amount = '55.50' currency = 'EUR' account_active = abap_false )
( identifier = '2000000010' amount = '13.37' currency = 'CHF' account_active = abap_false )
).
DELETE FROM zbs_dy_account.
INSERT zbs_dy_account FROM TABLE @lt_account.
out->write( |Datasets inserted { sy-dbcnt }| ).
COMMIT WORK.
ENDMETHOD.
ENDCLASS.
Hinweis: Damit die Klasse weiterhin ausführbar bleibt, solltest du vorm Einfügen der Daten die Tabelle erst einmal wieder aufräumen. Am Ende den sauberen Commit nicht vergessen.
Vergleich
Beim Vergleich der beiden Varianten ist der Pflegeview am Flexibelsten, du kannst die Einträge direkt anpassen und auf von Excel direkt in die Tabelle kopieren. Einzig negativer Punkt ist die große Anzahl an angelegten Objekten zur Pflege der Tabelle. Möchtest du die objekte in ein anderes System umziehen, ist dies nicht möglich, außer du würdest die Daten nach Excel exportieren. Hier bist du aber von einem automatische Prozess weit enfernt.
- + Flexibel
- - Anzahl Objekte
- - Keine Migration der Daten
Dazu ist das Konstrukt mit ausführbarer Klasse relativ flexibel, da du immer wieder die Daten in der Klasse anpassen kannst. Hier arbeitest du aber immer mit dem vollen Datenpaket, wenn du die Daten änderst. Bei einer Migration der Objekte werden auch Dateninhalte mit verschoben und sind jederzeit im Zielsystem wieder verfügbar.
- - Relativ flexibel
- + Anzahl Objekte
- + Migration der Daten
Verwendung
Du möchtest dem Kollegen schnell mal eine kleine Anwendung zeigen und benötigst dazu Testdaten, dann ist die ausführbare Klasse ein schneller und einfacher Weg Daten zur Verfügung zu stellen und immer wieder anpassen zu können, ohne damit deinen eigentlichen Entwicklungsprozess zu stören. Ebenfalls ist die Anlage von Testdaten ein beliebtes Beispiel, wo man immer wieder mal die Daten anpassen muss, wenn man seine Testfälle anpasst. Wenn du eine übergreifende Anwendung geschrieben hast, dann möchtest du diese vielleicht auch in andere Systeme ausrollen und benötigst dort für deine ABAP Unit Testfälle die entsprechenden Daten.
Die Zahl der Fälle ist groß, bei denen du die Daten immer wieder benötigst. Dabei wird die Pflege über den Pflegeview zwar immer effektiv und die Einfachste bleiben, doch das Ausrollen des Pflegeviews über abapGit zum Beispiel, wird dir mehr Stolpersteine in den Weg legen, als du eigentlich brauchst. Die Deinstallation von solchen Pflegeviews wird aktuell noch nicht sauber unterstützt und am Ende werden dir die Daten zur Pflege fehlen.
Aus diesem Hintergrund heraus empfehlen wir die Verwendung des ausführbaren Objekts, wenn du nicht anderen Anforderungen hast, da es die flexibelste Variante ist beim Transfer von Objekten, die Migration und Bereitstellung von Daten in einem leeren System.
Hinweis: Ein Anlegen von Testdaten wird auch in der Cloud Umgebung (Steampunk) erschwert, da es keine GUI und keinen Tabellenpflegegenerator gibt. Hier ist der einfachste Weg die Anlage über die ausführbare Klasse.
Produktiv
Solche Anlageobjekte solltest du natürlich speziell sichern, damit niemand sie im produktiven System einfach so oder ausversehen ausführen kann. Am Einfachsten ist hier wahrscheinlich die Prüfung der Berechtigungen gegen Debug & Change, da in jedem sauberen Produktivsystem debuggen möglich ist, aber kein Debug & Change. Zumindest solltest du diesen Punkt im Auge behalten, wenn du solche Objekte in Produktion bringst.
Fazit
Wie bekommst du am Einfachsten Testdaten ins System und diese auch weiter ins nächste System übertragen? Hier gibt es verschiedene Ansätze und du solltest je nach Situation entscheiden, was dir am Besten passt.