Checklista testowania API: od kodów statusu po automatyzację z AI
Testowanie API wymaga systematycznego podejścia: weryfikacja kodów statusu, struktury odpowiedzi, wartości granicznych oraz uwierzytelniania. Postman idealnie nadaje się do testów ręcznych, a Jest + axios — do ciągłej integracji i wdrażania (CI/CD). Sztuczna inteligencja przyspiesza generowanie przypadków testowych na podstawie OpenAPI, analizę odpowiedzi oraz dane graniczne.
Kody statusu
Sprawdź, czy kod odpowiada scenariuszowi:
| Scenariusz | Oczekiwany kod |
|----------|---------------|
| Pomyślne utworzenie | 201 |
| Zasób nie znaleziony | 404 |
| Brak uprawnień | 403 |
| Niezautoryzowany | 401 |
| Nieprawidłowe dane | 400/422 |
| Błąd serwera | 500 |
Typowy problem: kod 200 z błędem w treści — narusza zasady REST.
Struktura odpowiedzi
- Wszystkie pola wymagane są obecne.
- Typy danych: liczba zamiast ciągu — błąd.
- Obiekty zagnieżdżone nie mogą być null.
- Tablice nie mogą być mylone z obiektami.
Wartości graniczne
Testuj przypadki brzegowe:
- Puste ciało żądania.
- Brak wymaganego pola.
- Pusta wartość w polu.
- Liczby: 0, ujemne, MAX_INT.
- Ciągi: 1 znak, maksymalna długość, znaki specjalne, SQL/XSS.
Uwierzytelnianie i nagłówki
- Bez tokenu: 401.
- Wygasły token: 401.
- Inny token: 403.
- Użytkownik z prawem tylko do odczytu próbujący modyfikować: 403.
Nagłówki: Content-Type, CORS, limit szybkości.
Testowanie w Postman
Użyj zakładki Tests do skryptów JavaScript po otrzymaniu odpowiedzi.
Podstawowe aserty
// Status i czas
pm.test("Status 200", () => {
pm.response.to.have.status(200);
});
pm.test("Odpowiedź <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 i typy
const response = pm.response.json();
pm.test("id istnieje", () => {
pm.expect(response).to.have.property("id");
});
pm.test("id to liczba", () => {
pm.expect(response.id).to.be.a("number");
});
pm.test("email nie jest pusty", () => {
pm.expect(response.email).to.be.a("string").and.not.empty;
});
Negatywne: 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");
Zapisz token z /login w zmiennej: pm.environment.set("auth_token", response.token);. Użyj {{auth_token}} w nagłówkach.
Automatyczne testy z Jest + axios
Do CI/CD pisz testy w kodzie. Przykład dla /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żytkownik po 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 nieistniejący", 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 }
});
});
});
Uruchomienie: npx jest user.test.js.
Uniwersalna checklista
Scenariusze pozytywne:
- Poprawne dane → poprawny status.
- Struktura zgodna z dokumentacją.
- Pola wymagane.
- Poprawne typy danych.
- Czas odpowiedzi.
Scenariusze negatywne:
- Brak uwierzytelnienia → 401.
- Inny token → 403.
- Brak pola → 400/422.
- Nieprawidłowy typ → 400/422.
- Nieistniejący zasób → 404.
- Puste ciało → błąd.
Wartości graniczne:
- Minimalne/maksymalne wartości.
- 0/ujemne.
- Puste ciągi.
- Znaki specjalne/Unicode.
- Długie ciągi.
Bezpieczeństwo:
- Wstrzykiwanie SQL.
- XSS.
- IDOR (próba przejęcia ID).
Automatyzacja z pomocą sztucznej inteligencji
Sztuczna inteligencja generuje przypadki testowe na podstawie OpenAPI: pozytywne, negatywne, graniczne w formacie Jest.
Prompt: "Wygeneruj testy dla POST /users na podstawie schematu [schemat]. Użyj realistycznych danych."
Automatyczna analiza odpowiedzi przez LLM:
async function validateWithAI(prompt, response) {
// Wywołanie Claude/GPT do sprawdzenia trafności
// ...
return data.content[0].text.trim() === "YES";
}
Generowanie danych granicznych: AI proponuje RTL, emoji, niewidoczne znaki.
AI nie zastępuje zrozumienia logiki biznesowej (np. rabat <=100 dla użytkowników standardowych).
Co jest ważne
- Sprawdzaj kody statusu zgodnie z scenariuszem — unikaj 200 dla błędów.
- Testuj strukturę i typy odpowiedzi za pomocą asertów typu JSONPath.
- Automatyzuj przypadki negatywne i graniczne w CI/CD z Jest/axios.
- Wykorzystuj AI do rutyn: generowanie przypadków, analiza, dane brzegowe.
- Checklista to obowiązkowy szablon dla każdego punktu końcowego.
— Editorial Team
Brak komentarzy.