Cambia le condizioni di rete nel tempo
Una perdita fissa del 10% è una condizione da laboratorio. Le connessioni reali peggiorano, si riprendono, si bloccano per quattro secondi e tornano, e il bug che insegui di solito sta nel cambiamento, non nello stato stabile.
Uno scenario è una linea temporale
Un file JSON. Ogni passo dice a questo secondo, queste impostazioni, e tutto ciò che non menzioni mantiene il suo valore:
{
"loop": true,
"steps": [
{"at": 0, "settings": {"latency": 20, "jitter": 15, "down": 4096}},
{"at": 20, "settings": {"loss": 8, "latency": 180}},
{"at": 45, "settings": {"block_ip": "203.0.113.0/24"}},
{"at": 65, "settings": {"block_ip": "", "loss": 0, "latency": 20}}
]
}
I tempi sono secondi dall’inizio dell’esecuzione, non intervalli tra i passi. Con "loop": true la linea temporale ricomincia quando finisce, ed è ciò che vuoi per un lungo test di resistenza: lasciala andare e usa l’app.
BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe
8 scenari pronti sono inclusi nel programma
Nella cartella scenarios accanto all’eseguibile. Letti da quei file, quindi questo è ciò che hai davvero:
| File | Passi | Durata | Si ripete |
|---|---|---|---|
blocked-endpoint.json | 4 | 65 s | sì |
cafe-wifi.json | 5 | 85 s | sì |
congested-vpn.json | 4 | 70 s | sì |
failing-dns.json | 6 | 85 s | sì |
mobile-lte-to-3g.json | 7 | 85 s | sì |
overloaded-game-server.json | 5 | 72 s | sì |
same-loss-in-runs.json | 5 | 100 s | sì |
upload-drop-midway.json | 7 | 75 s | no |
Sono testo semplice: ne apri uno, cambi un numero, salvi. I nomi dicono cosa riproducono: un bar affollato, una connessione mobile che passa da LTE a 3G, un upload che muore a metà, un server che si sovraccarica, un DNS che smette di rispondere.
Due modi più semplici per ottenere cambiamento
Vale la pena scrivere uno scenario quando la sequenza conta. Quando non conta, due impostazioni variano da sole:
- Collegamento che va e viene: una durata del ciclo e quanta parte è di inattività. Cicli di dieci secondi, quattro di inattività, per sempre.
- Un piano di velocità: una serie di velocità che il limite attraversa, così la connessione peggiora e si riprende senza un file.
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
Perché funziona mentre l’app è in esecuzione
Ogni impostazione toccata da uno scenario viene applicata dal vivo alla sessione già in corso: l’app non deve essere riavviata, e nemmeno lo strumento. Il registro degli eventi annota ogni passo mentre accade, quindi quando qualcosa si rompe puoi vedere a quale cambiamento ha fatto seguito. Abbinalo a un seed e l’intera sequenza, compresa la perdita casuale al suo interno, si ripete esattamente.