背景
我們的產(chǎn)品在弱網(wǎng)環(huán)境下經(jīng)常出現(xiàn)加載問題,影響用戶體驗甚至服務(wù)不可用俐填。所以在測試過程中就需要模擬弱網(wǎng)絡(luò)環(huán)境進行測試安接、問題復(fù)現(xiàn),讓開發(fā)調(diào)優(yōu)
fiddler模擬弱網(wǎng)環(huán)境
設(shè)置
打開fiddler英融,默認(rèn)情況下Rules->Performance->Simulate Modem Speeds是未勾選狀態(tài)盏檐,此時網(wǎng)絡(luò)正常。當(dāng)選中此選項后驶悟,網(wǎng)速就會變慢糯笙,打開網(wǎng)頁就會加載很久,這樣就實現(xiàn)了弱網(wǎng)效果撩银。
備注:如果想了解(上傳/下載)網(wǎng)速具體數(shù)值给涕,可以訪問http://www.speedtest.cn/網(wǎng)站,進行測試
限速原理
Fiddler限速是以網(wǎng)絡(luò)延遲的方式實現(xiàn)的额获,網(wǎng)絡(luò)延遲時間*網(wǎng)速=傳輸字節(jié)數(shù)
點擊Rules – Customize Rules(快捷鍵Ctrl + R)打開Fiddler ScriptEditor够庙,或者直接點開右側(cè)主頁簽的FiddlerScript。
打開該文件后抄邀,Ctrl + F 查找m_SimulateModem標(biāo)志位耘眨,可以看到如下代碼
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的數(shù)據(jù)被上傳時會被延時多少毫秒;
response-trickle-delay則對應(yīng)下載時每KB的數(shù)據(jù)會被延時多少毫秒境肾。
比如你要模擬上傳速度100KBps的網(wǎng)絡(luò)剔难,那上傳延遲就是1KB/100KBps=0.01s=10ms胆屿,就改成10
默認(rèn)設(shè)置下上傳延時為300ms下載延時為150ms,大致模擬出來的寬帶如下:
上傳帶寬 = 1KB/300ms = (1 * 8/1000) /0.300 ≈ 0.027Mbps
下載帶寬 = 1KB/150ms = (1 * 8/1000) /0.150 ≈ 0.053Mbps
(1MB = 1024 KB ≈ 1000 KB 為了運算簡便就用了1000的倍數(shù)偶宫,忽略誤差)
實際帶寬是在計算所得的基礎(chǔ)上乘2非迹,至于原因,沒有深究
上傳帶寬=((1*8/1000)/0.300)*2.0≈0.106Mbps
下載帶寬=((1*8/1000)/0.150)*2.0≈0.053Mbps
假如我們要模擬2M左右的寬帶((1* 8/1000)/ x )*2.0=2
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "8";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "8";
設(shè)置網(wǎng)絡(luò)環(huán)境參數(shù)
1纯趋、查找到if (m_SimulateModem)語句憎兽,修改代碼。模擬網(wǎng)絡(luò)帶寬不是恒定的一個低速的值吵冒,而是一定范圍內(nèi)隨機抖動纯命,下面的腳本實現(xiàn)了一個隨機延時量設(shè)置,使得網(wǎng)絡(luò)帶寬不是恒定為一個低速的值痹栖。
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(100,200);
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = ""+randInt(1,50);
}
2亿汞、在代碼里找到onBeforeRequest,這里定義了在發(fā)送請求前做什么揪阿。加入如下代碼可以實現(xiàn)延遲:
oSession["request-trickle-delay"]="3000"; //請求階段延遲3秒
oSession["response-trickle-delay"]="3000"; //響應(yīng)階段延遲3秒
備注:每次編輯并保存配置文件后疗我,Simulate Modem Speeds選項會被取消,需要重新勾選图甜。
學(xué)習(xí)來源:
http://www.reibang.com/p/b9e349b8f411
其它兩種設(shè)置弱網(wǎng)手段可參考:https://www.cnblogs.com/jinjiangongzuoshi/p/5272787.html