Симуляція поганої мережі в 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 проганяє весь рушій на синтетичному трафіку, не завантажуючи драйвер і не чіпаючи мережу. Обидва корисні в збірці, яка не має права погіршувати машину, де працює.