一般常見(jiàn)的網(wǎng)絡(luò)場(chǎng)景有:網(wǎng)絡(luò)閃斷閃連、弱網(wǎng)、無(wú)網(wǎng)絡(luò)和網(wǎng)絡(luò)吊死等,在實(shí)際測(cè)試過(guò)程中,我們常常要模擬上述環(huán)境,以便驗(yàn)證軟件在上述環(huán)境中的可靠性。
1.模擬網(wǎng)絡(luò)閃斷閃連
我們可以借助DOS命令netsh實(shí)現(xiàn)該場(chǎng)景,具體批處理命令如下:
@echo off--------不顯示被執(zhí)行的命令,只顯示命令執(zhí)行結(jié)果
for /l %%a in (1,1,5) do (---------循環(huán)禁用和啟用網(wǎng)卡,可以通過(guò)設(shè)置循環(huán)次數(shù)實(shí)現(xiàn)一段時(shí)間內(nèi)網(wǎng)絡(luò)閃斷閃連
echo 禁用網(wǎng)卡
netsh interface set interface "本地連接" admin=disabled-----------禁用網(wǎng)卡的DOS命令,本地連接為網(wǎng)卡名稱
echo Wscript.sleep 500 >y.vbs---------------------創(chuàng)建一個(gè)腳本文件,作用是實(shí)現(xiàn)延時(shí)效果,此處設(shè)置為500毫秒,類似于sleep函數(shù)
call y.vbs &del y.vbs-------------------調(diào)用腳本,開(kāi)始延時(shí),執(zhí)行完畢后刪除腳本
echo 啟用網(wǎng)卡
netsh interface set interface "本地連接" admin=enabled----------------------------啟用網(wǎng)卡dos命令
echo Wscript.sleep 5000 >y.vbs---------------延時(shí)5s,等待網(wǎng)絡(luò)正常連接
call y.vbs &del y.vbs
echo 啟用網(wǎng)卡結(jié)束
)
pause--------------------確保dos窗口執(zhí)行完畢后,不自動(dòng)關(guān)閉
PS:如果IP地址是動(dòng)態(tài)獲取,還可以通過(guò)ipconfig /release和ipconfig /renew兩個(gè)命令實(shí)現(xiàn)閃斷閃連,前者表示釋放當(dāng)前ip,后者表示重新獲取ip。
2.模擬弱網(wǎng)環(huán)境
方式1使用fiddler模擬弱網(wǎng)
在主頁(yè)菜單欄,選擇rules--customize rules

修改上述圖片紅框內(nèi)的數(shù)值,oSession["request-trickle-delay"] = 300,指fiddler上傳1kb數(shù)據(jù)需要300毫秒,即每秒傳3kb。oSession["response-trickle-delay"] = 150,指fiddler下載1kb需要150毫秒。然后在菜單欄選擇rules--performance--simulate modem speeds(每次修改上傳、下載時(shí)間后,都必須要重新勾選此項(xiàng),因?yàn)槊看涡薷暮笤擁?xiàng)會(huì)被重置清空)。弱網(wǎng)環(huán)境模擬完畢,后續(xù)可以通過(guò)調(diào)整上傳下載時(shí)間,控制請(qǐng)求和響應(yīng)的時(shí)間,以達(dá)到模擬不同網(wǎng)絡(luò)的效果。
PS:fiddler還可以模擬簡(jiǎn)單的并發(fā)操作,右擊目標(biāo)請(qǐng)求,然后點(diǎn)擊右鍵菜單replay--reissue sequentially,彈出下圖:

在上圖的數(shù)值5,表示fiddler會(huì)同時(shí)發(fā)5次被選擇的請(qǐng)求到服務(wù)器。
方式2 通過(guò)Charles模擬
在菜單欄選擇proxy--throttle settings,彈出如下窗口:

勾選enable throttling啟用限速功能,然后添加一臺(tái)你想限速的主機(jī)。bandwidth項(xiàng)是控制上傳和下載的速率,單位是kb/s。上述數(shù)值表示,請(qǐng)求和響應(yīng)到Charles側(cè)時(shí),它每秒下載57kb,上傳33.6kb。根據(jù)實(shí)際情況修改上述兩個(gè)數(shù)值,可以模擬不同的網(wǎng)絡(luò)情況。
PS:Charles可以實(shí)現(xiàn)簡(jiǎn)單并發(fā)操作,步驟如下:
右擊目標(biāo)請(qǐng)求,在右鍵菜單選擇repeat advanced,彈出如下窗口:

iterations表示循環(huán)次數(shù),concurrency表示每次循環(huán)的請(qǐng)求并發(fā)數(shù)。