Bean Network Tester

Имитация плохой сети в CI

Окно необязательно. Тот же исполняемый файл работает как инструмент командной строки, сам завершается через заданное время и сообщает о случившемся так, чтобы пайплайн мог это прочитать.

Как выглядит шаг

Портите сеть на время теста, а затем дайте ей остановиться самой. Нет шага очистки, о котором можно забыть:

BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60

В задаче GitHub Actions на собственном (self-hosted) раннере Windows:

- name: Test the app on a poor connection
  shell: pwsh
  run: |
    Start-Process -FilePath BeanNetworkTester.exe `
      -ArgumentList '--loss 10 --latency 200 --target myapp.exe --duration 90'
    npm test

Два замечания о раннере: для перехвата трафика нужны права администратора, а размещённый раннер их не даст, поэтому это место для собственной машины Windows.

У каждого завершения есть код

Ничто не заканчивается трассировкой стека. У каждого способа завершения запуска есть номер, поэтому пайплайн может отличить «ваше приложение упало» от «инструмент не смог запуститься»:

КодЗначение
0Завершено, как и было задано.
1Что-то пошло не так во время работы.
2Командная строка составлена неверно.
3Недопустимая настройка или значение.
4Файл сценария отклонён.
5Не удалось прочитать или записать файл.
6Проверка результата запуска не подтвердилась.
7Нет прав администратора, поэтому драйвер не может загрузиться.
130Прервано, обычно по Ctrl+C.
143Завершено извне.

Вывод, понятный машине

--format json пишет по одному объекту JSON в строке: выборки во время работы и сводку в конце, чтобы следующий шаг мог проверять утверждения о них:

BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson

Строки журнала идут в стандартный поток ошибок, а данные в стандартный вывод, поэтому перенаправление данных никогда не смешивает их. --seed делает запуск повторяемым, а это именно то, что нужно нестабильному тесту, прежде чем кто-то сможет о нём спорить.

Пробный запуск, который ничего не трогает

Два параметра делают подключение безопасным ещё до того, как вы ему поверите: --dry-run сообщает, что сделали бы настройки, и завершается, а --simulate прогоняет весь движок на синтетическом трафике, не загружая драйвер и не трогая сеть. Оба полезны в сборке, которая не должна портить машину, на которой выполняется.

Что дальше

Готовы намеренно сломать собственную сеть?

Скачать для Windows