Simulace špatné sítě v CI
Okno je volitelné. Tentýž spustitelný soubor běží jako nástroj příkazového řádku, po zadané době sám skončí a hlásí, co se stalo, způsobem, který pipeline přečte.
Podoba kroku
Zhoršujte po dobu testu a pak nechte nástroj skončit samotný. Žádný úklidový krok, na který by se dalo zapomenout:
BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60
V úloze GitHub Actions na vlastním (self-hosted) runneru s 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
Dvě věci o runneru: zachytávání provozu vyžaduje práva správce a hostovaný runner vám je nedá, takže tohle patří na vlastní počítač s Windows.
Každý konec má návratový kód
Nic nekončí výpisem chyby (traceback). Každý způsob, jak běh může skončit, má číslo, takže pipeline rozliší „vaše aplikace selhala“ od „nástroj se nepodařilo spustit“:
| Kód | Význam |
|---|---|
| 0 | Dokončeno podle zadání. |
| 1 | Za běhu se něco nezdařilo. |
| 2 | Příkazový řádek byl chybný. |
| 3 | Nastavení nebo hodnota byly neplatné. |
| 4 | Soubor scénáře byl odmítnut. |
| 5 | Soubor se nepodařilo přečíst nebo zapsat. |
| 6 | Ověřované tvrzení o průběhu neplatilo. |
| 7 | Chybí práva správce, proto se nedá načíst ovladač. |
| 130 | Přerušeno, obvykle klávesami Ctrl+C. |
| 143 | Ukončeno zvenčí. |
Výstup čitelný strojem
--format json zapisuje jeden objekt JSON na řádek, tedy vzorky za běhu a souhrn na konci, takže na něj může navazující krok klást asserty:
BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson
Řádky logu jdou na standardní chybový výstup a data na standardní výstup, takže přesměrování dat nikdy neprolne obojí. --seed dělá běh opakovatelným, což nestabilní (flaky) test potřebuje dřív, než o něm někdo začne diskutovat.
Zkušební běh, který se ničeho nedotkne
Dva přepínače umožňují tohle bezpečně zapojit, než mu uvěříte: --dry-run ohlásí, co by nastavení udělala, a skončí, a --simulate pustí celý engine proti syntetickému provozu, bez načtení ovladače a bez zásahu do sítě. Oba se hodí v buildu, který nesmí zhoršit počítač, na němž běží.