Menguasai test strategy untuk microservices termasuk mocking, service virtualization, dan testing patterns untuk distributed systems

Setelah di episode 4 kita mempelajari contract testing, pada episode ini kita mempelajari API & microservices quality — bagaimana menguji API dan microservices secara komprehensif. Microservices architecture menghadirkan tantangan unik untuk quality engineering.
Mengapa microservices quality penting? Karena dalam microservices, satu request bisa melalui banyak service. Testing harus memastikan setiap service berfungsi dengan benar DAN interaksi antara service berfungsi dengan benar.
Microservices Testing Pyramid:
├── Unit Tests (per service):
│ ├── Business logic testing
│ ├── Isolated testing
│ └── Fast feedback
├── Integration Tests (antara service):
│ ├── API testing
│ ├── Database testing
│ └── Message queue testing
├── Contract Tests (API compatibility):
│ ├── Consumer-driven contracts
│ └── Provider verification
├── Component Tests (service behavior):
│ ├── Service behavior testing
│ └── Mock dependencies
└── E2E Tests (critical paths):
├── User flow testing
└── Minimal coverageMicroservices Testing Patterns:
├── Service Virtualization:
│ ├── Mock external services
│ ├── Stub responses
│ └── Isolate testing
├── Consumer-Driven Contracts:
│ ├── Pact
│ ├── API contracts
│ └── Compatibility testing
├── Decentralized Testing:
│ ├── Per-service test suite
│ ├── Own test data
│ └── Independent deployment
└── Observability-Driven:
├── Monitor in production
├── Trace requests
└── Alert on anomaliesNote
Microservices testing membutuhkan balance antara testing per-service dan testing inter-service. Terlalu banyak E2E testing akan lambat dan flaky. Fokus pada contract testing dan integration testing yang targeted.
Mocking Strategies:
├── API Mocking:
│ ├── WireMock
│ ├── MockServer
│ └── MSW (Mock Service Worker)
├── Service Virtualization:
│ ├── Mountebank
│ ├── Hoverfly
│ └── Traffic Parrot
└── Database Mocking:
├── In-memory database
├── Test database
└── Docker container// API Mock dengan MSW
import { rest } from 'msw';
import { setupServer } from 'msw/node';
const server = setupServer(
rest.get('/api/users/:id', (req, res, ctx) => {
return res(
ctx.json({
id: 1,
name: 'John Doe',
email: 'john@test.com',
})
);
})
);
beforeAll(() => server.listen());
afterEach(() => server.resetHandlers());
afterAll(() => server.close());microservices_test_plan:
per_service:
- unit_tests: "business logic"
- integration_tests: "database, cache"
- contract_tests: "API compatibility"
inter_service:
- integration_tests: "API calls"
- contract_tests: "consumer-driven"
- e2e_tests: "critical paths"
infrastructure:
- load_balancer: "routing"
- message_queue: "async communication"
- cache: "performance"
observability:
- logging: "centralized"
- tracing: "distributed"
- metrics: "performance"Tip
Gunakan Docker Compose untuk spinning up microservices environment untuk testing. Ini memudikan testing inter-service tanpa dependency ke infrastructure production.
Pada episode 5 ini, kalian telah mempelajari API & microservices quality.
Inti yang harus dibawa pulang:
Di episode 6 selanjutnya, kita akan membahas frontend quality engineering — bagaimana menguji frontend dengan component testing, visual regression, dan accessibility. Sampai jumpa di episode 6!