Меняйте условия сети с течением времени
Фиксированные 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, и вся последовательность, включая случайные потери внутри неё, повторится точь-в-точь.