Mmaiqai.com
⚡ API Testing · Chương 5 · Mục 5.3

Race condition & lost update

🎯 Mục tiêu học: hiểu vì sao 2 request "đúng logic" khi test riêng lẻ vẫn có thể gây sai kết quả nếu chạy đồng thời — loại lỗi khó phát hiện nhất vì không xảy ra ổn định mỗi lần test.

Ví dụ minh hoạ: lost update khi trừ tồn kho

Tồn kho SKU001 hiện còn: 1

Request A (t=0ms): đọc tồn kho → thấy 1 → cho phép đặt hàng → ghi tồn kho = 0
Request B (t=1ms): đọc tồn kho → thấy 1 (A CHƯA KỊP GHI XONG) → cho phép đặt hàng → ghi tồn kho = 0

Kết quả: CẢ 2 request đều "đặt hàng thành công" dù chỉ còn đúng 1 sản phẩm
→ bán vượt tồn kho (oversell), tồn kho cuối cùng bị sai (đáng lẽ phải là -1
nhưng lại hiển thị 0, một request bị "mất" hoàn toàn — đây là lost update).

Đây là hệ quả trực tiếp của việc thiếu kiểm soát khi nhiều request cùng đọc-sửa-ghi (read-modify-write) trên cùng 1 dữ liệu — đúng chủ đề "đồng thời" đã nhắc ở test GET/PUT (Chương 2) nhưng giờ xét ở góc độ hiệu năng/tải cao.

Checklist kiểm tra

Cách kiểm tra

Mã TCNội dungKỳ vọng
TC-RACE-01Gửi đồng thời N request (vd 20 request cùng lúc) vào cùng 1 tài nguyên có giới hạn số lượng (vd chỉ còn 1 tồn kho)Tổng số request được xử lý 'thành công' không được vượt quá giới hạn thực tế (chỉ đúng 1 trong N request thắng)
TC-RACE-02Kiểm tra cơ chế khoá dữ liệu (locking) hoặc kiểm soát phiên bản (optimistic concurrency, vd version field) có được áp dụng ở thao tác ghi quan trọng khôngCó cơ chế rõ ràng ngăn 2 request ghi đè lên nhau mất dữ liệu
TC-RACE-03Chạy lại cùng 1 kịch bản race condition nhiều lần (vd 10 lượt)Kết quả nhất quán ở mọi lượt chạy — nếu lúc đúng lúc sai, đây là dấu hiệu rõ ràng của race condition chưa được xử lý

📌 Ghi nhớ

Test race condition không thể chỉ chạy 1 lần — vì bản chất phụ thuộc vào thời điểm (timing) của các request, cần chạy lặp lại nhiều lượt để tăng khả năng "bắt được" lỗi, giống hệt nguyên tắc đã áp dụng ở test đồng thời của GET/PUT.

📖 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
Race conditionĐiều kiện tranh chấp — kết quả phụ thuộc vào thứ tự/thời điểm thực thi không kiểm soát được
Lost updateCập nhật bị mất — 1 thay đổi bị ghi đè mất do 2 request cùng đọc-sửa-ghi chồng lên nhau
Optimistic concurrencyKiểm soát tương tranh lạc quan — dùng version/timestamp để phát hiện xung đột khi ghi
OversellBán vượt tồn kho — hệ quả kinh doanh thực tế của lost update trong quản lý kho

📎 Nội dung do maiqai.com biên soạn — ví dụ minh hoạ, không thuộc hệ thống thật nào.