Testy przechodzą, a produkcja się psuje – gdzie leży problem?

„Ale przecież testy były zielone…”

Jeśli pracujesz w IT dłużej niż kilka miesięcy, to pewnie słyszałeś to zdanie. Pipeline przechodzi. Testy E2E zielone. API testy zielone. Unit testy zielone. A dzień po wdrożeniu zgłoszenie z produkcji: coś nie działa.

I teraz pytanie – czy testy zawiodły?

Niekoniecznie.

Często problem nie leży w tym, że testy są złe. Problem leży w tym, że testujemy nie to, co trzeba.

bug na produkcji

1. Testujemy happy path, a produkcja to chaos

Większość testów automatycznych sprawdza scenariusz idealny:

  • użytkownik wpisuje poprawne dane

  • backend zwraca 200

  • UI wyświetla komunikat sukcesu

Tylko że produkcja nie jest idealna.

Na produkcji masz:

  • opóźnienia sieci

  • timeouty

  • błędne dane

  • użytkowników klikających 5 razy w przycisk

  • requesty wysyłane równolegle

Jeśli testujemy tylko „ładną ścieżkę”, to testy będą przechodzić. A bug i tak wyjdzie, bo realne życie nie wygląda jak happy path z testu.

 

2. Mocki, które dają fałszywe poczucie bezpieczeństwa

Mockowanie API w testach E2E jest super. Przyspiesza suite, stabilizuje testy, eliminuje zależności.

Ale ma jedną pułapkę.

Jeśli zawsze mockujesz odpowiedź 200 z poprawnym JSON-em, to tak naprawdę testujesz tylko UI. Nie testujesz:

  • czy backend faktycznie zwraca taki format

  • czy pole nie zmieniło nazwy

  • czy nie doszło nowe pole wymagane

  • czy walidacja po stronie serwera działa

Widziałem sytuacje, gdzie testy E2E były idealne, a backend zmienił strukturę odpowiedzi. UI się wysypywał, testy dalej były zielone, bo… mock zwracał starą strukturę.

To nie był problem testów. To był problem strategii testowej.

 

3. Brak testów integracyjnych między serwisami

W systemach mikroserwisowych to klasyka.

Serwis A działa.
Serwis B działa.
Testy jednostkowe i integracyjne w obu repozytoriach przechodzą.

Ale:

  • zmienił się kontrakt API

  • pole stało się opcjonalne

  • walidacja zaczęła odrzucać edge case

I nagle całość przestaje działać dopiero po deployu.

Jeśli nie masz testów kontraktowych albo integracyjnych między serwisami, to zielony pipeline w jednym repo niczego nie gwarantuje.

 

4. Testy nie odzwierciedlają danych produkcyjnych

To jest niedoceniany problem.

Na środowisku testowym masz:

  • czyste dane

  • brak duplikatów

  • brak historycznych rekordów

  • brak „dziwnych” przypadków

Na produkcji masz:

  • rekordy sprzed 5 lat

  • dane importowane z innego systemu

  • null w miejscu, gdzie „nigdy nie powinno być null”

  • użytkowników z egzotycznymi znakami w nazwisku

Testy przechodzą, bo testują idealny świat. Produkcja pokazuje prawdziwy.

 

5. Brak testów pod obciążeniem

System działa idealnie dla jednego użytkownika.

Test E2E przechodzi.
API test przechodzi.
Unit test przechodzi.

A potem 200 użytkowników robi to samo w tym samym czasie.

I nagle:

  • deadlock

  • race condition

  • podwójne zamówienie

  • timeout

Testy funkcjonalne nie wykrywają problemów z równoległością. I nie powinny. Ale jeśli nie masz żadnej formy testów wydajnościowych albo przynajmniej prostych smoke performance testów w pipeline, to ryzyko rośnie.

 

6. Zielony pipeline daje złudzenie kontroli

Pipeline jest potrzebny. Automatyzacja jest potrzebna.

Ale zielony pipeline to nie jest certyfikat jakości.

To jest tylko informacja:

„To, co postanowiliśmy przetestować – działa.”

Kluczowe pytanie brzmi:
Czy testujemy właściwe rzeczy?

 

7. Testy to strategia, nie tylko kod

Największy błąd, jaki widzę w projektach, to skupienie się na narzędziu.

Playwright.
Cypress.
Selenium.
Postman.
k6.

To wszystko są tylko narzędzia.

Jeśli strategia jest zła – czyli:

  • brak analizy ryzyka

  • brak testów negatywnych

  • brak testów granicznych

  • brak testów integracyjnych

  • brak testów pod realnymi danymi

to możesz mieć 1000 testów i nadal wypuszczać bugi.

 

Co z tym zrobić?

Nie chodzi o to, żeby pisać więcej testów.

Chodzi o to, żeby:

  • analizować realne ryzyko biznesowe

  • patrzeć na architekturę systemu

  • rozumieć przepływ danych

  • testować miejsca, które realnie mogą się wywrócić

Czasem jeden dobrze przemyślany test integracyjny daje więcej niż 30 testów klikających formularz.

Podsumowanie

Testy przechodzą, a bug trafia na produkcję nie dlatego, że automatyzacja nie ma sensu.

Tylko dlatego, że:

  • testujemy za wąsko

  • testujemy za idealnie

  • testujemy to, co łatwe

  • zamiast tego, co ryzykowne

Jakość nie polega na tym, żeby mieć zielony dashboard.

Polega na tym, żeby rozumieć system.

A to już nie jest kwestia frameworka. To jest kwestia myślenia.

Dostępne szkolenia

pakiet premium