Automatyzacja testów API
Dodajesz nowe pole do odpowiedzi API i zapominasz zaktualizować definicję typów klienta mobilnego. Aplikacja webowa radzi sobie elegancko, bo ignoruje nieznane pola. Aplikacja iOS crashuje, bo jej ścisły decoder odrzuca niespodziewaną właściwość. Trzech różnych konsumentów, trzy różne oczekiwania i żadnych testów kontraktowych, które złapałyby niedopasowanie. Testowanie API to klej, który trzyma systemy rozproszone razem.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- Kompleksowe generowanie testów REST API ze specyfikacji OpenAPI lub analizy routów
- Testowanie zapytań i mutacji GraphQL z walidacją schematu
- Wzorce testowania kontraktowego zapobiegające dryfowi konsument-dostawca
- Testowanie uwierzytelniania i autoryzacji dla każdego endpointu
- Prompty AI do testowania obsługi błędów, edge case’ów i rate limitingu
Generowanie testów REST API
Dział zatytułowany „Generowanie testów REST API”@src/routes/ @src/schemas/Generate API tests for all endpoints in our Express application:
For each route file in /src/routes/:1. Read the route definitions and Zod validation schemas2. Generate tests for: - Valid request (200 response with correct shape) - Missing required fields (400 with validation errors) - Invalid field types (400 with specific error messages) - Authentication required (401 without token) - Authorization check (403 with wrong role) - Resource not found (404 with appropriate message)
Use supertest for HTTP assertions.Use our test factories for request body generation.Follow patterns in @tests/api/auth.api.test.tsSave to /tests/api/{route-name}.api.test.tsclaude "Generate comprehensive API tests for our Express application:
1. Discover all routes: scan /src/routes/ for Express router definitions2. For each endpoint (method + path), generate: - Happy path test with valid data - Validation failure tests (one per required field) - Auth tests (no token, expired token, wrong role) - 404 test for non-existent resources - Duplicate/conflict tests where applicable (409)
3. Create test infrastructure: - /tests/api/helpers/request.ts (authenticated request helpers) - /tests/api/helpers/seed.ts (database seeding for API tests)
4. Run all API tests against a test server5. Fix any failures
Use supertest + Jest. Save to /tests/api/"Generate API test coverage for all endpoints:1. Discover routes from the application code2. Generate tests for success, validation, auth, and error cases3. Set up test database seeding4. Run tests and fix failures5. Create PR with the test suite and coverage reportTestowanie GraphQL
Dział zatytułowany „Testowanie GraphQL”Testowanie kontraktowe
Dział zatytułowany „Testowanie kontraktowe”Zapewnienie kompatybilności konsument-dostawca
Dział zatytułowany „Zapewnienie kompatybilności konsument-dostawca”Walidacja odpowiedzi API
Dział zatytułowany „Walidacja odpowiedzi API”Gdy coś się zepsuje
Dział zatytułowany „Gdy coś się zepsuje”“Testy API są kruche, bo zależą od stanu bazy danych.” Użyj transakcji bazodanowych z rollback po każdym teście lub seeduj konkretne dane dla każdego testu w hooku beforeEach. Nigdy nie współdziel stanu bazy danych między plikami testowymi.
“Testy kontraktowe failują, bo dostawca zmienił się celowo.” Tak powinno działać. Test kontraktowy złapał breaking change zanim dotarł do konsumentów. Zaktualizuj kontrakty konsumentów, powiadom zespoły konsumentów i zweryfikuj, że poradzą sobie ze zmianą przed wdrożeniem dostawcy.
“Testy przechodzą, ale API zachowuje się inaczej na produkcji.” Sprawdź zachowanie specyficzne dla środowiska: feature flagi, rate limity, cache’owanie, middleware działający tylko na produkcji. Twoje środowisko testowe powinno maksymalnie odzwierciedlać konfigurację produkcyjną.
“Testy GraphQL są trudne w utrzymaniu, gdy schemat ewoluuje.” Generuj testy z samego schematu. Gdy schemat się zmienia, przegeneruj testy. Utrzymuj oddzielną warstwę testów logiki biznesowej testujących zachowanie niezależnie od struktury schematu.