Змінюйте умови мережі з часом
Постійна втрата 10 % є лабораторною умовою. Справжні з’єднання погіршуються, відновлюються, зависають на чотири секунди й повертаються, а помилка, яку ви ловите, зазвичай живе у зміні, а не в сталому стані.
Сценарій є часовою шкалою
Один файл JSON. Кожен крок каже на цій секунді ці налаштування, а все, що ви не згадуєте, зберігає значення:
{
"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}}
]
}
Час задається в секундах від початку запуску, а не проміжками між кроками. З "loop": true часова шкала починається знову, коли закінчується, що й потрібно для довгого витривалісного тесту: залиште її працювати й користуйтеся застосунком.
BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe
Готових сценаріїв у програмі: 8
У теці scenarios поруч із виконуваним файлом. Прочитано з цих файлів, тож це саме те, що ви справді маєте:
| Файл | Кроки | Тривалість | Повторюється |
|---|---|---|---|
blocked-endpoint.json | 4 | 65 s | так |
cafe-wifi.json | 5 | 85 s | так |
congested-vpn.json | 4 | 70 s | так |
failing-dns.json | 6 | 85 s | так |
mobile-lte-to-3g.json | 7 | 85 s | так |
overloaded-game-server.json | 5 | 72 s | так |
same-loss-in-runs.json | 5 | 100 s | так |
upload-drop-midway.json | 7 | 75 s | ні |
Це звичайні текстові файли: відкрийте один, змініть число, збережіть. Назви кажуть, що вони відтворюють: переповнене кафе, мобільне з’єднання, що падає з LTE на 3G, вивантаження, яке гине на півдорозі, перевантажений сервер, DNS, який перестає відповідати.
Два простіші способи отримати зміну
Сценарій варто писати, коли важлива послідовність. Коли ні, два налаштування змінюються самі:
- Вмикання й вимикання каналу: довжина циклу та яка його частина є простоєм. Цикли по десять секунд, чотири секунди простою, без кінця.
- Графік швидкості: низка швидкостей, якими проходить обмеження, щоб з’єднання погіршувалося й відновлювалося без файлу.
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
Чому це працює, поки застосунок запущений
Кожне налаштування, якого торкається сценарій, застосовується наживо до сеансу, що вже триває: застосунок не потрібно перезапускати, і інструмент теж. Журнал подій записує кожен крок, коли він відбувається, тож коли щось ламається, ви бачите, за якою зміною це сталося. Поєднайте це з seed, і вся послідовність, зокрема випадкова втрата в ній, повторюється точно.