Mude as condições de rede ao longo do tempo
Uma perda fixa de 10% é uma condição de laboratório. Conexões reais pioram, se recuperam, travam por quatro segundos e voltam, e o bug que você persegue costuma morar na mudança, não no estado estável.
Um cenário é uma linha do tempo
Um arquivo JSON. Cada etapa diz neste segundo, estas configurações, e tudo que você não menciona mantém o valor:
{
"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}}
]
}
Os tempos são segundos desde o início da execução, não intervalos entre etapas. Com "loop": true, a linha do tempo recomeça quando termina, que é o que você quer para um teste de longa duração: deixe rodando e use o aplicativo.
BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe
8 cenários prontos acompanham o programa
Na pasta scenarios ao lado do executável. Lidos desses arquivos, então isto é o que você realmente tem:
| Arquivo | Etapas | Duração | Repete |
|---|---|---|---|
blocked-endpoint.json | 4 | 65 s | sim |
cafe-wifi.json | 5 | 85 s | sim |
congested-vpn.json | 4 | 70 s | sim |
failing-dns.json | 6 | 85 s | sim |
mobile-lte-to-3g.json | 7 | 85 s | sim |
overloaded-game-server.json | 5 | 72 s | sim |
same-loss-in-runs.json | 5 | 100 s | sim |
upload-drop-midway.json | 7 | 75 s | não |
São texto comum: abra um, mude um número, salve. Os nomes dizem o que reproduzem: uma cafeteria lotada, uma conexão móvel caindo de LTE para 3G, um upload que morre no meio, um servidor que fica sobrecarregado, um DNS que para de responder.
Duas formas mais simples de obter mudança
Vale a pena escrever um cenário quando a sequência importa. Quando não importa, duas configurações variam sozinhas:
- Link liga e desliga: a duração de um ciclo e quanto dele fica fora do ar. Ciclos de dez segundos, quatro fora do ar, para sempre.
- Um cronograma de velocidade: uma série de velocidades pelas quais o limite passa, de modo que a conexão piora e se recupera sem um arquivo.
BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe
Por que funciona com o aplicativo em execução
Toda configuração que um cenário toca é aplicada ao vivo na sessão já em andamento: o aplicativo não precisa reiniciar, nem a ferramenta. O log de eventos registra cada etapa quando acontece, então, quando algo quebra, você vê a qual mudança ele seguiu. Combine isso com uma semente e a sequência inteira, incluindo a perda aleatória dentro dela, se repete exatamente.