AllianceProject Handbook
← Knowledge

Quy mô và hiệu năng

Chạy network chaos test thế nào

Bài kiểm thử đặc thù mobile nói phải test những điều kiện mạng nào. Bài này nói dựng chúng bằng công cụ gì, cái nào đẩy được vào CI, và quy trình chứng minh idempotency thật sự hoạt động.

Cập nhật 14/09/2026kiểm thửmạngshift left

Kiểm thử đặc thù mobile liệt kê bảy điều kiện mạng phải giả lập và năm câu hỏi kiểm tra cho mỗi điều kiện. Bài đó dừng ở phải làm gì. Bài này là phần làm bằng cách nào — công cụ, quy trình, và ranh giới giữa việc máy chạy được và việc người phải ngồi làm.

Ba mức giả lập, chọn theo chi phí

Ba mức này không thay thế nhau. Mức rẻ chạy thường xuyên, mức đắt chạy trước release.

Mức 1 — giả lập ở tầng code

  • Inject một lớp mạng giả vào test, trả về timeout hoặc lỗi theo kịch bản
  • Chạy trong unit test, tính bằng mili giây
  • Chạy được mỗi pull request, không cần thiết bị
  • Không bắt được lỗi ở tầng OS, socket, hay DNS

Mức 2 — giả lập ở tầng proxy

  • Đặt proxy giữa app và server, chủ động cắt, chậm, hoặc nuốt response
  • Cần thiết bị hoặc emulator trỏ qua proxy
  • Chạy được trong CI nếu có emulator, chậm hơn mức 1 vài bậc
  • Vẫn không tái hiện được chuyển Wi-Fi sang 4G

Mức 3 — thiết bị thật, mạng thật

Người cầm máy, đi ra khỏi vùng phủ Wi-Fi, vào thang máy, bật chế độ máy bay giữa lúc thao tác. Không tự động hoá được, không bỏ được.

Vì sao vẫn phải có mức 3

Mức 1 và 2 chỉ tái hiện được lỗi mà người viết test đã nghĩ ra. Mức 3 là chặng duy nhất bắt được lỗi chưa ai nghĩ tới, và ở 500.000 user thì lỗi chưa ai nghĩ tới vẫn là hàng trăm người gặp mỗi ngày.

Bảy điều kiện, dựng bằng gì

Dựng ở mức
Công cụ thường dùng
Request đi, response mất
1 và 2
Proxy nuốt response sau khi đã chuyển tiếp
Chuyển Wi-Fi sang 4G
3
Người thao tác trên máy thật
Băng thông 100–500 Kbps
2
Network Link Conditioner (iOS), network profile của Android emulator
Latency cao
1 và 2
Thêm delay cố định ở proxy hoặc ở lớp mạng giả
Packet loss, connection reset
2
Proxy chủ động reset kết nối giữa chừng
API trả 500 hoặc 503
1
Lớp mạng giả trả mã lỗi theo kịch bản
Timeout ở tầng gateway
1 và 2
Đặt timeout gateway thấp hơn thời gian xử lý thật

Chứng minh idempotency, sáu bước

Đây là quy trình phải chạy cho từng endpoint ghi dữ liệu, không phải chạy một lần cho cả hệ thống.

  1. Client sinh key, ghi lại key đó

    Key phải sinh trước lần gửi đầu tiên, không sinh lại khi retry.

  2. Gửi lần một, để proxy nuốt response

    App không biết kết quả — đúng trạng thái cần test.

  3. Kiểm phía server: đơn đã tạo chưa

    Nếu chưa tạo thì kịch bản dựng sai, quay lại bước 2.

  4. Gửi lần hai bằng đúng key cũ

    Mô phỏng user bấm lại.

  5. So hai response

    Phải giống hệt nhau, kể cả mã đơn.

  6. Đếm lại số đơn phía server

    Phải là một. Đây là bước duy nhất chứng minh được, năm bước trên chỉ là điều kiện.

Cái gì đẩy được vào CI

Chạy máy, mỗi pull request đụng endpoint ghi

Sáu bước ở trên với proxy giả lập. Tốn vài giây, chặn được lỗi trước khi nó rời máy của dev.

Chạy máy, mỗi đêm

Bảy điều kiện mạng ở mức 1 và 2, chạy trên emulator, cho toàn bộ luồng chạm tiền.

Chạy người, trước mỗi release

Chuyển Wi-Fi sang 4G, vào thang máy, chế độ máy bay giữa thao tác. Kết quả ghi vào checklist release, không ghi vào đầu ai.

Không đẩy vào CI

Test mạng thật trên thiết bị thật. Nó chậm, không ổn định, và một test đỏ ngẫu nhiên trong CI sẽ bị người ta bỏ qua sau vài lần.

Giới hạn

Proxy không phải mạng thật

Nó tái hiện được triệu chứng, không tái hiện được nguyên nhân. Lỗi do chồng giao thức của nhà mạng chỉ lộ ở mức 3.