Faire évoluer les conditions réseau au fil du temps
Une perte fixe de 10 % est une condition de laboratoire. Les vraies connexions se dégradent, se rétablissent, se figent quatre secondes et reviennent, et le bug que vous traquez se trouve généralement dans le changement, pas dans l’état stable.
Un scénario est une chronologie
Un fichier JSON. Chaque étape dit à cette seconde, ces réglages, et tout ce que vous ne mentionnez pas garde sa valeur :
{
"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}}
]
}
Les temps sont des secondes depuis le début de l’exécution, pas des intervalles entre étapes. Avec "loop": true, la chronologie recommence quand elle se termine, ce qui convient à un long test d’endurance : laissez-la tourner et utilisez l’application.
BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe
8 scénarios prêts à l’emploi sont fournis avec le programme
Dans le dossier scenarios à côté de l’exécutable. Lus depuis ces fichiers, c’est donc bien ce que vous avez réellement :
| Fichier | Étapes | Durée | Se répète |
|---|---|---|---|
blocked-endpoint.json | 4 | 65 s | oui |
cafe-wifi.json | 5 | 85 s | oui |
congested-vpn.json | 4 | 70 s | oui |
failing-dns.json | 6 | 85 s | oui |
mobile-lte-to-3g.json | 7 | 85 s | oui |
overloaded-game-server.json | 5 | 72 s | oui |
same-loss-in-runs.json | 5 | 100 s | oui |
upload-drop-midway.json | 7 | 75 s | non |
Ce sont de simples fichiers texte : ouvrez-en un, changez un nombre, enregistrez. Les noms disent ce qu’ils reproduisent : un café bondé, une connexion mobile qui passe de la LTE à la 3G, un envoi qui meurt à mi-chemin, un serveur qui se surcharge, un DNS qui ne répond plus.
Deux façons plus simples d’obtenir du changement
Un scénario vaut la peine d’être écrit quand l’enchaînement compte. Quand ce n’est pas le cas, deux réglages varient d’eux-mêmes :
- Liaison coupée puis rétablie : une durée de cycle et la part de ce cycle passée hors service. Des cycles de dix secondes, quatre secondes hors service, indéfiniment.
- Un plan de débit : une série de vitesses que parcourt la limite, de sorte que la connexion se dégrade et se rétablit sans fichier.
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
Pourquoi cela fonctionne pendant que l’application tourne
Chaque réglage qu’un scénario touche est appliqué en direct à la session déjà en cours : l’application n’a pas besoin d’être redémarrée, l’outil non plus. Le journal d’événements consigne chaque étape au moment où elle se produit, si bien que lorsque quelque chose casse, vous voyez à quel changement cela a succédé. Associez cela à une graine et toute la séquence, y compris la perte aléatoire qu’elle contient, se répète à l’identique.