
Business & Integration IT konzultant
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.
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.
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.
Okrem API poznáme aj tzv. REST API. Existuje medzi nimi niekoľko rozdielov.
API:
REST API:
Viac o testovaní REST API sa dočítaš v článku REST API Testing.
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 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.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:
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. Tieto výhody sú zvlášť cenné v kontexte automatizovaných API testov, kde je dôležitá rýchla a presná validácia:
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
})
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.
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).
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á.
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.
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 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.
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.