Thay đổi điều kiện mạng theo thời gian
Mất gói cố định 10 % là điều kiện phòng thí nghiệm. Kết nối thật xấu đi, hồi phục, khựng bốn giây rồi quay lại, và lỗi bạn đang tìm thường nằm ở sự thay đổi, không phải ở trạng thái ổn định.
Kịch bản là một dòng thời gian
Một tệp JSON. Mỗi bước nói ở giây này, các thiết lập này, và thứ bạn không nhắc đến giữ nguyên giá trị:
{
"loop": true,
"steps": [
{"at": 0, "settings": {"latency": 20, "jitter": 15, "down": 4096}},
{"at": 20, "settings": {"loss": 8, "latency": 180}},
{"at": 45, "settings": {"block_ip": "203.0.113.0/24"}},
{"at": 65, "settings": {"block_ip": "", "loss": 0, "latency": 20}}
]
}
Thời gian tính bằng giây kể từ lúc bắt đầu chạy, không phải khoảng cách giữa các bước. Với "loop": true, dòng thời gian bắt đầu lại khi hết, điều bạn cần cho một bài chạy dài: để nó chạy và dùng ứng dụng.
BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe
Số kịch bản có sẵn trong chương trình: 8
Trong thư mục scenarios cạnh tệp thực thi. Được đọc từ chính các tệp đó, nên đây là những gì bạn thực sự có:
| Tệp | Bước | Độ dài | Lặp lại |
|---|---|---|---|
blocked-endpoint.json | 4 | 65 s | có |
cafe-wifi.json | 5 | 85 s | có |
congested-vpn.json | 4 | 70 s | có |
failing-dns.json | 6 | 85 s | có |
mobile-lte-to-3g.json | 7 | 85 s | có |
overloaded-game-server.json | 5 | 72 s | có |
same-loss-in-runs.json | 5 | 100 s | có |
upload-drop-midway.json | 7 | 75 s | không |
Chúng là tệp văn bản thường: mở một tệp, đổi một con số, lưu. Tên cho biết chúng tái hiện gì: một quán cà phê đông người, kết nối di động tụt từ LTE xuống 3G, một lần tải lên chết giữa chừng, một máy chủ bị quá tải, DNS không còn trả lời.
Hai cách đơn giản hơn để có thay đổi
Viết kịch bản đáng giá khi thứ tự quan trọng. Khi không, hai thiết lập tự biến đổi:
- Bật tắt đường truyền: độ dài chu kỳ và phần nào của nó là thời gian mất mạng. Chu kỳ mười giây, bốn giây mất mạng, mãi mãi.
- Lịch tốc độ: một chuỗi tốc độ mà giới hạn đi qua, để kết nối xấu đi rồi hồi phục mà không cần tệp.
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
Vì sao nó chạy được khi ứng dụng đang chạy
Mọi thiết lập mà một kịch bản chạm tới đều được áp dụng trực tiếp lên phiên đang diễn ra: không cần khởi động lại ứng dụng, công cụ cũng vậy. Nhật ký sự kiện ghi lại từng bước khi nó xảy ra, nên khi có gì hỏng, bạn thấy nó theo sau thay đổi nào. Kết hợp với một seed và toàn bộ chuỗi, kể cả sự mất gói ngẫu nhiên bên trong, lặp lại chính xác.