Testing Cơ bản
Nên đọc theo thứ tự: trước hết biết test nào bắt lỗi nào, sau đó biết vì sao test mất tín hiệu và sửa, rồi tới load test và test với dependency thật.
Phù hợp cho dev backend mới viết test hoặc tech lead đang dọn một CI hay đỏ vô cớ. Nhóm chưa bàn về mutation testing hay test frontend.
Lộ trình đọc
Phần tiêu đề “Lộ trình đọc”| # | Bài | Bạn sẽ trả lời được | Level | Đọc |
|---|---|---|---|---|
| 1 | Unit, integration, e2e | Lỗi này nên bắt ở tầng nào? Khi nào cần DB thật hay contract test? Pyramid hay trophy? | Basic | ~12 phút |
| 2 | Flaky test | Vì sao test lúc xanh lúc đỏ? Sửa clock, thứ tự, state chung, async thế nào? Khi nào quarantine? | Basic | ~12 phút |
| 3 | Load testing với k6 | API chịu được bao nhiêu RPS với p95 mục tiêu? Vì sao closed model che giấu server chậm? Threshold làm CI fail thế nào? | Intermediate | ~15 phút |
| 4 | Testcontainers | Chạy test với Postgres, Redis, Kafka thật mà không chậm, không dính state chung? Rollback, truncate hay template database? | Intermediate | ~15 phút |
Bài 2 giả định bạn đã nắm ranh giới các tầng test ở bài 1.
Nếu bạn gặp…
Phần tiêu đề “Nếu bạn gặp…”| Triệu chứng | Đọc |
|---|---|
| Unit test xanh nhưng production vẫn lỗi ở response/field | Lỗi nào, test tầng nào |
| Mock repository pass nhưng lỗi unique constraint ở production | Database thật và Testcontainers |
| Hai service lệch schema API sau deploy | Contract test |
| CI đỏ, rerun thì xanh | Phân loại nguyên nhân flaky |
Test TTL/expiry dùng sleep và hay fail |
Sleep và clock tiêm vào |
| Chỉ fail khi chạy song song hoặc cả suite | Phân loại nguyên nhân flaky |
| Nhóm quen retry cho đến khi xanh | Quarantine và chính sách flake |
Liên quan
Phần tiêu đề “Liên quan”Ranh giới test dễ vạch hơn khi ranh giới code đã rõ: Strategy pattern tách phần biến thiên thành policy test được độc lập, còn modular monolith bàn về ranh giới ở cấp module. Rủi ro persistence xem ACID và transaction.