Automatyzacja testów w projektach low-code przestała być elementem odkładanym na późniejszy etap realizacji. W organizacjach rozwijających procesy biznesowe jest dziś naturalnym elementem cyklu wytwórczego. Platformy low-code pozwalają bardzo szybko budować formularze, ścieżki decyzyjne, integracje i całe procesy operacyjne. Jednak im szybciej system się zmienia, tym większe ryzyko regresji.
Wiele zespołów przechodzi podobną drogę: zaczynają od kilku testów regresyjnych, później pojawiają się kolejne scenariusze, aż w pewnym momencie automatyzacja zamiast pomagać — zaczyna spowalniać. Testy są niestabilne, wymagają ciągłych poprawek, a każda zmiana formularza powoduje lawinę awarii.
Wbrew pozorom problem rzadko leży w narzędziu testowym. Znacznie częściej jego źródłem jest źle zaprojektowana struktura repozytorium testów.
Choć w artykule przywołuję przykłady z platformy Ferryt, opisane zasady mają zastosowanie praktycznie do każdej platformy low-code.
Low-code nie eliminuje złożoności biznesowej
Platformy low-code przyspieszają tworzenie aplikacji, ale nie upraszczają samego biznesu. Logika procesów pozostaje tak samo złożona, a często wręcz staje się bardziej dynamiczna, bo łatwość wprowadzania zmian zachęca do ich częstego wdrażania.
Low-code:
- nie upraszcza logiki biznesowej,
- nie zmniejsza liczby scenariuszy brzegowych,
- nie redukuje ryzyka regresji.
Wręcz przeciwnie. Szybkie iteracje, częste zmiany na formularzach i co za tym idzie na procesach (co w Ferryt jest codziennością) sprawiają, że testy automatyczne muszą być wyjątkowo odporne na zmiany. To właśnie struktura repozytorium decyduje, czy testy będą stabilnym wsparciem, czy obciążeniem dla zespołu projektowego.
Struktura repozytorium jako decyzja architektoniczna
Repozytorium testów jest często postrzegane jako kwestia czysto techniczna, marginalizowana w kontekście priorytetów biznesowych i pozostawiana do doprecyzowania na późniejszych etapach projektu. W praktyce jest to decyzja architektoniczna o długofalowych konsekwencjach.
Repozytorium testów nie powinno być:
- prostym odzwierciedleniem frameworka,
- zbiorem przypadkowych plików,
- „koszem” na scenariusze regresji.
W doświadczonych zespołach jest to element architektury systemu, który odpowiada na pytania:
- Jak testy odwzorowują procesy i scenariusze biznesowe?
- Co się stanie z testami, gdy zmieni się warstwa UI Ferryt?
- Czy repozytorium będzie czytelne za rok, dla kogoś nowego w projekcie?
Dobrze zaprojektowana struktura sprawia, że repozytorium staje się mapą systemu i niepodważalnym przewodnikiem po logice biznesowej. Nowa osoba w projekcie powinna być w stanie, przeglądając katalogi, zrozumieć, jakie procesy istnieją i które z nich są objęte automatyzacją.

Przykłady nieoptymalnych struktur repozytorium
Struktura oparta o ekrany i formularze

Na pierwszy rzut oka wygląda logicznie. Testy pogrupowane są według elementów systemu: logowanie, formularze, workflow. Problem pojawia się w momencie, gdy system zaczyna rosnąć. Dlaczego więc to nie działa w Ferryt (i innych low-code)?
- Testy są powiązane z aktualnym UI.
- Zmiana formularza powoduje masowe awarie.
- Nie wiadomo, jakie procesy biznesowe są faktycznie testowane.
Weźmy np. formTests z powyższego przykładu. I wyobraźmy sobie, że dołączamy do projektu złożonego w swojej logice biznesowej, jak np. procesy związane z kredytami hipotecznymi. Sam wniosek i jedna przykładowa ścieżka ma wówczas często kilkanaście etapów-ekranów. Każdy z nich często ogromną ilość zmiennych, od których np. zależy wiele ukrytych regionów z polami lub/i nawet ukrytych ekranów, które w zależności od ścieżki pojawiają się lub nie.
Dołączając do takiego projektu, na jakimś już zaawansowanym etapie widzimy w repozytorium folder formTests z plikami testFormA.test, testFormB.test – co nam mówią te pliki ? W zasadzie nie wiemy dalej, jakie ścieżki i jakie założenia biznesowe są w ich ramach testowane. Odnalezienie w takiej strukturze czegokolwiek określonego dla danej ścieżki zamienia się w test eksploracyjny repozytorium – bez scenariusza i bez celu.
Struktura „frameworkowa„

Taki podział:
- wygląda poprawnie technicznie,
- ale nie oddaje logiki biznesowej systemu,
- utrudnia ocenę pokrycia procesów testami.
Wejście do takiego repozytorium nie daje realnej wiedzy o tym, co właściwie jest testowane. Foldery ui, api czy smoke opisują jedynie rodzaj testów, a nie procesy ani scenariusze biznesowe, które stoją za aplikacją. Nie jesteśmy w stanie szybko ocenić, czy kluczowe ścieżki systemu są objęte testami, ani gdzie szukać testów dla konkretnego procesu. W efekcie repozytorium wygląda poprawnie z technicznego punktu widzenia, ale nie pełni swojej podstawowej roli – nie mówi nam nic o jakości i pokryciu systemu testami.
Sprawdzona struktura repozytorium
Repozytorium zorientowane na procesy biznesowe

Folder ui_mapping pełni rolę podobną do wzorca Page Object (często nazywanego po prostu „page”) i można go tak również nazwać — to warstwa nad testami, która grupuje wszystkie elementy interfejsu użytkownika: pola, sekcje i ekrany. Dzięki temu mapowanie UI jest oddzielone od logiki testów, co znacznie ułatwia utrzymanie i szybkie dostosowanie testów do zmian w aplikacji, bo wszelkie zmiany w wyglądzie lub strukturze formularzy wprowadza się tylko w ui_mapping, bez konieczności modyfikowania samych testów czy akcji biznesowych.
Dlaczego ta struktura działa?
Kluczowa różnica w podejściu do automatyzacji w projektach low-code polega na tym, że testy powinny odwzorowywać proces, a nie ekran. W systemach procesowych, takich jak Ferryt, istotą działania aplikacji nie jest sam formularz, lecz przepływ sprawy przez kolejne etapy, decyzje i statusy. To, czy użytkownik kliknie przycisk po lewej czy po prawej stronie ekranu, ma znaczenie drugorzędne. Znacznie ważniejsze jest to, czy wniosek przechodzi z etapu weryfikacji do etapu zatwierdzenia, czy walidacje blokują niepoprawne dane, czy decyzja kredytowa faktycznie zmienia stan procesu w systemie.
Jeżeli test skupia się wyłącznie na sekwencji kliknięć i strukturze aktualnego formularza, staje się kruchy i podatny na każdą zmianę w UI. Jeżeli natomiast opisuje przebieg procesu — od utworzenia wniosku, przez uzupełnienie danych, weryfikację i zatwierdzenie, aż po kontrolę finalnego statusu — zaczyna odzwierciedlać realne zachowanie systemu z perspektywy biznesowej. To przesunięcie perspektywy z poziomu interfejsu użytkownika na poziom logiki biznesowej jest fundamentalne. Zmienia ono sposób myślenia o automatyzacji: przestajemy testować „ekrany”, a zaczynamy testować „zdarzenia i decyzje”.
Ogromną rolę odgrywa tutaj warstwa akcji biznesowych. Wyodrębnienie operacji takich jak utworzenie wniosku, jego walidacja czy zatwierdzenie powoduje, że test przestaje być zlepkiem technicznych kroków, a staje się czytelnym scenariuszem operacyjnym. W praktyce oznacza to, że nawet jeśli zmieni się układ formularza, nazwa pola czy sposób prezentacji sekcji, modyfikacji wymaga jedynie warstwa mapowania UI. Same scenariusze procesowe pozostają niezmienne, ponieważ nadal operują na tych samych akcjach biznesowych. Dzięki temu zmiany wizualne lub strukturalne w aplikacji nie powodują lawinowych poprawek w całym repozytorium.
Separacja UI od logiki testowej działa więc jak bufor bezpieczeństwa. Chroni scenariusze procesowe przed bezpośrednim wpływem zmian w warstwie prezentacji. W środowiskach low-code, gdzie formularze i układy ekranów mogą ewoluować bardzo dynamicznie, taka izolacja jest warunkiem stabilności automatyzacji.
W efekcie repozytorium przestaje być wyłącznie zbiorem testów technicznych, a zaczyna pełnić rolę dokumentacji systemu. Już sama struktura katalogów pokazuje, jakie procesy istnieją, jakie operacje są wspierane i które scenariusze są objęte testami. Osoba dołączająca do projektu może zrozumieć logikę systemu, analizując strukturę procesów i akcji biznesowych, bez konieczności zagłębiania się od razu w szczegóły implementacyjne. To właśnie w tym miejscu struktura repozytorium przestaje być detalem technicznym, a staje się elementem architektury jakości.
Podsumowanie
- oddziela proces od UI,
- stabilizuje zmiany,
- wspiera długofalowy rozwój systemu.
To prawda zarówno dla Ferryt, jak i dla każdej innej platformy low-code.
Dobrze zaprojektowana struktura repozytorium:
- obniża koszt utrzymania testów,
- wzmacnia wiarygodność i przewidywalność automatyzacji testów,
- umożliwia bezpieczny rozwój aplikacji przy zachowaniu kontroli nad ryzykiem regresji.
W projektach low-code to właśnie struktura repozytorium jest prawdziwym fundamentem jakości. W praktyce oznacza to, że decyzje podjęte na początku projektu – często traktowane jako czysto organizacyjne – mają bezpośredni wpływ na tempo rozwoju systemu w kolejnych miesiącach i latach. Struktura repozytorium kształtuje sposób myślenia o testach, wpływa na czytelność scenariuszy i determinuje to, czy automatyzacja będzie wsparciem dla biznesu, czy jedynie dodatkowym kosztem technicznym.
Im bardziej dynamiczne środowisko low-code, tym większe znaczenie ma architektoniczna dyscyplina w obszarze testów. To właśnie ona pozwala utrzymać równowagę między szybkością zmian a kontrolą jakości, a w konsekwencji budować system, który może rozwijać się bez utraty stabilności.
1 komentarz
Damian Biliński
W punkt. Zdanie, że „testy powinny odwzorowywać proces, a nie ekran” powinno być podstawą każdego szkolenia z automatyzacji w środowiskach low-code. Zmiana layoutu czy dorzucenie nowego pola w Ferrycie to chwila, a bez dobrej abstrakcji i separacji warstwy UI od logiki biznesowej, utrzymanie takich testów to udręka.