Automatyczne testowanie (IT)Starszy Inżynier Automatyzacji QA

Jak zaprojektowałbyś zautomatyzowaną ramę testową do walidacji end-to-end procesów biznesowych w przestarzałych systemach ERP, które nie mają nowoczesnych interfejsów API, wymagają stanowych interakcji GUI na modułowych ekranach i wymagają weryfikacji stanu bazy danych w czasie rzeczywistym, jednocześnie zapewniając izolację testów w współdzielonych środowiskach piaskownicowych?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź na pytanie

Historia pytania

Przestarzałe systemy ERP, takie jak SAP ECC i Oracle E-Business Suite, wciąż wspierają krytyczne operacje biznesowe w firmach z listy Fortune 500, jednak te monolityczne architektury precedują nowoczesne wzorce projektowe oparte na API o kilka dziesięcioleci. Pytanie powstało organicznie, gdy przedsiębiorstwa próbowały zastosować strategie transformacji DevOps w środowiskach brownfield, które opierają się na konteneryzacji i rozkładzie na mikrousługi. Tradycyjne podejścia do automatyzacji zawodzą, ponieważ te systemy ściśle łączą logikę prezentacji z zasadami biznesowymi w proprietarnych bazach kodu ABAP lub PL/SQL. Organizacje odkryły, że proste zastosowanie automatyzacji webowej opartej na Selenium do grubo-klientowych interfejsów SAPGUI skutkuje katastrofalnym obciążeniem konserwacyjnym i fałszywymi pozytywnymi wynikami.

Problem

Podstawowy problem tkwi w niezgodności, ponieważ systemy ERP polegają na stanowych frameworkach GUI z intensywnym zarządzaniem sesjami po stronie klienta i brakiem otwartych interfejsów REST. Bezpośrednie asercje w bazie danych ryzykują naruszenie reguł biznesowych aplikacji zakodowanych w tysiącach linii starych kodów triggerów, tworząc fałszywe negatywy w wynikach testów. Współdzielone środowiska piaskownicowe potęgują te trudności, ponieważ transakcje ABAP często wykorzystują autonomiczne zatwierdzenia, które omijają mechanizmy wycofywania na poziomie bazy danych, uniemożliwiając izolację testów za pomocą standardowych utrwalaczy transakcji. Ponadto, weryfikacja w czasie rzeczywistym wymaga wykrywania zmian stanu, które mogą opóźniać się za potwierdzeniami UI z powodu asynchronicznych kolejek przetwarzania RFC (Remote Function Call) lub harmonogramów nocnych zadań batch.

Rozwiązanie

Zaimplementuj Hybrydową Architekturę Automatyzacji, która łączy automatyzację ekranów w stylu RPA z walidacją bazy danych napędzaną zdarzeniami za pomocą mechanizmów Change Data Capture (CDC). Wdrażaj narzędzia Data Virtualization takie jak Delphix lub Redgate SQL Clone, aby przygotować izolowane, pisywalne podzbiory bazy danych dla każdego równoległego wątku testowego bez duplikowania całych środowisk o wielkości terabajtów. Wykorzystaj dedykowane adaptery automatyzacji, takie jak SAP CBTA lub opakowania SapShell wokół Selenium, aby obsługiwać dynamiczne identyfikatory kontrolne Dynpro bez kruchych lokalizatorów XPath. Ustanów Event Bus używając Apache Kafka do odbierania SAP Change Pointers lub dzienników transakcji bazy danych, umożliwiając asynchroniczne asercje, które eliminują opóźnienia spowodowane pollingiem, jednocześnie weryfikując zarówno spójność stanu UI, jak i bazy danych.

Sytuacja z życia

Globalny konglomerat produkcyjny wymagał automatyzacji ich procesu Procure-to-Pay, obejmującego moduły SAP ECC 6.0 do zakupu wniosków, zatwierdzania dostawców, odbioru towarów i weryfikacji faktur. Docelowe środowisko to współdzielona instancja SANDBOX, wykorzystywana jednocześnie przez testerów manualnych, harmonogramy zadań batch oraz dwanaście równoległych strumieni automatyzacji w różnych zespołach geograficznych. Przepływ pracy obejmował złożone przejścia stanowe, gdzie utworzenie zamówienia zakupu wyzwalało kontrole limitów kredytowych za pomocą wywołań RFC do oddzielnego systemu SAP BW, a następnie aktualizacje zapasów w trybie asynchronicznym.

Testy wykazywały skrajny niestabilność z powodu konkurencji w bazie danych - automatyzacja stworzyła zamówienie zakupu z identyfikatorem 450001, ale zanim asercja została wykonana, konkurencyjny test zmodyfikował te same dane dotyczące dostawcy lub wykorzystał dostępny budżet w centrum kosztowym. Ekrany SAPGUI wykorzystywały dynamicznie generowane identyfikatory kontrolne w oparciu o kolejności ekranów ABAP w czasie wykonywania, co powodowało łamanie standardowych lokalizatorów Selenium przy każdej drobnej zmianie konfiguracji w rozwijaniu. Dodatkowo, kluczowe walidacje biznesowe kończyły się dopiero po przetworzeniu nocnych zadań batch ABAP, co czyniło niemożliwym uzyskanie informacji zwrotnych w tym samym dniu z prostych podejść sterowanych UI.

Czysta Automatyzacja UI z Przedłużonymi Czasami Oczekiwania była pierwszym rozważanym rozwiązaniem. Ta strategia polegała wyłącznie na SAP CBTA z wyraźnymi punktami synchronizacji i agresywnymi pętlami pollingowymi do wykrywania zmian stanu UI. Plusy obejmowały minimalne obciążenie infrastruktury oraz zgodność z oficjalnie wspieranymi narzędziami automatyzacji SAP, nie wymagając dodatkowych licencji poza standardowymi modułami testowymi. Minusy obejmowały czas wykonania wzrastający do ponad 50 minut na przypadek testowy z powodu stałych interwałów pollingowych, całkowitą niemożność weryfikacji, czy przetwarzanie backendowych IDoc (Dokument Pośredni) powiodło się, oraz trwałe fałszywe pozytywy, gdy zlecenia batch opóźniały się nieprzewidywalnie ponad maksymalne progi oczekiwania.

Bezpośrednia Manipulacja Bazą Danych była drugą alternatywą. To podejście całkowicie omijało UI dla asercji, używając połączeń JDBC do weryfikacji wpisów w tabelach EKKO (Nagłówek Dokumentu Zakupu) i EKPO (Pozycja Dokumentu Zakupu) natychmiast po działaniach GUI. Plusy obejmowały walidację w czasie poniżej sekundy oraz teoretyczną odporność na zmiany renderowania frontendowego, pozwalając testom działać bez instalacji klienta SAPGUI. Minusy obejmowały koszmary związane z konserwacją, gdy logika walidacji ABAP się zmieniała, ale zapytania SQL nie były aktualizowane, wysokie ryzyko testowania szczegółów implementacji zamiast procesów biznesowych widocznych dla użytkownika, oraz naruszenie ograniczeń integralności danych, gdy bezpośrednie aktualizacje omijały sprawdzanie uprawnień na poziomie aplikacji.

Hybrydowa Architektura z Wirtualnymi Danymi Testowymi była trzecią opcją wprowadzoną. Rozwiązanie wykorzystywało SAP TDMS (Test Data Migration Server), aby wyodrębnić izolowane kieszenie danych specyficzne dla klientów w ramach współdzielonej piaskownicy, przypisując unikalne kody firmowe do każdego wątku automatyzacji. Użyliśmy Selenium z opakowaniami automatyzacyjnymi SapShell do interakcji z UI, połączonymi z nasłuchiwaczami Kafka, monitorującymi tabele CDPOS (Change Document Items) w celu uzyskania powiadomień o zmianach stanu w czasie rzeczywistym za pomocą CDC. Plusy obejmowały prawdziwe równoległe wykonywanie bez krzyżowego zanieczyszczenia, 80% szybszą walidację poprzez asercje oparte na zdarzeniach w porównaniu do polling, oraz odporność na zmiany lokalizatorów UI dzięki narzędziom do rozpoznawania obiektów opartym na AI, takim jak TestPlant czy silnik AI Micro Focus UFT. Minusy wymagały znacznych inwestycji na wstępie w konfigurację TDMS oraz skomplikowanej logiki orkiestracji danych_testowych do zarządzania starzejącymi się danymi i cyklami ich odświeżania.

Hybrydowa Architektura została wybrana, ponieważ radziła sobie z przyczyną źródłową — izolacją danych testowych — zamiast jedynie maskować objawy poprzez dostosowania czasowe. Chociaż początkowa konfiguracja wymagała trzech tygodni współpracy administratora Basis w celu skonfigurowania kawałków TDMS, umożliwiła prawdziwą integrację CI/CD dla systemu przestarzałego i skróciła czas oczekiwania na feedback z trzech dni do mniej niż dwóch godzin. Podejście to zapewniło deterministyczne gwarancje wykonania, których czysta automatyzacja interfejsu UI nie mogła zaoferować, jednocześnie utrzymując perspektywę walidacji skoncentrowaną na użytkowniku, którą straciły bezpośrednie zapytania do bazy danych.

Obecnie ramy wspierają ponad 250 równoległych wykonawców testowych dziennie w ośmiu regionalnych zespołach bez incydentów krzyżowego zanieczyszczenia. Niestabilność testów spadła z 42% do 1,8%, a czas wykonania krytycznej ścieżki Order-to-Cash skrócił się z 6 godzin do 28 minut. Architektura stała się normą przedsiębiorstwa dla automatyzacji innych przestarzałych modułów, udowadniając, że systemy z epoki mainframe mogą osiągnąć nowoczesną prędkość automatyzacji bez ryzykownych strategii modernizacji polegających na wymianie.

Co często umyka kandydatom

Jak utrzymujesz izolację testów w systemach SAP, które wykorzystują autonomiczne zatwierdzenia w kodzie ABAP, uniemożliwiając standardowe wycofywanie transakcji bazy danych między testami?

Kandydaci często sugerują opakowywanie testów w transakcje bazy danych, ale polecenie ABAP COMMIT WORK wykonuje autonomiczne zatwierdzenia, które ignorują granice transakcji JDBC. Prawidłowe podejście wdraża Izolację Logiczną Najemców poprzez rezerwowanie specyficznych struktur organizacyjnych — takich jak kody firmowe, identyfikatory zakładów czy organizacje zakupowe — wyłącznie dla pipeline'ów automatyzacji. Połącz to z strategiami Izolacji Czasowej, gdzie automatyzacja tworzy dokumenty biznesowe datowane o sześć miesięcy w przyszłość, zapewniając, że pozostają niewidoczne dla testerów manualnych oraz zadań batch przetwarzających transakcje z bieżącą datą. Do sprzątania używaj wywołań BAPI (Business Application Programming Interface), takich jak BAPI_PO_DELETE, zamiast bezpośrednich usunięć SQL, aby szanować integralność referencyjną aplikacji oraz sprawdzania uprawnień.

Jaka technika zapobiega awariom automatyzacji SAPGUI, gdy SAP Message Server dynamicznie przekierowuje połączenia do różnych serwerów aplikacyjnych w zrównoważonym środowisku obciążeniowym?

Wielu kandydatów proponuje konfigurowanie „sticky sessions” na poziomie load balancera, ale wymaga to uprawnień administracyjnych w sieci, które rzadko są przyznawane zespołom QA w infrastrukturze przedsiębiorstw. Odpowiednie rozwiązanie polega na uchwyceniu konkretnego numeru instancji serwera aplikacji z łańcucha połączeń SAPGUI bezpośrednio po logowaniu, a następnie kierowaniu wszystkich następnych kroków automatyzacji do tej konkretnej instancji za pomocą wyraźnych łańcuchów SAP Router. Wdrażaj Rejestr Czułości Sesji w kontekście testu, który mapuje identyfikatory wątków do konkretnych instancji serwera, wykorzystując funkcję modułu TH_SERVER_LIST SAP do proaktywnej identyfikacji dostępnych węzłów. To gwarantuje, że stanowe zmienne sesji ABAP przetrwają przez wiele przejść ekranowych bez potrzeby wprowadzania zmian w infrastrukturze lub dezaktywowania równoważenia obciążenia.

Jak zsynchronizować automatyzację z zakończeniem asynchronicznych zadań batch SAP bez uciekania się do kruchych metod ekranowych w transakcji SM37?

Większość kandydatów sugeruje polling ekranu Job Overview lub implementację stałych opóźnień, co wprowadza kruchość i nieprzewidywalne czasy wykonania. Zaawansowane rozwiązanie wykorzystuje interfejs XBP (External Batch Processing) SAP poprzez połączenia RFC (Remote Function Call), co pozwala automatyzacji na wywołanie BP_JOB_STATUS_GET programowo. Poniżej znajduje się implementacja Python z użyciem PyRFC:

from pyrfc import Connection def wait_for_batch_job(conn, job_name, timeout=300): """Czekaj na zakończenie zadania wsadowego **SAP** w trybie zdarzeniowym""" import time start = time.time() while time.time() - start < timeout: result = conn.call('BP_JOB_STATUS_GET', JOBNAME=job_name, EXTERNAL_USER_NAME='AUTOMATION_USER') status = result['STATUS'] if status == 'F': # Zakończone return True elif status == 'A': # Anulowane raise Exception(f"Zadanie {job_name} anulowane") time.sleep(2) # Krótkie polowanie, ale mogłoby zostać zastąpione webhookiem return False

To oddziela weryfikację od czasu GUI, redukując obciążenie synchronizacji z minut do milisekund, gdy połączone z webhookami SAP do Event Mesh, a także zapewniając strukturalne możliwości analizy logów zadań dla deterministycznej analizy błędów poprzez dodatkowe wywołania RFC, takie jak BP_JOBLOG_READ.