Automatyzacja testów oprogramowania polega na wykorzystaniu kodu, frameworków i narzędzi do automatycznego wykonywania testów oraz porównywania uzyskanych rezultatów z oczekiwanym zachowaniem aplikacji. Dzięki temu po zmianie kodu zespół może szybko sprawdzić, czy podstawowe funkcje nadal działają i czy nie pojawiła się regresja.
Nie oznacza to zastąpienia testerów skryptami. Automatyzacja najlepiej sprawdza się przy testach powtarzalnych, często uruchamianych i opartych na jasno określonych oczekiwaniach. Testy eksploracyjne, ocena użyteczności czy nietypowych zachowań użytkownika nadal wymagają ludzkiej wiedzy i obserwacji.
Dobrze zaprojektowana automatyzacja skraca pętlę informacji zwrotnej między zmianą w kodzie a wykryciem problemu. Źle zaprojektowana może natomiast stworzyć setki wolnych, niestabilnych testów, których wyniki zespół z czasem zaczyna ignorować.
Co to jest automatyzacja testów oprogramowania?
W testowaniu manualnym tester wykonuje czynności w aplikacji, obserwuje rezultat i ocenia, czy jest zgodny z oczekiwaniem.
W testach automatycznych tę część pracy wykonuje program.
Typowy test automatyczny składa się z trzech elementów:
- przygotowania danych i warunków testu,
- wykonania określonej operacji,
- sprawdzenia rezultatu za pomocą asercji.
Dokumentacja Selenium opisuje podobny schemat jako przygotowanie danych, wykonanie określonego zestawu działań i ocenę wyniku.
Przykładowo test sklepu internetowego może automatycznie:
- otworzyć stronę produktu,
- dodać produkt do koszyka,
- przejść do koszyka,
- sprawdzić nazwę produktu i cenę,
- zweryfikować możliwość przejścia do kolejnego etapu zakupu.
Ten sam scenariusz można uruchamiać po kolejnych zmianach aplikacji bez ręcznego przeklikiwania całej ścieżki.
Automatyzacja nie ogranicza się jednak do sterowania przeglądarką. Testować automatycznie można również pojedyncze funkcje w kodzie, API, integracje między usługami, wydajność, bezpieczeństwo czy aplikacje mobilne.
Testy automatyczne a manualne
Automatyzacja i testowanie ręczne rozwiązują różne problemy, dlatego najczęściej powinny się uzupełniać.
| Obszar | Testy automatyczne | Testy manualne |
|---|---|---|
| Powtarzalne scenariusze | Bardzo dobre zastosowanie | Czasochłonne |
| Regresja | Bardzo dobre zastosowanie | Kosztowna przy częstych wydaniach |
| Testy eksploracyjne | Ograniczone możliwości | Bardzo dobre zastosowanie |
| Ocena UX | Ograniczona | Człowiek lepiej ocenia doświadczenie |
| Duża liczba danych | Łatwa do skalowania | Trudna manualnie |
| Testy po każdym commit/pull request | Mogą uruchamiać się automatycznie | Zwykle niepraktyczne |
| Koszt początkowy | Wyższy | Niższy |
| Koszt wielokrotnego wykonania | Zwykle maleje wraz z liczbą powtórzeń | Każde wykonanie wymaga czasu testera |
| Utrzymanie | Wymaga aktualizowania kodu testowego | Wymaga aktualizacji scenariuszy i wiedzy testerów |
Google w materiałach dotyczących testowania również rozdziela testy automatyczne od ręcznych i zwraca uwagę, że człowiek pozostaje szczególnie wartościowy w testowaniu eksploracyjnym, podczas gdy komputer dobrze wykonuje zdefiniowane czynności wielokrotnie.
Dlatego celem nie powinno być osiągnięcie 100% automatyzacji.
Lepszym celem jest automatyzacja tych kontroli, które dają zespołowi szybszą i bardziej wiarygodną informację o jakości oprogramowania.
Co warto automatyzować?
Najlepszymi kandydatami są testy, które są wykonywane często i mają jednoznaczny oczekiwany rezultat.
Najczęściej automatyzuje się:
- testy regresyjne,
- testy jednostkowe,
- testy integracyjne,
- testy API,
- krytyczne scenariusze end-to-end,
- testy wykonywane dla wielu kombinacji danych,
- testy cross-browser,
- testy wydajnościowe,
- wybrane kontrole bezpieczeństwa,
- testy uruchamiane przy każdym buildzie lub przed wdrożeniem.
Przykładem może być aplikacja bankowa, w której po każdej większej zmianie należy sprawdzić:
logowanie → wyświetlenie rachunku → utworzenie przelewu → autoryzację → potwierdzenie operacji.
Jeżeli scenariusz jest stabilny i krytyczny biznesowo, jego regularne ręczne wykonywanie jest dobrym kandydatem do zastąpienia automatem.
Kiedy automatyzacja testów nie ma sensu?
Nie każdy test warto przenosić do kodu.
Automatyzacja może mieć niewielki zwrot, gdy:
- funkcjonalność ma zostać użyta tylko raz,
- interfejs jest w fazie intensywnych zmian,
- scenariusz wykonywany jest bardzo rzadko,
- oczekiwany wynik wymaga subiektywnej oceny,
- przygotowanie automatu będzie kosztowniejsze niż kilka wykonań manualnych,
- test eksploruje nieznane zachowania systemu.
Dobrym przykładem jest ocena pierwszej wersji nowego procesu rejestracji użytkownika.
Tester może zauważyć niejasny komunikat, niewygodną kolejność pól albo problem, którego projektanci nie uwzględnili. Automat sprawdzi natomiast przede wszystkim to, czego wcześniej nauczono go oczekiwać.
Automatyzacja świetnie odpowiada na pytanie czy znany scenariusz nadal działa. Znacznie gorzej radzi sobie z poszukiwaniem problemów, których zespół jeszcze nie przewidział.
Jakie testy można automatyzować?
W obecnym materiale warto rozdzielić dwie klasyfikacje, które często są ze sobą mieszane.
Testy jednostkowe, integracyjne i systemowe opisują poziom testowania.
Testy funkcjonalne, wydajnościowe czy bezpieczeństwa opisują natomiast cel i charakter weryfikacji.
Jeden test może więc być jednocześnie testem funkcjonalnym i integracyjnym.
Testy jednostkowe
Testy jednostkowe sprawdzają niewielkie fragmenty kodu, takie jak funkcja, metoda czy komponent logiki biznesowej.
Są zazwyczaj szybkie i łatwe do uruchomienia podczas developmentu.
Przykład:
system nalicza rabat 10% dla określonego typu klienta. Test jednostkowy przekazuje odpowiednie dane wejściowe i sprawdza otrzymaną wartość.
Testy jednostkowe stanowią zwykle najniższą warstwę strategii automatyzacji.
Testy integracyjne
Testy integracyjne sprawdzają współpracę kilku elementów systemu.
Mogą obejmować:
- aplikację i bazę danych,
- komunikację z API,
- kolejkę komunikatów,
- integrację dwóch mikroserwisów,
- zapis i odczyt danych.
Pozwalają wykryć problemy, których test pojedynczego komponentu nie zobaczy.
Przykładowo kod tworzący zamówienie może działać poprawnie w izolacji, ale niepoprawnie zapisywać dane do rzeczywistej bazy.
Testy API
Testowanie API pozwala sprawdzić zachowanie systemu bez przechodzenia przez interfejs użytkownika.
Można weryfikować m.in.:
- kody odpowiedzi,
- strukturę danych,
- autoryzację,
- walidację parametrów,
- reguły biznesowe,
- zachowanie przy błędnych danych.
Test API jest zwykle szybszy i mniej zależny od zmian interfejsu niż pełny test przeglądarkowy.
Właśnie dlatego strategia automatyzacji nie powinna zaczynać się automatycznie od nagrywania setek scenariuszy GUI.
Testy end-to-end i interfejsu użytkownika
Testy end-to-end, czyli E2E, sprawdzają pełną ścieżkę przez aplikację z perspektywy użytkownika lub całego procesu.
W sklepie internetowym może być to:
wyszukanie produktu → koszyk → adres → płatność → utworzenie zamówienia.
Do takich testów wykorzystuje się m.in. Selenium i Playwright.
Selenium WebDriver automatyzuje rzeczywistą przeglądarkę i umożliwia tworzenie testów dla głównych przeglądarek oraz różnych języków programowania.
Playwright jest frameworkiem przeznaczonym do automatyzacji nowoczesnych aplikacji webowych i obsługuje Chromium, Firefox oraz WebKit. Oferuje m.in. automatyczne oczekiwanie na gotowość elementów, izolację testów i wykonywanie scenariuszy w różnych konfiguracjach przeglądarek.
Testów E2E nie warto jednak traktować jako jedynego poziomu automatyzacji.
Sama dokumentacja Selenium zwraca uwagę, że testy przeglądarkowe są stosunkowo kosztowne i przed ich utworzeniem warto sprawdzić, czy tę samą weryfikację można przeprowadzić na niższym poziomie.
Piramida testów – dlaczego nie warto automatyzować wszystkiego przez UI?
Przy projektowaniu automatyzacji przydaje się koncepcja piramidy testów.
W uproszczeniu zakłada ona:
- dużo szybkich testów na niskim poziomie,
- mniej testów integracyjnych,
- niewielką liczbę najbardziej wartościowych testów E2E.
Martin Fowler opisuje podstawową ideę piramidy jako tworzenie większej liczby niskopoziomowych testów oraz ograniczanie liczby szerokich testów przechodzących przez GUI.
Nie trzeba traktować konkretnych proporcji jako sztywnej reguły.
Znaczenie ma kierunek.
Jeżeli błąd można wiarygodnie wykryć szybkim testem API, nie trzeba powtarzać wszystkich jego wariantów poprzez wolniejsze sterowanie przeglądarką.
Dzięki temu zestaw testów jest szybszy, łatwiejszy w utrzymaniu i daje bardziej precyzyjną informację o miejscu awarii.
Automatyzacja testów regresyjnych
Regresja oznacza sytuację, w której nowa zmiana psuje działającą wcześniej funkcjonalność.
To jeden z obszarów szczególnie dobrze nadających się do automatyzacji.
Po zmianie mechanizmu płatności zespół może automatycznie sprawdzić, czy nadal działają:
- dodawanie produktów,
- koszyk,
- kody rabatowe,
- różne metody płatności,
- zapis zamówienia,
- potwierdzenie zakupu.
Wraz ze wzrostem aplikacji ręczne powtarzanie całego zestawu regresji przed każdym wydaniem staje się coraz trudniejsze.
Automatyczna regresja pozwala uruchamiać część kontroli po każdej zmianie kodu i szerszy zestaw przed wydaniem.
Automatyzacja testów wydajnościowych
Testy wydajnościowe sprawdzają zachowanie aplikacji przy określonym obciążeniu.
Można badać między innymi:
- czas odpowiedzi,
- throughput,
- zachowanie przy rosnącej liczbie użytkowników,
- stabilność podczas długotrwałego obciążenia,
- punkt, w którym system przestaje spełniać wymagania.
W tym obszarze automatyzacja jest praktycznie niezbędna, ponieważ ręczne symulowanie setek lub tysięcy jednoczesnych żądań nie ma sensu.
Jednym z narzędzi jest Apache JMeter. Oficjalna dokumentacja opisuje przygotowanie planu testowego, uruchomienie testu obciążeniowego oraz późniejszą analizę wyników. Przy właściwych testach obciążeniowych zaleca uruchamianie JMetera w trybie CLI, a nie poprzez interfejs graficzny.
Trzeba jednak pamiętać, że test wydajnościowy ma wartość tylko wtedy, gdy odzwierciedla realistyczny model obciążenia.
Samo wygenerowanie dużej liczby requestów nie mówi jeszcze, jak system zachowa się przy rzeczywistym sposobie korzystania z aplikacji.
Automatyzacja testów bezpieczeństwa
W tym miejscu warto poprawić częste uproszczenie: automatyczne skanowanie bezpieczeństwa i test penetracyjny nie są tym samym.
W procesie wytwarzania oprogramowania można automatyzować między innymi:
- SAST – analizę kodu pod kątem podatności,
- DAST – testowanie uruchomionej aplikacji z zewnątrz,
- SCA – analizę podatności bibliotek i zależności,
- skanowanie sekretów,
- skanowanie obrazów kontenerów,
- wybrane kontrole konfiguracji.
OWASP wskazuje, że takie mechanizmy mogą być włączane na różnych etapach SDLC oraz pipeline’u CI/CD.
Nie oznacza to wyeliminowania pracy specjalisty security.
OWASP zwraca uwagę, że automatyczne DAST może nie wykrywać m.in. części błędów logiki biznesowej, race conditions czy nieznanych klas podatności, które wymagają manualnej analizy.
Dlatego automatyczny security scanning powinien być warstwą kontroli, a nie automatycznym zamiennikiem pełnych testów bezpieczeństwa i pentestów.
Testy aplikacji mobilnych
Automatyzować można również aplikacje mobilne.
Jednym z najbardziej znanych rozwiązań jest Appium, wykorzystujące architekturę klient–serwer opartą na standardzie WebDriver. Oficjalne sterowniki Appium umożliwiają automatyzowanie środowisk Android i iOS, w tym aplikacji natywnych, hybrydowych i webowych zależnie od użytego drivera.
Test może na przykład:
- uruchomić aplikację,
- zalogować użytkownika,
- przejść przez określoną funkcję,
- zweryfikować zawartość ekranu,
- wykonać operację na Androidzie i iOS.
Testowanie aplikacji mobilnych wymaga jednak uwzględnienia dodatkowych zmiennych, takich jak wersja systemu, typ urządzenia, rozdzielczość czy zachowanie na urządzeniu fizycznym i emulatorze.
Najważniejsze korzyści automatyzacji testów
Największą wartością automatyzacji nie jest samo zmniejszenie liczby manualnych kliknięć.
Jej znaczenie polega na skróceniu czasu potrzebnego do uzyskania informacji, czy zmiana w oprogramowaniu jest bezpieczna.
Dobrze działający zestaw testów umożliwia:
- częstsze sprawdzanie regresji,
- wcześniejsze wykrywanie błędów,
- wykonywanie tych samych testów w powtarzalny sposób,
- testowanie wielu konfiguracji i danych,
- równoległe wykonywanie scenariuszy,
- integrację kontroli jakości z developmentem,
- automatyczne blokowanie zmian niespełniających określonych kryteriów,
- odciążenie testerów od najbardziej powtarzalnej pracy.
Testerzy mogą dzięki temu więcej czasu przeznaczyć na analizę nowych funkcjonalności, testowanie eksploracyjne, projektowanie scenariuszy i identyfikowanie ryzyk.
Koszty i ograniczenia automatyzacji
Automatyzacja testów jest inwestycją, która również wymaga utrzymania.
Do najważniejszych kosztów należą:
Przygotowanie frameworku i infrastruktury
Zespół musi dobrać technologię, konfigurację środowisk, sposób raportowania i integrację z pipeline’em.
Tworzenie kodu testowego
Test automatyczny również jest kodem. Trzeba go projektować, przeglądać i refaktoryzować.
Utrzymanie
Zmiana API, procesu biznesowego lub interfejsu może wymagać aktualizacji testów.
Dane i środowiska testowe
Testy muszą mieć przewidywalny stan danych oraz dostęp do stabilnego środowiska.
Fałszywe alarmy i flaky tests
Niestabilny test może raz przejść, a raz zakończyć się błędem mimo braku zmiany w zachowaniu aplikacji.
Właśnie ostatni problem jest szczególnie niebezpieczny.
Jeżeli pipeline regularnie zgłasza przypadkowe błędy, ludzie zaczynają uruchamiać test ponownie bez analizy przyczyny. Z czasem czerwony wynik przestaje być wiarygodnym sygnałem.
Flaky tests – gdy automat daje niepewne wyniki
Flaky test to test, którego rezultat jest niestabilny mimo braku istotnej zmiany w testowanym systemie.
Przyczyną może być:
- zależność między testami,
- niewłaściwa synchronizacja,
- użycie sztywnych opóźnień,
- współdzielenie danych,
- zewnętrzna usługa,
- niestabilne środowisko,
- przypadkowa kolejność wykonywania.
Playwright zaleca między innymi izolowanie testów i korzystanie z mechanizmów oczekiwania opartych na faktycznym stanie aplikacji. Oficjalne materiały Selenium także ostrzegają przed nadmiernym obciążaniem testów przeglądarkowych odpowiedzialnością, która może być zweryfikowana prostszymi testami.
Flaky test nie jest drobną niedogodnością.
Obniża zaufanie do całego systemu automatyzacji.
Narzędzia do automatyzacji testów oprogramowania
Nie istnieje jedno narzędzie najlepsze dla każdego rodzaju testowania.
| Narzędzie | Główne zastosowanie | Kiedy warto rozważyć? |
| Playwright | Testy webowe E2E i browser automation | Nowoczesne aplikacje webowe, cross-browser, CI |
| Selenium | Automatyzacja przeglądarek | Rozbudowane ekosystemy WebDriver, wiele języków i przeglądarek |
| Appium | Automatyzacja aplikacji mobilnych | Android, iOS, aplikacje natywne i hybrydowe |
| Apache JMeter | Testy obciążeniowe i wydajnościowe | API, serwery i scenariusze load testing |
| OWASP ZAP i narzędzia SAST/DAST | Automatyczne kontrole bezpieczeństwa | DevSecOps i security testing w pipeline |
| JUnit, pytest, Jest i podobne frameworki | Testy kodu | Unit i integration testing w konkretnym stosie technologicznym |
Selenium
Selenium jest rozwijanym jako open source zestawem narzędzi do automatyzacji przeglądarek. WebDriver udostępnia interfejs pozwalający sterować przeglądarką w sposób zbliżony do działania użytkownika.
Selenium ma sens między innymi w projektach korzystających już z dojrzałego ekosystemu WebDriver lub wymagających szerokiego wsparcia języków i przeglądarek.
Playwright
Playwright został zaprojektowany z myślą o nowoczesnych aplikacjach webowych.
Obsługuje Chromium, Firefox i WebKit oraz posiada wbudowane mechanizmy takie jak:
- auto-waiting,
- assertions,
- izolację testów,
- równoległe wykonywanie,
- tracing,
- testowanie wielu konfiguracji przeglądarek.
W nowym projekcie webowym jest więc jednym z narzędzi, które warto porównać z Selenium zamiast automatycznie wybierać rozwiązanie tylko dlatego, że jest najbardziej znane.
Apache JMeter
JMeter powinien być rozpatrywany przede wszystkim przy testach obciążeniowych.
Pozwala przygotować plan ruchu, wykonywać testy z linii poleceń oraz generować raporty potrzebne do późniejszej analizy.
Appium
Appium znajduje zastosowanie w automatyzacji urządzeń i aplikacji mobilnych.
Jego architektura pozwala korzystać z klientów w różnych językach, a właściwa automatyzacja urządzenia realizowana jest przez odpowiednie sterowniki.
Jak wybrać narzędzie do automatyzacji testów?
Wybór nie powinien zaczynać się od rankingu popularności.
Najpierw trzeba określić:
Co testujemy?
Aplikację webową, mobilną, API, mikroserwis czy wydajność?
Na jakim poziomie chcemy wykrywać błąd?
Jeśli regułę można przetestować jednostkowo, uruchamianie przeglądarki może być niepotrzebne.
Jaki stos technologiczny zna zespół?
Framework dobrze dopasowany do języka i procesu developmentu będzie łatwiejszy w utrzymaniu.
Gdzie będą uruchamiane testy?
Lokalnie, w kontenerach, na urządzeniach mobilnych czy runnerach CI?
Jak duża będzie skala?
Kilka testów smoke i kilka tysięcy scenariuszy to dwa inne problemy architektoniczne.
Dopiero wtedy można porównywać narzędzia.
Jak wdrożyć automatyzację testów oprogramowania?
Największym błędem jest rozpoczęcie od celu typu automatyzujemy wszystkie testy.
Lepiej zacząć od problemu, który ma zostać rozwiązany.
1. Przeanalizuj obecny proces testowania
Sprawdź:
- które testy są wykonywane najczęściej,
- które zajmują najwięcej czasu,
- gdzie najczęściej pojawia się regresja,
- ile trwa feedback dla developera,
- które scenariusze są krytyczne dla użytkownika,
- które kontrole są stabilne i powtarzalne.
Dobrym pierwszym kandydatem może być niewielki zestaw regresji wykonywany przed każdym wydaniem.
2. Ustal poziom automatyzacji
Nie przenoś każdego scenariusza do przeglądarki.
Jeśli coś można wiarygodnie przetestować jako test jednostkowy lub API, taka wersja będzie często szybsza i prostsza.
Dopiero krytyczne ścieżki użytkownika warto pozostawić na poziomie E2E.
3. Wybierz framework pasujący do systemu
Dla aplikacji webowej można porównać Selenium i Playwright.
Dla aplikacji mobilnej — Appium.
Dla testów wydajnościowych potrzebne będzie narzędzie takie jak JMeter lub inny system do generowania obciążenia.
Jeden projekt może więc wykorzystywać kilka technologii.
4. Potraktuj testy jak kod produkcyjny
Kod automatyzacji powinien znajdować się w systemie kontroli wersji i przechodzić review.
Potrzebuje:
- czytelnej struktury,
- wspólnych konwencji,
- refaktoryzacji,
- rozsądnego podziału odpowiedzialności,
- dokumentacji najważniejszych decyzji.
Nieczytelne skrypty testowe również tworzą dług techniczny.
5. Przygotuj dane i środowiska
Automat powinien wiedzieć, w jakim stanie znajduje się system przed rozpoczęciem testu.
Test, który działa tylko dlatego, że ktoś ręcznie przygotował określone konto w bazie, nie jest w pełni autonomiczny.
Warto zaplanować:
- generowanie danych,
- czyszczenie po teście,
- izolację scenariuszy,
- testowe integracje z systemami zewnętrznymi,
- bezpieczne zarządzanie sekretami.
6. Włącz testy do CI/CD
Automatyzacja zaczyna przynosić największą wartość wtedy, gdy testy nie są uruchamiane wyłącznie ręcznie przez testera.
GitHub Actions jest przykładem platformy CI/CD umożliwiającej automatyzację buildów, testów i wdrożeń. Testy mogą być uruchamiane po pushu lub utworzeniu pull requestu.
Pipeline może wyglądać tak:
commit → build → szybkie testy jednostkowe → testy integracyjne → analiza bezpieczeństwa → wybrane E2E → artefakt → wdrożenie na środowisko testowe.
Nie wszystkie testy muszą działać po każdym commicie.
Szybkie kontrole mogą być uruchamiane stale, a dłuższa regresja E2E lub testy wydajnościowe np. przed wydaniem albo zgodnie z harmonogramem.
Automatyzacja testów w CI/CD
CI/CD zmienia automatyczny test z narzędzia testera w element procesu dostarczania oprogramowania.
Po utworzeniu pull requestu pipeline może automatycznie:
- zbudować aplikację,
- uruchomić testy jednostkowe,
- uruchomić wybrane testy integracyjne,
- wykonać skan bezpieczeństwa,
- uruchomić testy E2E,
- opublikować raport,
- zablokować merge, jeśli krytyczna kontrola nie przejdzie.
GitHub dokumentuje możliwość uruchamiania automatycznych testów dla zmian w pull requestach, a statusy takich kontroli mogą być używane przed scaleniem kodu.
W podobny sposób GitLab CI/CD obsługuje m.in. testy jednostkowe, code coverage, performance testing oraz automatyczne raporty SAST i DAST.
Dzięki temu problem może zostać wykryty jeszcze zanim zmiana trafi do głównej gałęzi kodu.
Jak tworzyć testy łatwiejsze w utrzymaniu?
Automat powinien sprawdzać zachowanie aplikacji, a nie przypadkowe szczegóły jej implementacji.
Playwright zaleca testowanie zachowań widocznych z perspektywy użytkownika i unikanie zależności od szczegółów, których użytkownik nie widzi, takich jak wewnętrzna nazwa funkcji lub przypadkowa klasa CSS.
W praktyce warto stosować kilka zasad.
Test powinien być możliwie niezależny.
Awaria jednego scenariusza nie powinna powodować kaskady błędów w kolejnych.
Nie używaj niepotrzebnych sztywnych opóźnień.
Oczekiwanie pięciu sekund nie gwarantuje, że element będzie gotowy dokładnie po takim czasie.
Nie duplikuj tej samej kontroli na wielu poziomach.
Jeżeli wszystkie przypadki brzegowe zostały dokładnie sprawdzone niżej, test E2E może skoncentrować się na najważniejszej ścieżce.
Regularnie usuwaj niepotrzebne testy.
Każdy test zwiększa czas wykonania i koszt utrzymania.
Naprawiaj niestabilność zamiast dodawać kolejne retry.
Automatyczne ponowienie może być mechanizmem pomocniczym, ale nie powinno maskować źródła flaky testu.
Jak mierzyć skuteczność automatyzacji?
Liczba napisanych testów jest słabym KPI.
Tysiąc automatów może dawać mniejszą wartość niż sto dobrze dobranych scenariuszy.
Lepiej obserwować między innymi:
- czas od zmiany kodu do wyniku testów,
- długość całego pipeline’u,
- stabilność testów,
- odsetek flaky failures,
- czas potrzebny na analizę awarii,
- zakres regresji wykonywany automatycznie,
- liczbę problemów wykrywanych przed wdrożeniem,
- koszt utrzymania automatyzacji.
Pokrycie kodu również może być użyteczną informacją, ale nie powinno być traktowane jako dowód jakości produktu.
Można mieć wysokie coverage i nadal nie testować najważniejszych zachowań biznesowych.
Przykład strategii automatyzacji testów aplikacji SaaS
Załóżmy, że firma rozwija platformę B2B do obsługi faktur.
Najważniejszy proces wygląda następująco:
logowanie → utworzenie klienta → wystawienie faktury → wysłanie dokumentu → rejestracja płatności.
Zamiast budować sto testów przeglądarkowych, zespół rozkłada kontrolę na kilka poziomów.
Reguły obliczania kwot, rabatów i podatków są sprawdzane za pomocą szybkich testów jednostkowych.
Integracja z bazą i systemem płatności jest kontrolowana przez testy integracyjne.
API odpowiedzialne za tworzenie faktury posiada własne testy walidacji, autoryzacji i przypadków błędnych.
Playwright wykonuje kilka krytycznych ścieżek E2E, w tym pełne wystawienie dokumentu przez interfejs.
JMeter sprawdza, jak API zachowuje się przy zakładanym obciążeniu.
Pipeline wykonuje szybkie testy przy każdym pull requeście, a większy zestaw regresji przed wydaniem.
Tester nadal prowadzi testy eksploracyjne nowych funkcjonalności.
Taka strategia daje większą wartość niż próba przeniesienia całego procesu QA do jednego narzędzia.
Od czego zacząć automatyzację testów?
Jeżeli organizacja dopiero rozpoczyna automatyzację, dobrym pierwszym krokiem nie jest wybór Selenium, Playwrighta czy innego narzędzia.
Najpierw warto wskazać konkretny koszt obecnego procesu testowania. Może nim być wielogodzinna regresja przed każdym wydaniem, późne wykrywanie błędów w API albo brak możliwości częstego sprawdzania krytycznej ścieżki użytkownika.
Następnie można wybrać niewielki zestaw stabilnych scenariuszy, zautomatyzować je na możliwie niskim poziomie i włączyć do procesu CI. Dopiero gdy testy są szybkie, wiarygodne i regularnie używane przez zespół, warto rozszerzać zakres.
Najlepsza automatyzacja testów nie jest tą, która obejmuje największą liczbę przypadków. Jest nią taka, która szybko daje zespołowi wiarygodną informację, czy oprogramowanie po zmianie nadal zachowuje się zgodnie z oczekiwaniami.
