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.
Nội dung bài
Thuật ngữ trong bài (17)
- build · bản dựng
- CI · tích hợp liên tục
- pull request · yêu cầu gộp mã
- bug · lỗi
- emulator · máy giả lập
- unit test · kiểm thử đơn vị
- release · bản phát hành
- chaos engineering · chủ động gây sự cố
- on-call · ca trực
- root cause · nguyên nhân gốc
- API · giao diện lập trình
- endpoint · điểm gọi
- gateway · cổng vào hệ thống
- idempotency · gọi lại không nhân đôi
- proxy · lớp trung gian
- retry · thử lại
- timeout · hạn chờ
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ì
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.
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.
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.
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.
Gửi lần hai bằng đúng key cũ
Mô phỏng user bấm lại.
So hai response
Phải giống hệt nhau, kể cả mã đơn.
Đế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.

