Ako softvérový tester určite vieš, že testovanie API je neoddeliteľnou súčasťou tvorby softvéru. API (Application Programming Interface) je akoby most medzi rôznymi časťami softvéru, zabezpečujúci ich plynulú komunikáciu. Správne fungujúce API je dôležité pre integráciu a výkon aplikácií. Dnes sa pozrieme na to, ako môžeš efektívne testovať API s pomocou nástroja Cypress.io, ktorý ti umožní presne a rýchlo overiť API funkcionalitu.

Základné Pojmy Testovania API

Predtým, ako sa ponoríme do praktických aspektov testovania API so Cypress.io, je dôležité mať jasno v základných pojmoch.

Čo je to API?

API je súbor definícií a protokolov na vytváranie a integráciu aplikácií. Funguje ako kontrakt medzi poskytovateľom informácií a používateľom, určujúci, aké dáta sú potrebné od poskytovateľa a čo potrebuje používateľ od API.

API je súbor definícií a protokolov na vytváranie a integráciu aplikácií.

API vs REST API

Okrem API poznáme aj tzv. REST API. Existuje medzi nimi niekoľko rozdielov.

API:

  • Webové rozhrania API si často vyžadujú vyššiu úroveň zabezpečenia, pretože ich používa širšia škála používateľov s rôznymi účelmi.
  • Tak isto je rozdiel aj v protokoloch,  pretože pomocou webového rozhrania API môžeš komunikovať s používateľmi prostredníctvom protokolu HTTP alebo HTTPS.
  • Webové rozhranie API dokáže automaticky konvertovať údaje o requestoch (požiadavkách) a odpovediach do rôznych formátov vrátane formátov JSON, XML, BSON.

REST API:

  • Rozhrania REST API sú zvyčajne určené pre interných používateľov a aplikácie a preto vyžadujú menej bezpečnostných protokolov.
  • Všetka komunikácia v rámci rozhrania REST API je podporovaná len prostredníctvom protokolu HTTP.
  • REST API podporuje iba formát údajov JSON a preto je menej flexibilné.

Viac o testovaní REST API sa dočítaš v článku REST API Testing.

Dôležitosť testovania API

Testovanie API je vitálnou súčasťou integračného testovania, zameraného na overenie, či API spĺňa očakávania vo funkcionalite, spoľahlivosti, výkone a bezpečnosti. Vzhľadom na jeho rýchlosť a spoľahlivosť, testovanie API nadobúda  v softvérovom testovaní čoraz väčšiu dôležitosť.

API endpointy

API endpointy sú vstupnými bodmi v komunikačnom kanáli, kde dve softvérové aplikácie interagujú. Endpoint je v podstate server alebo služba, ktorá API umožňuje prístup k potrebným zdrojom. Napríklad API weather, tento endpoint by mohol byť použitý pre API, ktoré poskytuje predpoveď počasia. Slúži na získanie dát o počasí, ako je teplota, zrážky a iné meteorologické informácie.

Cypress: Prečo je Ideálny pre Testovanie API

Cypress.io je moderný nástroj pre testovanie, ktorý poskytuje používateľom – ako si ty – skvelé prostredie pre testovanie API. Jeho hlavnou prednosťou je integrácia s JavaScriptom a Node.js, čo eliminuje potrebu dodatočných knižníc, závislostí alebo ovládačov. Tento nástroj je obzvlášť obľúbený medzi vývojármi a testermi, ktorí si privykli na JavaScript, keďže nepotrebuje komplikovanú konfiguráciu a je ľahko inštalovateľný pomocou Node Package Manager (NPM).

Naše ďalšie článku s tématikou Cypress:

Úloha Test Runnera pri Cypress testing API

Test Runner v Cypress.io je jednou z kľúčových vlastností, ktorá výrazne zlepšuje efektivitu a pohodlie pri testovaní. Poskytuje vizuálnu a interaktívnu platformu na spúšťanie, sledovanie a debugovanie testov v reálnom čase.

Pri testovaní API v Cypress.io poskytuje Test Runner niekoľko konkrétnych výhod, ktoré zvyšujú efektivitu a presnosť testovania.

Pri testovaní API v Cypress.io poskytuje Test Runner niekoľko konkrétnych výhod, ktoré zvyšujú efektivitu a presnosť testovania. Tieto výhody sú zvlášť cenné v kontexte automatizovaných API testov, kde je dôležitá rýchla a presná validácia:

1. Detailné zobrazenie požiadaviek a odpovedí

  • Test Runner ti umožňuje vidieť presné detaily každej požiadavky a odpovede, vrátane metód, stavových kódov, hlavičiek a tiel požiadaviek/odpovedí. Toto je neoceniteľné pre rýchlu diagnostiku problémov a overenie, či API správne reaguje.

2. Vizualizácia postupu testov

  • Umožňuje sledovať postup jednotlivých testov v reálnom čase, čo zjednodušuje identifikáciu konkrétnych krokov, kde test zlyháva. Vizualizácia je obzvlášť užitočná pri debugovaní zložitých testovacích scenárov.

3. Možnosť debugovania testov v reálnom čase

  • Cypress Test Runner poskytuje možnosť „debuggingu“ v reálnom čase, čo znamená, že môžeš zastaviť vykonávanie testov v špecifickom bode a skontrolovať stav aplikácie alebo odpovede API. Toto využiješ pri hľadaní nejasností alebo pri testovaní nových API endpointov.

4. Historické zobrazenie výsledkov testov

  • Test Runner ukladá výsledky predchádzajúcich testov, čo umožňuje porovnávať súčasné výsledky s predchádzajúcimi a sledovať, ako sa zmeny v kóde alebo API prejavujú v testoch.

5. Integrácia s CI/CD

  • Cypress Test Runner môže byť integrovaný v rámci CI/CD pipeline, umožňujúc automatizované spúšťanie testov pri každom nasadení alebo aktualizácii kódu, čím zvyšuje spoľahlivosť doručovania softvéru.

6. Ľahké vytváranie a správa testov

  • Jednoduché rozhranie umožňuje rýchlo vytvárať nové testy a spravovať existujúce. Testy môžu byť organizované a spúšťané jednotlivo alebo v skupinách, čo zvyšuje produktivitu testera.

7. Zrozumiteľné chybové hlásenia

  • Chybové hlásenia v Test Runneri sú zrozumiteľné a poskytujú dostatok informácií pre rýchle nájdenie a fixovanie problémov.

Syntax a Použitie .request()

Testovanie API v Cypress.io sa zameriava na použitie príkazu .request(), ktorý je základným nástrojom pre odosielanie HTTP požiadaviek na server API a prijímanie odpovedí.

Príkaz cy.request() v Cypress.io umožňuje vytvárať rôzne typy HTTP požiadaviek, ako sú GET, POST, PUT, DELETE a ďalšie. Tento príkaz je mimoriadne flexibilný a môže byť použitý na testovanie širokého spektra API funkcií.

cy.request({

  method: 'METHOD', // Napríklad 'GET', 'POST', 'PUT', 'DELETE'
  url: 'URL_ENDPOINT', // URL endpointu, na ktorý sa požiadavka odosiela
  body: {
    // Objekt s dátami, ktoré sa majú odoslať, používa sa hlavne pri POST a PUT
  },
  headers: {
    // Objekt s prípadnými hlavičkami požiadavky
  },
  auth: {
    // Autentifikačné údaje, ak sú potrebné
  },
  // Môžu byť pridané ďalšie možnosti, ako timeout, cookies atď.

}).then((response) => {
  // Spracovanie odpovede
})

Dôležité Aspekty pri Cypress API testoch

  • Odpovede a ich statusové kódy: Overovanie odpovedí a ich statusových kódov je kľúčové. Napríklad, statusový kód 200 znamená úspech, zatiaľ čo kódy ako 404 alebo 500 signalizujú chyby.
  • Validácia obsahu odpovedí: Okrem statusových kódov je dôležité validovať aj samotný obsah odpovedí, ako sú dáta vrátené v odpovedi alebo špecifické hlavičky.
  • Autentifikácia a autorizácia: V prípade API vyžadujúcich autentifikáciu alebo autorizáciu, je potrebné zaistiť, že príkazy request() obsahujú príslušné autentifikačné údaje.

Cypress testing pre vzorovú aplikáciu: To-Do List

Ak chceš testovať API konkrétnej aplikácie, môžeme použiť príklad aplikácie na správu úloh (To-Do List). Táto aplikácia umožňuje používateľom vytvárať, zobraziť, aktualizovať a mazať úlohy.

Na tomto jednoduchom príklade vieme demonštrovať základný prístup k testovaniu API v Cypress, kde hlavným cieľom je overiť, že API správne reaguje na požiadavky a vracia očakávané dáta.

1.     Získanie zoznamu úloh (GET)

Cieľom GET požiadavky pre získanie zoznamu úloh v tomto príklade testu v Cypress bude overiť, že API aplikácie To-Do List správne funguje tým, že vráti kompletný a aktuálny zoznam úloh.

it('získa zoznam úloh', () => {
  cy.request('GET', '/api/todos').then((response) => {
    expect(response.status).to.eq(200); // Overenie, že stavový kód je 200
    expect(response.body).to.be.an('array'); // Overenie, že telo odpovede je pole
    // Tu môžeš pridať ďalšie overenia podľa štruktúry tvojho API
  });
});

Použitie then() v Cypress testoch umožňuje asynchrónne spracovanie odpovede z API požiadavky, čo zabezpečuje, že overenia sa vykonajú až po úplnom prijatí odpovede. Tento prístup zaručuje, že testy sú spoľahlivé a presné, keďže pracujú s kompletnými a aktuálnymi dátami z odpovede.

expect slúži na overenie rôznych aspektov tejto odpovede. Takto vieš overiť, či stavový kód odpovede zodpovedá očakávaniam (napríklad 200 pre úspešnú odpoveď) a či formát a obsah odpovede sú správne (napríklad overenie, že odpoveď je pole úloh).

2.    Vytvorenie Novej Úlohy (POST)

it('vytvorí novú úlohu', () => {

  cy.request('POST', '/api/todos', {
    title: 'Nakúpiť potraviny', // Názov úlohy
    completed: false, // Stav dokončenia úlohy
    description: 'Mlieko, chlieb, jablká' // Detailný popis úlohy

  }).then((response) => {

    expect(response.status).to.eq(201); // Overenie, že úloha bola úspešne vytvorená
    // Tu môžeš pridať ďalšie overenia, napríklad pre kontrolu obsahu v odpovedi

  });
});

V tomto príklade sa posiela POST požiadavka na endpoint /api/todos, pričom v tele požiadavky sa odosiela objekt s jednou vlastnosťou title. Po odoslaní požiadavky sa overuje, či server odpovedal s kódom 201, čo značí, že úloha bola úspešne vytvorená.

3.    Aktualizácia Existujúcej Úlohy (PUT)

it('aktualizuje úlohu nákupu potravín', () => {
  cy.request('PUT', '/api/todos/nakup-potravin', {

    title: 'Nákup na piknik', // Aktualizovaný názov úlohy
    completed: false, // Stav dokončenia úlohy
    description: 'Kúpiť hrozno, jahody, chlieb a uhorku' // Aktualizovaný popis úlohy

  }).then((response) => {

    expect(response.status).to.eq(200);
    expect(response.body).to.have.property('title', 'Nákup na piknik');
    expect(response.body).to.have.property('completed', false);
    expect(response.body).to.have.property('description', 'Kúpiť hrozno, jahody, chlieb a uhorku');

  });
});

V tomto príklade sa okrem zmeny názvu úlohy title pridávajú ďalšie parametre, ako je completed (stav dokončenia úlohy) a description (popis úlohy). Tieto parametre sú zahrnuté v tele PUT požiadavky. Po odoslaní požiadavky sa overuje, že server odpovedal s kódom 200 a že všetky tieto atribúty sú správne aktualizované v odpovedi od servera.

4.    Odstránenie Úlohy (DELETE)

Predpokladajme, že chceme odstrániť špecifickú úlohu

it('odstráni úlohu nákupu potravín', () => {

  cy.request('DELETE', '/api/todos/nakup-potravin').then((response) => {

    expect(response.status).to.eq(200); // Overenie, že úloha nákupu potravín bola úspešne odstránená

  });

});

V tomto príklade sa posiela DELETE požiadavka na endpoint /api/todos/nakup-potravin, kde nakup-potravin je ID úlohy, ktorú chceme odstrániť. Po odoslaní požiadavky sa overuje, či server odpovedal s kódom 200, čo značí, že úloha bola úspešne odstránená.

Cypress-plugin-api

Cypress-plugin-api je plugin pre Cypress, ktorý rozširuje jeho funkcie pre testovanie API, poskytujúc pokročilé možnosti pre manipuláciu s požiadavkami a odpoveďami. Tento plugin uľahčuje testovanie RESTful API a zvyšuje efektivitu a presnosť testov. Pre viac informácií a podrobnosti o použití cypress-plugin-api môžeš navštíviť jeho oficiálnu dokumentáciu alebo repozitár na GitHub (prečítaj si náš článok Git, Github a Gitlab), kde nájdeš inštrukcie na inštaláciu, konfiguráciu a príklady použitia.

Záver

Cypress poskytuje výkonný a flexibilný nástroj pre testovanie webových aplikácií, vrátane API. Výhodou Cypressu je tiež jeho intuitívne rozhranie a bohatá komunita, ktorá poskytuje podporu a pravidelné aktualizácie. Pre dosiahnutie najlepších výsledkov sa odporúča využiť všetky dostupné zdroje a dokumentáciu, ktoré Cypress poskytuje, vrátane pluginov ako cypress-plugin-api, ktoré ešte viac rozširujú jeho možnosti.

Ak si IT tester alebo automatizovaný tester, vieš po nemecky a hľadáš prácu, pozri naše benefity pre zamestnancov a reaguj na voľné pracovné miesta.

O autorovi

Katarína Kučáková

Software Test Engineer

Moja cesta k testovaniu softvéru sa začala v roku 2019 až po štúdiu ekonómie a pracovných skúsenostiach v iných odvetviach. To mi pomohlo vnímať IT svet v rôznych súvislostiach. Ten totiž ponúka neustále nové výzvy, pre ktoré rada hľadám riešenia. Obľubujem oddych pri čítaní, turistiku alebo lyžovanie. LinkedIn

Daj nám o sebe vedieť