Mmaiqai.com
🔗 API Testing · Chương 3 · Mục 3.3

Test đồng bộ dữ liệu giữa API, DB và message queue

🎯 Mục tiêu học: nhiều hệ thống xử lý bất đồng bộ qua message queue — API trả kết quả ngay, nhưng dữ liệu thực sự "ổn định" sau đó vài giây hoặc lâu hơn. Test kiểu này cần cách tiếp cận khác hẳn so với gọi xong assert ngay.

Ví dụ minh hoạ

POST /v1/orders  →  Response 201 ngay lập tức (status: PENDING)
                     →  đồng thời đẩy message "order.created" vào queue

Queue "order.created"  →  Email Service tiêu thụ message, gửi email xác nhận
                       →  Inventory Service tiêu thụ message, cập nhật tồn kho

Nếu Tester chỉ gọi API rồi lập tức kiểm tra email đã gửi/kho đã trừ, test sẽ FAIL giả (flaky) vì message có thể chưa được xử lý xong — đây không phải bug, mà là đặc thù bất đồng bộ cần test đúng cách.

Checklist test đồng bộ dữ liệu bất đồng bộ

Độ trễ xử lý bất đồng bộ

Mã TCNội dungKỳ vọng
TC-SYNC-01Gọi API tạo đơn, sau đó chờ/poll (không assert ngay) tới khi tồn kho được cập nhậtAPI trả response nhanh (không chờ xử lý xong); dữ liệu cuối cùng đúng sau khoảng thời gian hợp lý

Message xử lý lỗi

Mã TCNội dungKỳ vọng
TC-SYNC-02Email Service lỗi khi xử lý message 'order.created'Đơn hàng vẫn giữ đúng trạng thái nghiệp vụ chính (PENDING/PAID) — lỗi ở service phụ (gửi email) không được làm hỏng luồng chính
TC-SYNC-03Message rơi vào dead-letter queue sau nhiều lần retry thất bạiCó cơ chế giám sát/cảnh báo, không để message 'mất tích' âm thầm

Message bị xử lý trùng (at-least-once delivery)

Mã TCNội dungKỳ vọng
TC-SYNC-04Message 'order.created' được deliver 2 lần cho cùng 1 order (hành vi phổ biến của nhiều message queue)Không gửi 2 email, không trừ tồn kho 2 lần — consumer phải tự xử lý idempotency theo orderId

Thứ tự xử lý message

Mã TCNội dungKỳ vọng
TC-SYNC-052 message cập nhật trạng thái liên tiếp của cùng 1 đơn hàng (vd PAID rồi SHIPPED) tới không đúng thứ tựNếu nghiệp vụ yêu cầu thứ tự, hệ thống phải đảm bảo xử lý đúng tuần tự hoặc phát hiện được message tới sai thứ tự

📌 Ghi nhớ

Với hệ thống bất đồng bộ, luôn dùng chờ có điều kiện (poll/retry với timeout) thay vì assert ngay sau khi gọi API — nếu không, test tự tạo ra lỗi giả (flaky test) chứ không phản ánh bug thật.

📖 Thuật ngữ Anh–Việt (mục này)

Đề thi dùng thuật ngữ tiếng Anh — nhớ đúng cụm bên trái. Bấm 🔊 để nghe từng từ, hoặc "Đọc tất cả" để nghe lần lượt Anh → (vài giây) → Việt.

Thuật ngữ (EN)Nghĩa & ghi nhớ nhanh
Message queueHàng đợi tin nhắn — cơ chế truyền dữ liệu bất đồng bộ giữa các service (vd Kafka, RabbitMQ)
Eventual consistencyNhất quán cuối cùng — dữ liệu sẽ đúng sau một khoảng thời gian, không nhất thiết ngay lập tức
At-least-once deliveryĐảm bảo message được xử lý ít nhất 1 lần — nhưng có thể bị gửi trùng nhiều lần
Dead-letter queueHàng đợi chứa message xử lý thất bại nhiều lần, không đưa được vào luồng chính
Flaky testTest không ổn định — lúc pass lúc fail dù code không đổi, thường do race condition/thời gian chờ sai

📎 Nội dung do maiqai.com biên soạn — luồng xử lý trong ví dụ chỉ mang tính minh hoạ, không thuộc hệ thống thật nào.