5. April 2018 in code IT

ABAP Debugger Erweiterung

oder wie man die Testdatenerstellung beschleunigen kann

von Alexander Geppart

In unserer neuen Rubrik <code> IT möchten wir euch heute zwei Open Source Helfer zum Erstellen von Testdaten für ABAP Unit Tests vorstellen. Denn unabhängig davon, ob wir den Test First oder der Test Last Ansatz nutzen, müssen die Testdaten für Unittests aufbereitet werden. Dieser Prozess kann abhängig von den Testdaten sehr zeitintensiv sein. Genau aus diesem Grund haben wir zwei ABAP Debugger Erweiterungen geschrieben, die dieses Problem lösen sollen.

Stellt euch nur einmal vor die Signatur der zu testenden Methode hätte einen obligatorischen Importing-Parameter für eine Tabelle von Flügen. Diese Tabelle muss n Zeilen enthalten um einen Fehler im Coding zu reproduzieren. Aktuell wären wir gezwungen jede Zeile und jede Feld-Wert Kombination dieser Tabelle manuell aufzubereiten, um dies zu erhalten:

lt_flights = VALUE #(
( carrid = 'AA' fldate = '20170208' price = '422.94' currency = 'USD' )
( carrid = 'LH' fldate = '20170307' price = '431.94' currency = 'USD' )
...

Oftmals können die Testdaten zwar bereits beim ersten Debuggen eines Fehlers im Debugger angesehen werden. Jedoch wäre es deutlich hilfreicher eine Möglichkeit zu nutzen, die diese Daten aus dem Debugger in einer ABAP Coding freundlichen Art und Weise exportieren kann.

Features

Die erste Erweiterung, die wir euch vorstellen möchten, ist für den Tabellenexport. Die Zweite für den Strukturdatenexport, da beide Prozesse ohne eine Erweiterung extrem zeitaufwendig sein können.

Tabellendaten Export

In diesem Schritt zeige ich euch, wie ihr die Daten einer internen Tabelle ganz einfach aus dem Debugger exportieren könnt. Dafür müsst ihr bei internen Tabellen zuerst im Debugger in die Ansicht „Tabellen“ wechseln. Im nächsten Schritt wechselt ihr dann in die ALV Ansicht. Dort findet ihr nun den Knopf „Data for ABAP View“:

Durch den Klick darauf öffnet sich ein Popup, welches die Umbruchstelle für die generierten Daten abfragt:

Anschließend werden die Daten der internen Tabelle entsprechend eurer Angaben aufbereitet angezeigt. Diese Daten könnt ihr nun per „Copy and Paste“ ganz einfach verwenden:

Strukturdaten Export

Im zweiten Schritt geht es um den Strukturdaten Export. Dafür müsst ihr euch im Debugger die Struktur anzeigen lassen. Klickt einfach auf den Reiter „Strukturen“. Dort kommt ihr nun mit einem weiteren Klick auf „Toolservices“, wie im folgenden Bild rot markiert, wieder zu der Option „Data for ABAP View“.

Von diesem Schritt geht es, wie bereits bei der ersten Erweiterung beschrieben, weiter. Durch den Klick auf „Data for ABAP View“ öffnet sich auch hier wieder ein Popup, welches die Umbruchstelle für die generierten Daten abfragt. Anschließend werden die Daten entsprechend eurer Angaben aufbereitet angezeigt und können per Copy and Paste verwendet werden.

Implementierungsdetails

Wir haben versucht den Debugger durch einen leichtgewichtigen Weg entsprechend zu erweitern. Leichtgewichtig bedeutet in diesem Fall, das Ziel ohne Modifikation sowie Copy&Pasting von Funktionsgruppen zu erreichen. Leider konnten wir keinen passenden UserExit im SAP Coding des Debuggers finden. Aus diesem Grund entschieden wir uns dafür das Enhancement Framework und dessen implizite Erweiterungsmöglichkeiten zu verwenden.

Im Coding unserer Lösung findet ihr die zwei besprochenen Erweiterungen für Tabellendaten (Erweiterung zenh_table_values) und Strukturdaten (Erweiterung z_struc_v_build_services_menue). Passend zu den beiden Erweiterungen ist jeweils eine ABAP Klasse für Tabellendaten (Klasse ZCL_DEBUG_DATA_VIEW_TABLE_ENH) und Strukturdaten (Klasse ZCL_DEBUG_DATA_VIEW_STRUC_ENH) vorhanden.

Weiterhin gibt es dort auch einen ABAP Report Z_DEBUGGER_DATA_VIEW_EXT_DEMO mit dem ihr die beschriebene Funktionalität leicht testen könnt. Dazu müsst ihr lediglich im Report zwei Breakpoints platzieren und den Report laufen lassen. Die aktuelle Lösung basiert stark auf den Klassen CL_DEMO_OUTPUT und CL_DEMO_INPUT. Diese beiden Klassen sind von SAP als „Nur für Demonstrationszwecke“ markiert und sollte nicht in produktiven Systemen eingesetzt werden.Da die Tests in Entwicklungsumgebungen geschrieben und maximal in Testumgebungen laufen gelassen werden, sind auch keine produktiven Systeme davon betroffen.
Wir planen darüber hinaus euch auch eine eigene ABAP Dynpros anzubieten, um die Funktionalität von CL_DEMO_OUTPUT und CL_DEMO_INPUT bereitzustellen.

Voraussetzungen

Die Lösung basiert auf dem neuen VALUE Operator. Aus diesem Grund wird mindestens die ABAP Version 7.40 benötigt. Der Demo ABAP Report verwendet die DB Tabelle SFLIGHT um die Daten zu selektieren. Wenn diese Tabelle im System nicht befüllt wird, kann der Report auch nicht zu Demo Zwecken verwendet werden. In diesem Fall kann die Funktionalität mit jedem ähnlichen Vorgehen getestet werden.

Installation

Das gesamte Coding findet ihr hier.
Um es in eurem System zu importieren, sollte abapGit verwendet werden.
Pull Requests und Issues in GitHub sind willkommen.

Mögliche Erweiterungen der aktuellen Lösung

– SUPPORT für ältere ABAP Versionen
– UI – positive Liste für Felder die gemappt/angezeigt werden sollen
– UI – negative Liste für Felder die ignoriert werden sollen (z.B. Mandant)
– Ersetzen von CL_DEMO_OUTPUT
– Eclipse Plugin mit ähnlicher Funktionalität

Zurück zur Übersicht