Bean Network Tester

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”:

CodeBetekenis
0Afgerond zoals gevraagd.
1Er ging iets mis tijdens het draaien.
2De opdrachtregel was onjuist.
3Een instelling of waarde was ongeldig.
4Een scenariobestand is afgewezen.
5Een bestand kon niet worden gelezen of geschreven.
6Een controle op de run bleek niet te kloppen.
7Geen beheerdersrechten, dus het stuurprogramma kan niet laden.
130Onderbroken, meestal met Ctrl+C.
143Van 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.

Verder

Klaar om je eigen netwerk expres te slopen?

Downloaden voor Windows