Pisanie testów automatycznych API (Cypress i Postman)

Piotr Buczek
Trener
Ikona kalendarza
27 lipca 2023

Testy API to testy oprogramowania, które skupiają się na sprawdzaniu „interfejsu programowania aplikacji”, czyli API. Testowanie interfejsu API umożliwia rozpoczęcie testowania na wczesnym etapie cyklu rozwoju, zanim interfejs użytkownika będzie gotowy, co niesie ze sobą znaczące korzyści jeśli chodzi koszt naprawy błędów i tempo rozwoju UI aplikacji. W poniższym artykule skupimy się na bardziej szczegółowych celach takiego testowania, omówimy rodzaje obecnie wykorzystywanych API, a także omówimy najbardziej popularne aplikacje służące do ich automatyzacji.

API

API jest zbiorem reguł, protokołów i narzędzi, które pozwalają na komunikację między różnymi aplikacjami lub usługami, co pozwala w ramach jednej usługi/aplikacji uzyskać dostęp do funkcjonalności innych aplikacji lub usługi — np. w kliencie pocztowym możemy wyświetlać prognozę pogody lub na stronie restauracji widzimy wycinek mapy z Google Maps pokazującej dojazd do niej. API są powszechnie stosowane w branży oprogramowania i tworzenia aplikacji i usług, umożliwiając integrację między różnymi systemami (mikroserwisy), rozszerzanie funkcjonalności poprzez wykorzystanie usług zewnętrznych oraz tworzenie aplikacji wieloplatformowych.

Testy API

W piramidzie testów, testy API są umieszczone na niższych poziomach — są one zazwyczaj klasyfikowane jako testy integracyjne, ponieważ koncentrują się na testowaniu interfejsu API i komunikacji między aplikacją a zewnętrznymi usługami lub modułami aplikacji. W praktyce testy API mogą obejmować różne aspekty, począwszy od testów jednostkowych na poziomie pojedynczych endpointów API, aż po testy end-to-end, które wykorzystują API jako część szerszego scenariusza testowego.

W zależności od organizacji i projektu odpowiedzialność za tworzenie testów API może ponosić osoba o innej roli w zespole. Może to być tester, programista, lub nawet DevOps. Ważne jest, aby osoby odpowiedzialne za tworzenie testów API miały zarówno wiedzę techniczną dotyczącą API, jak i umiejętności testowania oprogramowania.

Cele testów API

Podczas testów wyznaczona osoba korzysta z narzędzi pozwalających na wysyłanie zapytań do API i analizowanie odpowiedzi. Umożliwia to sprawdzenie takich aspektów jak:

  • Poprawność działania i funkcjonalność — testy API pozwalają sprawdzić, czy API działa zgodnie z oczekiwaniami. Można zweryfikować, czy odpowiedzi API są poprawne czy statusy odpowiedzi są zasadne itp.
  • Bezpieczeństwo, w szczególności autoryzacja i uwierzytelnianie- testy API sprawdzają, czy mechanizmy autoryzacji i uwierzytelniania działają zgodnie z wymaganiami, tzn. czy dostęp do API jest odpowiednio kontrolowany.
  • Wydajność i zapewnienie stabilności — testy API pozwalają oceniać wydajność API, mierząc czas odpowiedzi, przepustowość lub obciążenie, aby sprawdzić, czy API działa sprawnie i zgodnie z oczekiwaniami. Ponadto regularne wykonywanie testów pozwala identyfikować potencjalne problemy wcześnie, co ułatwia ich naprawę przed wprowadzeniem zmian do produkcji.
  • Integracja i interakcje- testy API są szczególnie przydatne podczas integracji zewnętrznych usług lub aplikacji. Pozwalają sprawdzić, czy interakcje z innymi systemami są poprawne i zgodne z oczekiwaniami.

Automatyzacja testów API

Testy API mogą być wykonywane ręcznie, jednak w celu przyspieszenia tego procesu, uzyskania powtarzalności oraz ograniczenia konieczności poświęcania zasobów ludzkich warto je zautomatyzować. Dodatkowym atutem automatyzacji jest ułatwienie integracji z procesami CI/CD (Continuous Integration/Continuous Deployment).

Na rynku dostępnych jest wiele narzędzi przeznaczonych do testowania API, jednak ich wybór powinniśmy zawsze rozpocząć od analizy preferencji i potrzeb zespołu, a także typu API, które będzie testowane.

Typy API

Warto pamiętać, że istnieje kilka rodzajów API, które różnią się sposobem komunikacji, protokołami, wykorzystywanymi technologiami i funkcjonalnościami:

  • API RESTful, czyli po prostu REST (Representational State Transfer) jest stylem architektonicznym, który definiuje zasady komunikacji między klientem a serwerem. API RESTful (lub REST API) wykorzystuje zasady, takie jak użycie standardowych metod HTTP (GET, POST, PUT, DELETE), identyfikatorów URI (Uniform Resource Identifier) i formatów danych, takich jak JSON lub XML

  • API SOAP (Simple Object Access Protocol) jest protokołem komunikacyjnym, który umożliwia wymianę danych między aplikacjami w formie komunikatów XML. API SOAP definiuje strukturę i format komunikacji, a klient i serwer komunikują się za pomocą specjalnych komunikatów SOAP.

  • API GraphQL, czyli język zapytań i środowisko wykonywania zapytań, które pozwala na wykonywanie elastycznych zapytań do API, aby uzyskać dokładnie takie dane, jakich potrzebuje klient. Stanowi to naturalną ewolucję w stosunku do REST API, gdzie klient przyjmuje dane o z góry określonym kształcie. Zapytania GraphQL są deklaratywne, a odpowiedzi API - w formacie JSON.

Narzędzia do automatyzacji testów API

Poniżej zostało wymienionych kilka popularnych narzędzi, które często są wykorzystywane do testowania API:

  • Postman, jest to jedno z najpopularniejszych narzędzi do testowania API. Posiada intuicyjny interfejs, który umożliwia wysyłanie zapytań HTTP, analizę odpowiedzi, tworzenie skryptów testowych, zarządzanie środowiskami i generowanie raportów.

  • Swagger (OpenAPI), jest to framework, który pozwala na tworzenie dokumentacji API w formacie OpenAPI. Oprócz tego Swagger dostarcza narzędzi do testowania API na podstawie zdefiniowanych specyfikacji. Pozwala na wysyłanie zapytań, sprawdzanie schematów, eksplorowanie API i generowanie kodu klienta.

  • curl, jest to narzędzie wiersza poleceń dostępne na różne platformy, które umożliwia wysyłanie zapytań HTTP/HTTPS. Curl jest elastycznym narzędziem, które może być używane do prostych testów API poprzez ręczne tworzenie zapytań i analizowanie odpowiedzi.

  • JMeter, jest to narzędzie do testowania wydajności i obciążenia, ale można go również wykorzystać do testowania API. Umożliwia wysyłanie wielu żądań równocześnie, monitorowanie czasów odpowiedzi, generowanie raportów i symulowanie obciążenia na API.

  • SoapUI, jest to narzędzie specjalizujące się w testowaniu usług webowych, w tym API opartych na protokole SOAP. Umożliwia wysyłanie żądań, weryfikację odpowiedzi, testowanie wielu scenariuszy i automatyzację testów.

  • RestAssured, jest to popularne narzędzie dla programistów, które ułatwia pisanie testów API w języku Java. Zapewnia prosty interfejs do wysyłania żądań, analizy odpowiedzi i sprawdzania poprawności danych.

Postman

Postman stał się de facto standardowym narzędziem jeśli chodzi o testy API RESTowego — oprócz podstawowych mechanizmów, oferuje kilka specyficznych funkcji, które znacznie usprawniają cały proces:

  • Tworzenie i wysyłanie zapytań- Postman umożliwia tworzenie różnych rodzajów zapytań HTTP, takich jak GET, POST, PUT, DELETE, PATCH itp. Można dostosować nagłówki, parametry, treść żądania oraz format danych, takich jak JSON czy XML. Umożliwia również ustawianie autoryzacji i uwierzytelniania, jeśli jest to wymagane przez API.
22.webp
  • Środowiska i zarządzanie nimi- Postman pozwala na tworzenie i zarządzanie różnymi środowiskami, które ułatwiają testowanie API w różnych konfiguracjach. Można definiować zmienne środowiskowe, takie jak adresy URL, klucze dostępu itp., które mogą być łatwo dostępne i ułatwiają zmianę między środowiskami.
23.webp
  • Tworzenie skryptów testowych- Postman oferuje możliwość tworzenia skryptów testowych, które pozwalają na automatyzację testów API. Skrypty testowe są oparte na języku JavaScript i bibliotece ChaiAssertionLibrary i umożliwiają m.in. weryfikację odpowiedzi API, sprawdzanie danych, wykonywanie asercji, obsługę warunków logicznych, przykładowo:
1// Sprawdza kod statusu odpowiedzi
2// Sprawdza kod statusu odpowiedzi
3pm.test("Status code is 200", function () {
4    pm.response.to.have.status(200);
5});
6// Sprawdza, czy odpowiedź zawiera oczekiwane dane
7pm.test("Response body contains expected data", function () {
8    var jsonData = pm.response.json();
9    pm.expect(jsonData.cars.length).to.be.above(0);
10    pm.expect(jsonData.cars[0].name).to.equal("BMW X3");
11});
24.webp
  • Generowanie dokumentacji API- Postman pozwala generować dokumentację API na podstawie zdefiniowanych zapytań. Można udostępniać dokumentację swojego API innym członkom zespołu lub klientom, dzięki czemu mogą oni łatwo korzystać z API i zrozumieć dostępne funkcje.
25.webp
  • Kolekcje zapytań- Postman umożliwia grupowanie zapytań w kolekcje, co ułatwia organizację i wykonywanie zestawów testów. Można tworzyć testy sekwencyjne lub równoległe, które testują różne aspekty API.
26.webp
  • Integracja z CI/CD- Postman jest zintegrowany z popularnymi narzędziami CI/CD, takimi jak Jenkins czy TeamCity. Można automatycznie uruchamiać zestawy testów API w ramach procesu CI/CD i otrzymywać raporty o wynikach testów.

Cypress

Również Cypress może być wykorzystywany do testowania API, chociaż Cypress jest głównie znany jako narzędzie do testowania interfejsu użytkownika (UI).

Cypress oferuje zestaw komend, które umożliwiają wysyłanie żądań HTTP, analizowanie odpowiedzi i weryfikowanie danych API. Aby rozpocząć test, można użyć komendy java cy.request() do wysyłania zapytań HTTP do interfejsu API i sprawdzania odpowiedzi. Można również korzystać z innych funkcji Cypress, takich jak asercje, aby weryfikować oczekiwane dane w odpowiedzi API:

1cy.request('GET', '/api/cars/1').then((response) => {
2  expect(response.status).to.equal(200);
3  expect(response.body.name).to.equal('Opel Astra');
4});

Postman pozwala wykorzystać bardziej rozbudowane metody takie jak contains(), do weryfikacji czy zwracany element odpowiedzi ma dany typ (w przykładzie poniżej sprawdzamy, czy jest on tablicą) i czy zawiera określony element (BMW X3):

1cy.request('GET', '/api/cars').then((response) => {
2  expect(response.body).to.be.an('array').that.contains('BMW X3');
3});

Cypress będzie szczególnie przydatny, gdy chcemy przeprowadzić testy end-to-end, które obejmują zarówno interakcje z interfejsem użytkownika GUI, jak i komunikację z API. Cypress pozwala na integrację testów UI z testami API, co umożliwia weryfikację poprawności działania aplikacji na wielu poziomach i praktyczne wykonanie testów E2E.

Wybór właściwego narzędzia

Podsumowując, dla najbardziej popularnego obecnie typu API na rynku, czyli API RESTowego najbardziej popularnym narzędzie do pisania testów automatycznych jest Postman, który oprócz tego, że posiada stosunkowo przyjazny interfejs użytkownika i liczne udogodnienia dla testera, to oferuje również bardzo zaawansowane możliwości jeśli chodzi o automatyzację. W porównaniu do Postmana, jeśli chodzi wyłącznie o testy API, Cypress jest raczej narzędziem niszowym, które jednak świetnie sprawdzi się w scenariuszu, gdy testujemy kompleksowo, tzn. API i UI.

Jeśli zainteresował Cię artykuł, zachęcamy do sprawdzenia szkoleń:

Przeczytaj także

Ikona kalendarza

29 marzec

To be or not to be a multi cloud company? Przewodnik dla kadry kierowniczej, doradców ds. chmury i architektów IT. (część 2)

Po przeczytaniu pierwszej części poradnika zauważymy, że strategie organizacji są różne. Część firm oparło swój biznes wyłącznie na j...

Ikona kalendarza

27 wrzesień

Sages wdraża system Omega-PSIR oraz System Oceny Pracowniczej w SGH

Wdrożenie Omega-PSIR i Systemu Oceny Pracowniczej w SGH. Sprawdź, jak nasze rozwiązania wspierają zarządzanie uczelnią i potencjałem ...

Ikona kalendarza

12 wrzesień

Playwright vs Cypress vs Selenium - czy warto postawić na nowe?

Playwright, Selenium czy Cypress? Odkryj kluczowe różnice i zalety każdego z tych narzędzi do automatyzacji testów aplikacji internet...