Zpět na domů

Testování API: kontrolní seznam a autotesty

Článek popisuje systémový přístup k testování API: kategorie kontrol, příklady v Postman a Jest+axios, kontrolní seznam, role AI v generování případů. Vhodné pro middle/senior QA a dev.

Testy API: od Postman po AI-generaci případů
Advertisement 728x90

Český čeklist pro testování API: od stavových kódů až po automatizaci s AI

Testování API vyžaduje systematický přístup: ověření stavových kódů, struktury odpovědí, hranicích hodnot a ověření autentizace. Postman je vhodný pro ruční testování, zatímco Jest spolu s axiosem se hodí pro CI/CD. Umělá inteligence urychlí generování testovacích scénářů na základě OpenAPI, analýzu odpovědí a testování hranice dat.

Stavové kódy

Ověřte, že kód odpovídá očekávanému scénáři:

| Scénář | Očekávaný kód |

Google AdInline article slot

|--------|---------------|

| Úspěšné vytvoření | 201 |

| Zdroj nenalezen | 404 |

Google AdInline article slot

| Nedostatečná oprávnění | 403 |

| Neautorizovaný přístup | 401 |

| Neplatná data | 400/422 |

Google AdInline article slot

| Chyba serveru | 500 |

Běžný problém: kód 200 s chybou v těle – to porušuje REST principy.

Struktura odpovědi

  • Všechna povinná pole jsou přítomna.
  • Datové typy: číslo místo řetězce – chyba.
  • Vnořené objekty nejsou null.
  • Pole nejsou zaměňována s objekty.

Hranice hodnot

Testujte edge case scénáře:

  • Prázdné tělo požadavku.
  • Chybějící povinné pole.
  • Prázdný řetězec v poli.
  • Čísla: 0, záporná, MAX_INT.
  • Řetězce: 1 znak, max_length, speciální znaky, SQL/XSS.

Autentizace a hlavičky

  • Bez tokenu: 401.
  • Vypršelý token: 401.
  • Cizí token: 403.
  • Uživatel s právy jen ke čtení při zápisu: 403.

Hlavičky: Content-Type, CORS, rate-limit.

Testování v Postmanu

Použijte kartu Tests pro JavaScript skripty po přijetí odpovědi.

Základní tvrzení

// Stav a doba odezvy
pm.test("Stav 200", () => {
    pm.response.to.have.status(200);
});

pm.test("Odpověď <500ms", () => {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// Content-Type
pm.test("JSON", () => {
    pm.response.to.have.header("Content-Type", "application/json; charset=utf-8");
});

Struktura a typy

const response = pm.response.json();

pm.test("id je přítomno", () => {
    pm.expect(response).to.have.property("id");
});

pm.test("id je číslo", () => {
    pm.expect(response.id).to.be.a("number");
});

pm.test("email není prázdný", () => {
    pm.expect(response.email).to.be.a("string").and.not.empty;
});

Negativní: bez tokenu

pm.test("401 bez tokenu", () => {
    pm.response.to.have.status(401);
});

const response = pm.response.json();
pm.expect(response).to.have.property("message");

Uložte token z /login do proměnné: pm.environment.set("auth_token", response.token);. Použijte {{auth_token}} v hlavičkách.

Automatizované testy s Jest + axios

Pro CI/CD pište testy jako kód. Příklad pro /users/:id:

const axios = require("axios");

const BASE_URL = "https://api.example.com";
const TOKEN = process.env.API_TOKEN;

const client = axios.create({
    baseURL: BASE_URL,
    headers: { Authorization: `Bearer ${TOKEN}` }
});

describe("GET /users/:id", () => {

    test("Uživatel podle ID", async () => {
        const response = await client.get("/users/1");

        expect(response.status).toBe(200);
        expect(response.data).toMatchObject({
            id: expect.any(Number),
            email: expect.any(String),
            name: expect.any(String),
        });
    });

    test("404 neexistující", async () => {
        await expect(client.get("/users/999999")).rejects.toMatchObject({
            response: { status: 404 }
        });
    });

    test("401 bez tokenu", async () => {
        await expect(axios.get(`${BASE_URL}/users/1`)).rejects.toMatchObject({
            response: { status: 401 }
        });
    });

});

Spusťte: npx jest user.test.js.

Univerzální čeklist

Pozitivní scénáře:

  • Platná data → správný stav.
  • Struktura podle dokumentace.
  • Povinná pole.
  • Datové typy.
  • Doba odezvy.

Negativní:

  • Bez autentizace → 401.
  • Cizí token → 403.
  • Chybějící pole → 400/422.
  • Nesprávný typ → 400/422.
  • Neexistující → 404.
  • Prázdné tělo → chyba.

Hranice:

  • Min/max hodnoty.
  • 0/záporná čísla.
  • Prázdný řetězec.
  • Speciální znaky/Unicode.
  • Dlouhé řetězce.

Bezpečnost:

  • SQL injekce.
  • XSS.
  • IDOR (procházení ID).

Automatizace s umělou inteligencí

AI generuje testovací scénáře z OpenAPI: pozitivní/negativní/hranice ve formátu Jest.

Prompt: "Vygeneruj testy pro POST /users podle schématu [schéma]. Realistická data."

Automatická analýza odpovědí prostřednictvím LLM:

async function validateWithAI(prompt, response) {
    // Volání Claude/GPT pro ověření relevantnosti
    // ...
    return data.content[0].text.trim() === "YES";
}

Generování hranicích dat: AI navrhuje RTL, emoji, neviditelné znaky.

AI nepřebírá pochopení obchodní logiky (např. discount <=100 pro non-premium).

Co je důležité

  • Ověřujte stavové kódy přesně podle scénáře, vyhýbejte se používání 200 pro chyby.
  • Testujte strukturu a typy odpovědí pomocí JSONPath podobných tvrzení.
  • Automatizujte negativní a hranice scénáře v CI/CD pomocí Jest/axios.
  • Používejte AI pro rutinní úkoly: generování scénářů, analýzu, hranice dat.
  • Čeklist je povinný šablona pro každý endpoint.

— Editorial Team

Advertisement 728x90

Číst dál