為什么要進(jìn)行弱網(wǎng)環(huán)境測(cè)試?
由于用戶自身的網(wǎng)絡(luò)環(huán)境波動(dòng),或者是本身網(wǎng)絡(luò)環(huán)境就較為惡劣,導(dǎo)致會(huì)出現(xiàn)一些意想不到的非功能性bug,影響用戶體檢。比如
利用Fiddler,Charles等具有代理服務(wù)器功能的網(wǎng)絡(luò)流量分析軟件來(lái)實(shí)現(xiàn)。
fiddler模擬限速的原理
Fiddler限速是以網(wǎng)絡(luò)延遲的方式實(shí)現(xiàn)的,網(wǎng)絡(luò)延遲時(shí)間*網(wǎng)速=傳輸字節(jié)數(shù)。
fiddler本來(lái)就是個(gè)代理,它提供了客戶端請(qǐng)求前和服務(wù)器響應(yīng)前的回調(diào)接口,我們可以在這些接口里 面自定義一些邏輯。Fiddler的模擬限速正是在客戶端請(qǐng)求前來(lái)自定義限速的邏輯,此邏輯是通過延遲發(fā)送數(shù)據(jù)或接收的數(shù)據(jù)的時(shí)間來(lái)限制網(wǎng)絡(luò)的下載速度和 上傳速度,從而達(dá)到限速的效果。
如何利用Fiddler來(lái)模擬惡劣的網(wǎng)絡(luò)環(huán)境?
1、啟用 "模擬Modem速度"?
? ? ? ? Rules – Performances – Simulate Modem Speeds? ? ? ?
? ? ? ? 默認(rèn)未勾選,網(wǎng)絡(luò)正常。勾選該選項(xiàng)后,所有通過Fiddler代理的流量都會(huì)變得和多年前的56k小貓時(shí)上網(wǎng)一般的慢。?
? ? ? ? 注意:開啟限速前后,配合測(cè)速工具speedtest(speedtest.net 國(guó)外/ speedtest.cn 國(guó)內(nèi)),能夠看到ping、download、upload都會(huì)受到影響,如下圖:


2、配置限速參數(shù)(?網(wǎng)絡(luò)環(huán)境參數(shù))
????????采用默認(rèn)的配置模擬出來(lái)的環(huán)境過于惡劣,并不一定符合需求,此時(shí)就需要對(duì)限速的參數(shù)進(jìn)行調(diào)整。?
? ? ? ? (法一)Rules – Customize Rules…??
? ? ? ? 就會(huì)用文本編輯器打開CustomRules.js文件,其默認(rèn)位于用戶目錄的文檔目錄下的\Fiddler2\Scripts 位置,后綴名是js。然后,找到一個(gè)m_SimulateModem標(biāo)志位(如下圖),并設(shè)置請(qǐng)求延遲、相應(yīng)延遲 ,單位為ms.

????(法二)或者,直接打開右側(cè)監(jiān)控面板的“FiddlerScript”選項(xiàng)卡,如下:

????????如果本身網(wǎng)速相當(dāng)快,這里設(shè)置的值就可以近似地推算出開啟模擬后的上傳和下載帶寬,比如默認(rèn)設(shè)置下上傳延時(shí)為300ms下載延時(shí)為150ms,可以推算出大致的模擬帶寬為:
? ? ? ? →?上傳帶寬=(1 * 8/1000) /0.300 ≈? 0.027Mbps
? ? ? ? → 下載帶寬=(1 * 8/1000) /0.150 ≈ 0.053Mbps
????????然而實(shí)際情況下卻得到了兩倍于這個(gè)值的帶寬,推測(cè)可能是Fiddler的內(nèi)部實(shí)現(xiàn)上有一些和描述上的不同,為何為造成這個(gè)現(xiàn)象現(xiàn)在還不是很清楚,所以上述公式最后還需要修正一個(gè)2.0的系數(shù),即:
? ? ? ? →?上傳帶寬=((1*8/1000)/0.300)*2.0≈0.053Mbps
? ? ? ? ?→?下載帶寬=((1*8/1000)/0.150)*2.0≈0.106Mbps
科普1:用來(lái)衡量帶寬的單位,指每秒鐘傳輸?shù)亩M(jìn)制位數(shù);
? ??????????????Mbps 即 Milionbit pro second(百萬(wàn)位每秒);
? ??????????????Kbps 即 Kilobit pro second(千位每秒);
? ??????????????bps 即 bit pro second(位每秒);
? ??????????????1 Mbps?=1000? Kbps?=1000000?bps?
科普2:而通常軟件上顯示的速度則是指每秒種傳輸?shù)淖止?jié)數(shù)(Byte)通常用B(大寫)表示;
? ??????????????MB即百萬(wàn)字節(jié)也稱兆字節(jié);
? ??????????????KB即千字節(jié);
? ??????????????B即字節(jié);
? ??????????????之間關(guān)系為1MB=1024KB=1024*1024B;
? ??????????????1B=8b;
? ? ? ? ? ? ? ? →??所以1M帶寬即指1Mbps=1000Kbps=1000/8KBps=125KBps;
3、編寫自定義腳本
? ? ? ? 即擴(kuò)展或新增CustomRules.js里的邏輯。比如實(shí)現(xiàn)新增一個(gè)隨機(jī)延時(shí)量,使得網(wǎng)絡(luò)帶寬不是如上一步般恒定為一個(gè)低速的值,而是會(huì)在一定范圍內(nèi)隨機(jī)抖動(dòng),如下,將代碼段1,改為 代碼段1 :?
? 代碼段1:
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "500";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "500";
}
代碼段2:
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,500);
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = ""+randInt(1,500);
}
PS:修改后保存配置文件(Ctrl+S)或者清掉緩存(Rules –> Performances –>Disable Caching),再次勾選Rules –> Performances –> Simulate Modem Speeds 進(jìn)行測(cè)速。注意:每次編輯并保存配置文件后,Simulate Modem Speeds選項(xiàng)會(huì)被取消,請(qǐng)重新勾選。
遇到的問題:如上修訂后Rules –> Performances 菜單可能會(huì)消失,回滾即可,或重啟下。
Fiddler模擬惡劣網(wǎng)絡(luò)環(huán)境的局限性
利用Fiddler來(lái)模擬惡劣的網(wǎng)絡(luò)環(huán)境,實(shí)現(xiàn)簡(jiǎn)單,較為直觀,缺點(diǎn)是只能支持那些利用HTTP進(jìn)行通信和交互的服務(wù),對(duì)于其他協(xié)議的應(yīng)用不支持