Een slecht netwerk simuleren in CI
Het venster is optioneel. Hetzelfde uitvoerbare bestand draait als opdrachtregeltool, eindigt vanzelf na een ingestelde tijd en meldt wat er gebeurde op een manier die een pipeline kan lezen.
De vorm van een stap
Verslechter voor de duur van de test en laat het dan vanzelf stoppen. Geen opruimstap om te vergeten:
BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60
In een GitHub Actions-job, op een zelf gehoste Windows-runner:
- 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
Twee dingen over de runner: het onderscheppen van verkeer vereist beheerdersrechten, en een gehoste runner geeft je die niet, dus dit hoort op een zelf gehoste Windows-machine.
Elk einde heeft een afsluitcode
Niets eindigt met een traceback. Elke manier waarop een run kan eindigen heeft een nummer, dus een pipeline kan “je app faalde” onderscheiden van “de tool kon niet starten”:
| Code | Betekenis |
|---|---|
| 0 | Afgerond zoals gevraagd. |
| 1 | Er ging iets mis tijdens het draaien. |
| 2 | De opdrachtregel was onjuist. |
| 3 | Een instelling of waarde was ongeldig. |
| 4 | Een scenariobestand is afgewezen. |
| 5 | Een bestand kon niet worden gelezen of geschreven. |
| 6 | Een controle op de run bleek niet te kloppen. |
| 7 | Geen beheerdersrechten, dus het stuurprogramma kan niet laden. |
| 130 | Onderbroken, meestal met Ctrl+C. |
| 143 | Van buitenaf beëindigd. |
Machineleesbare uitvoer
--format json schrijft één JSON-object per regel, samples terwijl de run bezig is en een samenvatting aan het eind, zodat een latere stap erop kan toetsen:
BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson
Logregels gaan naar standaardfout en gegevens naar standaarduitvoer, dus het omleiden van de gegevens mengt de twee nooit. --seed maakt de run herhaalbaar, en dat heeft een onbetrouwbare (flaky) test nodig voordat iemand erover kan discussiëren.
Een proefrun die niets aanraakt
Twee vlaggen maken het veilig om dit aan te sluiten voordat je het vertrouwt: --dry-run meldt wat de instellingen zouden doen en sluit af, en --simulate draait de hele engine tegen synthetisch verkeer, zonder het stuurprogramma te laden en zonder het netwerk aan te raken. Beide zijn handig in een build die de machine waarop hij draait niet mag verslechteren.