Bean Network Tester

Симуляція поганої мережі в CI

Вікно необов’язкове. Той самий виконуваний файл працює як інструмент командного рядка, сам завершується через задану кількість часу і повідомляє, що сталося, у спосіб, який може прочитати pipeline.

Вигляд кроку

Погіршуйте на час тесту, а потім дайте йому зупинитися самому. Жодного кроку очищення, про який можна забути:

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.

Кожне завершення має код завершення

Ніщо не закінчується трасуванням стека (traceback). Кожен спосіб завершити запуск має номер, тож pipeline може відрізнити «ваш застосунок зазнав збою» від «інструмент не зміг запуститися»:

КодЩо означає
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 робить запуск повторюваним, а саме цього потребує нестабільний (flaky) тест, перш ніж хтось зможе про нього сперечатися.

Пробний запуск, що нічого не чіпає

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

Далі

Готові навмисно зламати власну мережу?

Завантажити для Windows