Testowanie REST API:
Jak zacząć i co warto wiedzieć ?

Niniejsza publikacja stanowi obszerne kompendium wiedzy, poświęcone fundamentalnym aspektom związanym z testowaniem interfejsów REST API. Skupia się na zalecanych podejściach i praktykach, które mają na celu efektywne przeprowadzanie testów. Kluczowym elementem skutecznego testowania API jest znalezienie równowagi między dokładnością, kompleksowością a efektywnością procesu testowania. Publikacja ta została stworzona w celu dostarczenia wskazówek wspierających ten proces, zwłaszcza dla osób zaczynających swoją przygodę z testowaniem interfejsów REST API.

Co to jest API ?

Zanim przejdziemy do tematu związanego z testowaniem samego API, warto zrozumieć, czym ogólnie jest API, do czego jest wykorzystywane oraz w jaki sposób jest zbudowane. API, stanowi zbiór reguł, protokołów i narzędzi, które umożliwiają jednej aplikacji lub serwisowi korzystanie z funkcji lub zasobów innego programu, serwisu lub platformy. Pełni ono rolę pośrednika, umożliwiając komunikację między różnymi aplikacjami, co z kolei pozwala im na wymianę danych. API to interfejs, który precyzyjnie definiuje, w jaki sposób dwie różne aplikacje mogą komunikować się, jakie zapytania mogą być wysyłane, oraz jakich odpowiedzi można się spodziewać. Dużą zaletą API jest to, że umożliwia jednej aplikacji korzystanie z drugiej bez konieczności dokładnego zrozumienia oraz posiadania wiedzy o jej wewnętrznej implementacji. API są kluczowym elementem współczesnych aplikacji, umożliwiających integrację między różnymi systemami.

Podczas codziennego użytkowania różnych aplikacji wielokrotnie mieliśmy do czynienia z interfejsami API. Poniżej kilka popularnych przykładów interfejsów API, z którymi jest duże prawdopodobieństwo, że miało się do czynienia przy korzystaniu z innych aplikacji:

  • Google Maps API  – umożliwia integrację map, nawigacji i lokalizacji w różnych aplikacjach

  • OpenWeatherMAP API – dostarcza informacje o prognozie pogody na całym świecie. Wykorzystywane jest w różnych aplikacjach pogodowych, witrynach internetowych czy innych usługach związanych z monitorowaniem warunków atmosferycznych

  • YoutTube API – pozwala na integrację treści z YouTube, umożliwiając dostęp do filmów, komentarzy, list odtwarzania w innych serwisach

  • OpenExchenge Rates API – Dostarcza aktualne i historyczne kursy walut. Jest wykorzystywane w aplikacjach finansowych, serwisach e-commerce i wszędzie tam gdzie wymagane są dokładne informacje o kursach wymiany walut.

Podczas pracy z API możemy najczęściej spotkać następujące typy interfejsów API, takie jak REST API, SOAP, GraphQL, oraz kilka innych. REST API jest obecnie najbardziej popularnym interfejsem API, jednak należy pamiętać, że nie jest to jedyny rodzaj interfejsu, a wybór zależy od konkretnego przypadku. W zależności od typu API, który testujemy, konieczne może być użycie odpowiednich narzędzi do jego weryfikacji. W tej publikacji skoncentrujemy się na testowaniu interfejsów REST API. Samo REST API to styl architektoniczny oparty na zasadach API. Wykorzystuje standardowe metody HTTP (GET, POST, PUT, DELETE) do manipulacji zasobami za pomocą identyfikatorów URL. Jest szeroko stosowany w aplikacjach webowych oraz mobilnych.

Jak działa REST API

Działanie API często jest porównywane do roli kelnera w restauracji. Rola tego „kelnera” polega na dostarczeniu tego, co klient (ang. REQUEST) zamówił do obsługi. Zamówione „potrawy” są dostarczane z powrotem w formie odpowiedzi (ang. RESPONSE). Dane zwracane do klienta są zazwyczaj w formacie JSON lub XML, dlatego warto zaznajomić się z tymi sposobami reprezentacji struktury danych. Klientem API może być przeglądarka internetowa, aplikacja mobilna, lub narzędzie takie jak Postman.

Komunikacja z API zachodzi poprzez dostęp do jego zasobów znajdujących się w tzw. punkcie końcowym. W trakcie weryfikacji API często będziesz mieć do czynienia z pojęciem tzw. endpointa, który to właśnie jest miejscem, które podlega weryfikacji.

Copy to Clipboard

Jak widać na przykładzie po prawej stronie dostęp do endpontu odbywa się poprzez protokół HTTP. Trzeba jednak wiedzieć że REST jest niezależy od protokołu natomiast najczęściej jest on jednak łączony z HTTP. Jednym z elementów protokołu HTTP są metody HTTP które pozwalają na zdefiniowanie rodzaju akcji jaka ma zostać wykonana po stronie serwera. Takich metod jest wiele natomiast mamy 5 podstawowych które przedstawia tabelka poniżej. Jakie metody możemy wykonać w danym żądaniu do endpointa powinna określać dokumentacja.

  • GET – pobiera dane z określonego zasobu

  • POST – Tworzy nowy zasób

  • PUT – Aktualizuje dany zasób na podstawie podanego identyfikatora

  • DELETE – Usuwa określony zasób na podstawie identyfikatora

  • PATCH – Aktualizuje tylko część wskazanego zasobu

Widzimy, że REST API wykorzystuje cztery podstawowe operacje, które często pojawiają się również w kontekście operacji bazodanowych i są opisane akronimem CRUD. Operacje CRUD w kontekście REST API odnoszą się do podstawowych operacji, które można wykonać na zasobach przy użyciu protokołu REST. Akronim CRUD odnosi się do czterech podstawowych operacji, o których już wspomniano powyżej.

Zobaczmy sobie przykłady 4 podstawowych operacji:

  • CREATE (utwórz) – Pozwala na dodawanie nowych zasobów do systemu. W kontekście REST API, operacja ta jest często wykonywana poprzez HTTP POST request, gdzie przesyłane są dane zasobu, które mają być utworzone.

Copy to Clipboard
  • Read (Odczytaj) – Pozwala na pobieranie danych z istniejących zasobów. W REST API, operacja ta jest zazwyczaj reprezentowana przez HTTP GET request, który pobiera informacje o zasobie.

Copy to Clipboard
  • Update (Zaktualizuj) – Pozwala na modyfikację istniejących zasobów. W REST API, operacja ta jest często reprezentowana przez HTTP PUT lub PATCH request, gdzie przesyłane są dane do aktualizacji.

Copy to Clipboard
  • Delete (Usuń) – Pozwala na usunięcie istniejących zasobów. W REST API, operacja ta jest zazwyczaj reprezentowana przez HTTP DELETE request.

Copy to Clipboard

Operacje CRUD stanowią podstawową funkcjonalność wielu systemów opartych na REST API, umożliwiając interakcję z zasobami poprzez standardowe metody HTTP.

Po co testować Rest API

Testowanie interfejsów API odgrywa kluczową rolę w procesie tworzenia oprogramowania wysokiej jakości. Podczas testowania interfejsów API skupiamy się na kilku fundamentalnych aspektach, na które zwracamy uwagę przy testach interfejsów REST API.

  • Weryfikacja zgodności API z specyfikacją Testowanie API pozwala nam sprawdzić, czy interfejsy są zgodne z ustalonymi specyfikacjami oraz czy działają spójnie. Dzięki temu mamy pewność, że aplikacje korzystające z tych interfejsów otrzymują oczekiwane dane i mogą wykonywać odpowiednie operacje.

  • Wydajność interfejsu API Testowanie API może dotyczyć również atrybutów niefunkcjonalnych takich jak np. wydajność. Testy te pomagają zidentyfikować potencjalne wąskie gardła i optymalizować wydajność interfejsów.

  • Weryfikacja zgodności wersji W przypadku zmian wersji interfejsu API, testy te pozwalają sprawdzić czy nowa wersja jest wstecznie kompatybilna i czy nie wprowadza niepożądanych zmian w funkcjonalności

  • Bezpieczeństwo Testowanie API obejmuje również sprawdzanie bezpieczeństwa aby upewnić się że interfejsy API są odporne na różne ataki a do tego że mamy dostęp tylko do tych zasobów do których powinniśmy mieć dostęp.

  • Obsługa błędówPodczas testowania API należy również zweryfikować czy interfejs API odpowiednio obsługuje błędy i co się dzieje w systemie w przypadku gdy prześlemy nieprawidłowe dane lub gdy skorzystamy z nieobsługiwanej metody żądania

Na co zwracać uwagę przy testach API ?

Podczas weryfikacji i testowania interfejsów API poprzez wysyłanie żądań i badanie odpowiedzi, należy zwrócić uwagę na następujące elementy:

  • Sprawdzaj kody odpowiedziSprawdź poprawność kodu odpowiedzi, który otrzymujemy po wysłaniu naszego żądania. Przykładowo, nowe utworzenie zasobu powinno zwrócić kod 201 CREATED, a niedozwolone żądania powinny zwrócić 403 Forbidden. Zanim przejdziesz do testów, zapoznaj się z kodami odpowiedzi oraz z ich znaczeniem. Ponadto zawsze weryfikuj odpowiedzi z dokumentacją API.

  • Sprawdzaj najgłówki odpowiedziNagłówki serwera mają wpływ zarówno na bezpieczeństwo, jak i wydajność. Warto sprawdzać, czy nagłówek posiada odpowiednie parametry zgodne z dokumentacją.

  • Sprawdź podstawową wydajnośćWeryfikuj czasy wykonania podstawowych żądań. Jeśli operacja zakończyła się sukcesem, ale trwała zbyt długo, to w rzeczywistości test kończy się niepowodzeniem i należy zgłosić błąd.

  • Sprawdzaj treść odpowiedzi Weryfikuj treść odpowiedzi, którą otrzymujesz. Sprawdź, czy na przykład JSON, który otrzymałeś, składa się z wszystkich pól, typów i wartości, których się spodziewałeś.

  • Sprawdzaj parametrySprawdzaj wszystkie parametry, które możesz przekazać do naszych żądań (Query Parameters, Path Parameters), zarówno dla danych poprawnych, jak i negatywnych – weryfikuj, jak zachowuje się API.

  • Weryfikacja błędówSprawdź, czy w momencie próby wysyłania nieprawidłowego żądania (zły typ żądania lub błędne parametry) otrzymujesz „prawidłowe” komunikaty o błędach.

  • Wychodź poza schemat Jeśli weryfikujesz parametry API i zauważasz w dokumentacji, że parametr przyjmuje np wartości od 0 do 20 (np. do określenia liczby elementów do wyświetlenia), sprawdź wartości brzegowe, a także sprawdź wartości poza zakresem oraz wartości nienumeryczne. Zawsze eksploruj różne scenariusze testowe, zarówno dla API, jak i innych części systemu, wychodząc poza schemat

  • Testowanie metod które nie zostąły zaimplementowaneZawsze sprawdzaj, czy przez przypadek nie została zaimplementowana metoda, która nie powinna. Na przykład, jeśli chcemy pobrać dane z endpointu …/users, powinniśmy również sprawdzić, czy próba wywołania metody DELETE nie zakończy się pozytywnie (o ile tego nie ma w dokumentacji).

Testowanie interfejsów API

Kiedy podchodzimy do testów API, jedną z największych korzyści, jakie możemy czerpać, to fakt, że testowanie API możemy przeprowadzać na wczesnym etapie produkcji systemów, ponieważ komponent API często jest opracowywany przed interfejsem użytkownika. Warto przypomnieć sobie piramidę testów automatycznych, która przedstawia, co warto automatyzować oraz w jakiej skali, ponieważ powinno to ogólnie wpływać na to, w jaki sposób podchodzimy do automatyzacji testów naszych systemów.

Korzyści płynące z testowania API

Przyjrzyjmy się teraz podstawowym korzyściom wynikającym z testowania interfejsów REST:

  • W przeciwieństwie do testów GUI testy interfejsów API są znacznie szybsze w działaniu. Nie jest wymagana interakcja z graficznym interfejsem użytkownika – np. przez przeglądarkę.

  • Testy ze zazwyczaj również są mniej kosztowne w ich implementacji oraz w ich utrzymaniu w przeciwieństwie do testów na poziomie GUI

  • Testy interfejsów API pozwalają nam na rozpoczęcie testowania zanim część GUI nie zostanie ukończona dzięki czemu jesteśmy w stanie testy rozpocząć na wcześniejszym etapie i wykrywać ewentualne błędy

Ograniczenia podczas testowania API

Przyjrzyjmy się teraz podstawowym ograniczeniom wynikającym z testowania interfejsów REST:

  • Są często trudniejsze do implementacji ze względu na wykorzystywane technologie / narzędzia przy implementacji samych testów

  • Nie jesteśmy w stanie zweryfikować wszystkich funkcjonalnosći – np. weryfikacja procesów biznesowych powinna odbywać się z wykorzystaniem interfejsu GUI, czy np. weryfikacja walidacji na poziomie GUI)

Testy API – Manualnie czy automatycznie ?

Testy API mogą być wykonywane w sposób manualny i/lub automatyczny. Wszystko zależy od potrzeb, zasobów oraz kontekstu projektu. Testy API wykonywane manualnie polegają na manualnym wysyłaniu zapytań do interfejsu APIi ręcznym sprawdzaniu odpowiedzi oraz istotnych dla Nas informacji. Drugim podejściem jest wykonywanie testów w sposób automatyczny przy użyciu odpowiednich narzędzi który automatyzują ten proces. W praktyce często używa się modelu hybrydowego, gdzie testy automatyczne używane są do sprawdzania stabilności i powtarzalnych scenariuszy, a testy ręczne są wykorzystywane do bardziej zaawansowanego eksploracyjnego testowania i analizy przypadków brzegowych

Czy muszę potrafić programować aby testować API ?

Na początku nie jest konieczne abyś był ekspertem w programowaniu aby rozpocząć testować API, ale podstawowa znajomość programowania może być pomocna i pozwala na zrozumienie jak działa API oraz pozwoli na tworzenie bardziej zaawansowanych testów. Dużo zależy też z jakich narzędzi do testowania API będziesz korzystał.

Co powinienem znać aby testować REST API

Ważne jest zrozumienie protokołów komunikacyjnych takich jak HTTP/HTTPS bo są one często podstawą działania REST API i bez ich poznania może być ciężko weryfikować API. Dodatkowo należy poznać formatów danych takich jak JSON czy XML jak są zbudowane jak tworzyć dane z wykorzystaniem tych formatów bo są one wykorzysytwane do przesyłania danych poprzez API.

Jakie mamy narzędzia do testowania API ?

Wybór narzędzia do testowania API zależy od wielu czynników, takich jak specyfikacja projektu, preferencje zespołu, rodzaju API które chcemy weryfikować, kompetencji zespołu czy posiadanych pieniędzy które możemy wykorzystać na zakup / przeszkolenie osób z zespołu. Przed ostatecznym wyborem narzędzia warto przetestować kilka narzędzi, aby znaleźć to, które najlepiej spełnia twoje konkretne potrzeby i Twojego zespołu. Podstawowe narzędzia które mogą być użyteczne w testach API to:

  • Postman – narzędzie pozwala na wysyłanie i testowanie żądań HTTP. Pozwala również na automatyzację testów API. Aby pisać zaawansowane testy konieczna jest znajomość języka Java Script. Jest to narzędzie bardzo popularne a zarazem proste w użytkowaniu. Zachęcamy na dedykowane szkolenie podczas którego poznasz te narzędzie (Kliknij Tutaj)

  • Swagger (OpenAPI) – jest to framework specyfikacji API. Umożliwia definiowanie, dokumentowanie i testowanie interfejsów API za pomocą specyfikacji OpenAPI.

  • Insomnia – Klient API – Zapewnia interfejs do wysyłania i testowania żądań HTTP, obsługę zmiennych a także funkcje automatyzacji

  • RestAssured – biblioteka do testowania API dla języka Java.

  • SoapUI – narzędzie do testowania usług webowych (REST,SOAP – obszerne funkcje testowe, automatyzacja, generowanie raportów i analiza danych testowych. Jeśli jesteś zainteresowany zapraszamy na szkolenie z narzędzia SoapUI (Kliknij Tutaj)