Bean Network Tester

讓網路狀況隨時間變化

固定的 10% 封包遺失是實驗室條件。真實的連線會變差、恢復、停滯四秒再恢復,而你正在追查的 bug 通常藏在這些變化裡,而不是穩定狀態裡。

場景就是一條時間軸

一個 JSON 檔案。每一步都寫明在這一秒,使用這些設定,沒有提到的設定保持原值:

{
  "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}}
  ]
}

時間是從執行開始計的秒數,而不是各步驟之間的間隔。設定 "loop": true 後,時間軸結束時會從頭開始,這正是長時間浸泡測試所需要的:讓它一直執行,同時使用應用。

BeanNetworkTester.exe --scenario cafe-wifi.json --target myapp.exe

8 個現成場景隨程式一起提供

位於可執行檔案旁邊的 scenarios 資料夾中。這是從那些檔案裡讀出來的,所以你實際擁有的就是這些:

檔案步驟數時長是否迴圈
blocked-endpoint.json465 s是
cafe-wifi.json585 s是
congested-vpn.json470 s是
failing-dns.json685 s是
mobile-lte-to-3g.json785 s是
overloaded-game-server.json572 s是
same-loss-in-runs.json5100 s是
upload-drop-midway.json775 s否

它們就是普通文字:開啟一個,改一個數字,儲存。名稱說明了它們重現什麼:擁擠的咖啡館、從 LTE 掉到 3G 的行動連線、傳到一半就中斷的上傳、過載的伺服器,以及不再回應的 DNS。

另外兩種更簡單的變化方式

當順序很重要時,值得寫一個場景。不重要時,有兩項設定會自行變化:

BeanNetworkTester.exe --flap-period 10 --flap-down 40 --target myapp.exe

為什麼它能在應用執行時生效

場景改動的每項設定都會即時應用到已經在進行的會話中,應用不需要重啟,工具也不需要。事件記錄會記錄每一步發生的時刻,所以出問題時,你能看到它緊跟在哪一次變化之後。再配合隨機種子,整個序列(包括其中的隨機封包遺失)就會精確重複。

接下來

準備好故意搞壞自己的網路了嗎?

下載 Windows 版