Č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 |
|--------|---------------|
| Úspěšné vytvoření | 201 |
| Zdroj nenalezen | 404 |
| Nedostatečná oprávnění | 403 |
| Neautorizovaný přístup | 401 |
| Neplatná data | 400/422 |
| 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
Zatím žádné komentáře.