Cześć. Co i w jaki sposób testujecie end-to-end, jeśli macie aplikację, która ściąga dane z jakiś zewnętrznych API ? W moim konkretnym przypadku mam po prostu pobranie danych z jakiegoś api na podstawie 2 paramsów, przemapowanie modelu na swój i cachowanie tego. Na czas testów e2e chyba nie będę uderzał do realnego serwisu ? Co tam w ogóle testówać ? Cache tylko ?
A co chcesz przetestować? Samo to czy zapytanie poszło, czy tylko obrabianie danych po Twojej stronie?
Mam napisać testy e2e do takiego case'a. To inaczej .. co powinienem przetestować ? Jeśli pisalbym to priv to nie testowałbym chyba nic poza tym czy cache zadziałał. No bo testowanie mappera mija się z celem imo.
Zdefiniuj co rozumiesz przez end-to-end.
Ja napiszę jak ja rozumiem E2E.
Masz proces biznesowy (ciąg czynności, których wykonanie skutkuje realizacją potrzeby biznesowej użytkownika i dostarczenia temuż użytkownikowi wartości), który składa się z różnych aktywności. Niektóre z nich mogą być realizowane przez interfejs białkowy (np. ludzik w call-center wypełnia formatkę w programie), inne automatyczne (program wywołuje inny program), bądź pół-automatycznie (np. admin uruchamia skrypt codziennie o 6:07).
Realizacja procesu biznesowego może być wspierana przez różne programy, nie tylko ten Twój. Ten Twój udostępnia przypadki użycia, które są wywoływane w ramach większej całości (procesu biznesowego).
Jak chcesz mieć E2E, to testujesz czy wybrany proces działa. Przetestowanie samego przypadku użycia w Twoim pudełku (testy funkcjonalne) nie zawsze wystarczy do zapewnienia działania E2E.
Ja też to rozumiem jako testowanie procesu biznesowego. W kontekście aplikacji restowej jest to dla mnie napisanie testów akceptacyjnych - czyli czy jakaś usługa wykonuje swoje zadanie (zarabia hajs:D ) - bez corner case'ów. Tylko, że jeśli ta usługa to przelotka + mapowanie na innych dto + cache to zastanawia mnie co tutaj mogę wytestować poza cachem - czy mapper dobrze działa ? Czy dostaję 200 lub 404 ?
Zastanawiam się również czy jakoś zafejkować tego clienta api czy wziąć jsona z przykładowej odpowiedzi i wklieć do jakiegoś pliku i z tego czytać czy odpytywać realny zewnętrzny serwis.
Jak będziesz operował stwierdzeniami typu "Aplikacja zwraca JSONa", to będzie głupie z perspektywy testowania procesu, bo biznes nie gada JSONami, tylko konkretami "aplikacja zwraca notowania spółki X za ostanie N dni w rozdzielczości 5 minut".
Jak dla mnie E2E wykonywane na rzeczywistych danych (bądź przygotowanych via wykonanie innego procesu) są wyznacznikiem tego czy proces biznesowy zakończył się poprawnie, a nie czy było 404 czy 200 w odpowiedzi z systemu wspierającego realizację procesu biznesowego.
No ok, ale na czas testów odpytywać zewnętrzne api czy zafejkować ten serwis i brać response o takim samym formacie z jakiegoś pliku xml ?
Fejkujesz:
Plusy:
- przewidywalnosć odpowiedzi
- jeśli zewnętrzny serwis niedostępny, to testy nie będą zablokowane
Minusy:
- jak zmieni się API systemu zewnętrznego, to wykryjesz dopiero na produkcji
Rzeczywiste dane:
- pokazuje, że faktycznie działa albo się wywala
- wykrywasz problemy z firewallami
- wykrywasz problemy z wydajnością
Minusy:
- zewnętrzny serwis może leżeć i blokować testy
W 'fejkowym' podejściu bierzesz ryzyko na własną klatę. W przypadku upierania się przy rzeczywistych danych, masz możliwość sprzedania 'symulatora zewnętrznego serwisu' (wszak nie jest to czynność zajmująca 0 wysiłku).