Bean Network Tester

Simular una mala red en CI

La ventana es opcional. El mismo ejecutable funciona como herramienta de línea de comandos, termina por sí solo pasado un tiempo fijado e informa de lo ocurrido de una forma que un pipeline puede leer.

La forma de un paso

Deteriora durante lo que dure la prueba y deja que se detenga solo. No hay ningún paso de limpieza que olvidar:

BeanNetworkTester.exe --loss 10 --latency 200 --target myapp.exe --duration 60

En un job de GitHub Actions, en un runner de Windows autoalojado:

- 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

Dos cosas sobre el runner: capturar tráfico necesita permisos de administrador, y un runner alojado no te los dará, así que esto pertenece a una máquina Windows autoalojada.

Cada final tiene un código de salida

Nada termina con un traceback. Cada forma en que puede acabar una ejecución tiene un número, así que un pipeline puede distinguir «tu aplicación falló» de «la herramienta no pudo arrancar»:

CódigoQué significa
0Terminó como se pidió.
1Algo falló durante la ejecución.
2La línea de comandos era incorrecta.
3Un ajuste o un valor no era válido.
4Se rechazó un archivo de escenario.
5No se pudo leer o escribir un archivo.
6Una aserción sobre la ejecución no se cumplió.
7Sin permisos de administrador, así que el controlador no puede cargarse.
130Interrumpido, normalmente con Ctrl+C.
143Terminado desde fuera.

Salida legible por máquinas

--format json escribe un objeto JSON por línea: muestras mientras corre la ejecución y un resumen al final, para que un paso posterior pueda hacer aserciones sobre él:

BeanNetworkTester.exe --loss 5 --duration 30 --format json > run.ndjson

Las líneas de registro van a la salida de error estándar y los datos a la salida estándar, así que redirigir los datos nunca mezcla ambas. --seed hace la ejecución repetible, que es lo que necesita una prueba inestable antes de que nadie pueda discutir.

Una ejecución de prueba que no toca nada

Dos opciones hacen seguro conectarlo antes de confiar en él: --dry-run informa de lo que harían los ajustes y termina, y --simulate ejecuta todo el motor contra tráfico sintético, sin cargar el controlador y sin tocar la red. Ambas son útiles en una compilación que no debe deteriorar la máquina en la que se ejecuta.

Siguiente

¿Listo para romper tu propia red a propósito?

Descargar para Windows