轉自:http://www.51testing.com/html/80/n-3726980.html
抓包工具 Fiddler 使用:弱網絡環境模擬限速測試流程
發表於:2018-6-06 11:46 作者:西邊人 來源:51Testing軟件測試網采編
字體:大 中 小 | 上一篇 | 下一篇 |我要投稿 | 推薦標簽: 軟件測試工具 Fiddler 抓包工具
一:為什么要做弱網絡測試?
實際的客戶現場可能網絡不穩定或者網速低,惡劣的網絡環境會導致出現一些bug,影響用戶體驗甚至某些服務不可用。而公司內部的研發環境網絡通常比較順暢,難以復現這種bug。要解決這種問題,就需要制造弱網絡的環境進行測試、復現並修復問題。
二:如何模擬惡劣網絡環境?
本文僅以
fiddler為例,其他的做個了解,不具體研究。
三:Fiddler怎樣模擬弱網?
Fiddler 是一個 HTTP 調試代理,它能夠
記錄所有你電腦和
互聯網之間的 HTTP 通訊,Fiddler 也可以讓你檢查所有的 HTTP 通訊,設置斷點,以及修改所有的“進出”的數據(指Cookie/HTML/JS/CSS 等文件)。
利用Fiddler來模擬惡劣的網絡環境,實現簡單,較為直觀,缺點是只能支持那些利用HTTP進行通信和交互的服務。
打開fiddler,默認情況下Rules –> Performances –> Simulate Modem Speeds 是未勾選狀態,網絡正常。當選中此選項(模擬光貓網速)后,網速就會變很慢,打開一個網頁要加載很久。這樣就實現了弱網絡效果。
設置
如果想了解(上傳和下載)網速的具體數值,可以使用一個工具speedtest,測速方法很簡單,網上有大把教程。
http://www.speedtest.net/是英文的網站,應該是國外版,訪問比較慢。而且
Windows系統只支持Windows10下載客戶端,我用的Windows7使用chrome瀏覽器要安裝Speedtest擴展程序就得翻牆,所以不推薦使用。建議訪問http://www.speedtest.cn/網站,測速生成結果很快且是中文的。支持
手機客戶端
APP下載。
四:限速原理
Fiddler限速是以網絡延遲的方式實現的,網絡延遲時間*網速=傳輸字節數。
點擊Rules – Customize Rules(快捷鍵Ctrl + R)打開Fiddler ScriptEditor,或者直接點開右側主頁簽的FiddlerScript。
image.png
打開該文件后,Ctrl + F 查找m_SimulateModem標志位,可以看到如下代碼:
if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = "300"; // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = "150"; }
注釋說明: request-trickle-delay中的值代表每KB的數據被上傳時會被延時多少毫秒;response-trickle-delay則對應下載時每KB的數據會被延時多少毫秒。比如你要模擬上傳速度100KBps的網絡,那上傳延遲就是1KB/100KBps=0.01s=100ms,就改成100。
當勾選了Simulate Modem Speeds時,request-trickle-delay 與 response-trickle-delay就會被設置,如果本身網速已經相當快的話,這里設置的值就可以近似地推算出開啟模擬后的上傳和下載帶寬了,比如默認設置下上傳延時為300ms下載延時為150ms,可以推算出大致的模擬帶寬為:
上傳帶寬=(1 * 8/1000) /0.300 ≈ 0.027Mbps
下載帶寬=(1 * 8/1000) /0.150 ≈ 0.053Mbps
實際情況下得到的帶寬可能會有誤差,受各種外因影響不會這么精確。
由此可見下載帶寬是上傳的兩倍,也就是延時越小,帶寬越大。帶寬和這里的延時是成反比的。
五:調整網絡環境參數
Fiddler 默認的 Simulate Modem Speeds速度實在太慢了,而這個限速的參數是可以調整的,如果需要再快一點可以修改配置文件Fiddler2ScriptsCustomRules.js。(如若修改勿忘備份原文件)在fiddler官網http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp可以找到參考示例。
下面提供了兩種簡單的修改腳本的方法,選擇一種即可。
方法1
查找到if (m_SimulateModem)語句,修改代碼。下面的腳本實現了一個隨機延時量設置,使得網絡帶寬不是恆定為一個低速的值,而是會在一定范圍內隨機抖動:
static function randInt(min, max) { return Math.round(Math.random()*(max-min)+min);}if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = ""+randInt(1,50); // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = ""+randInt(1,50);}
方法2
點擊fiddlerScript 在代碼里找到onBeforeRequest,這里定義了在發送請求前做什么。加入如下代碼可以實現延遲:
oSession["request-trickle-delay"]="3000"; //請求階段延遲3秒oSession["response-trickle-delay"]="3000"; //響應階段延遲3秒
添加代碼
上面兩種方法選其一,修改后保存配置文件(Ctrl+S)或者清掉緩存(Rules –> Performances –>Disable Caching),再次勾選Rules –> Performances –> Simulate Modem Speeds 進行測速。注意:每次編輯並保存配置文件后,Simulate Modem Speeds選項會被取消,請重新勾選。
限速完畢一定要取消勾選,不然會影響上網。像第二種方法由於請求和響應都延遲3秒,會導致訪問網頁很慢。



