APP弱網模擬測試
1、為什么要做弱網測試:
實際的客戶現場可能網絡不穩定或者網速低,惡劣的網絡環境會導致出現一些bug,影響用戶體驗甚至某些服務不可用。而公司內部的研發環境網絡通常比較順暢,難以復現這種bug。要解決這種問題,就需要制造弱網絡的環境進行測試、復現並修復問題。
移動端測試區別於PC端測試的一點就是網絡的多變性;不同的網絡環境和網絡制式的差異,都會對用戶使用app造成一定影響。
例如:進地鐵、上公交、進電梯等,如果app沒有對各種網絡異常進行兼容處理,那么用戶可能在日常
生活中遇到APP閃退、ANR、數據丟失等問題。因此,app網絡測試,特別是弱網測試顯得尤為重要。
2、
Fiddler怎樣模擬弱網?
利用Fiddler來模擬惡劣的網絡環境,實現簡單,較為直觀,缺點是只能支持那些利用HTTP進行通信和交互的服務。
利用fiddler的Simulate Modem Speeds功能,可以通過設置網絡的上傳、下載的網絡流量大小來達到模擬弱網環境,從而實現弱網模擬測試,即通過延遲發送數據或接收的數據的時間來限制網絡的下載速度和 上傳速度,從而達到限速的效果。

3、
限速原理
Fiddler限速是以網絡延遲的方式實現的,網絡延遲時間*網速=傳輸字節數。
點擊Rules – Customize Rules(快捷鍵Ctrl + R)打開Fiddler ScriptEditor,或者直接點開右側主頁簽的FiddlerScript。
在文件中搜索關鍵字:m_SimulateModem;
修改m_SimulateModem值為true,即開啟網絡模擬:
var m_SimulateModem: boolean = false; |
修改uploaded、downloaded的數據來模擬不同的弱網場景:
if (m_SimulateModem) {
// Delay sends by 300ms per KB uploaded.
oSession["request-trickle-delay"] = "384";
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = "2560";
}
|
注釋說明: 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
實際情況下得到的帶寬可能會有誤差,受各種外因影響不會這么精確。
由此可見下載帶寬是上傳的兩倍,也就是延時越小,帶寬越大。帶寬和這里的延時是成反比的。
上傳1KB需要300ms,轉化一下上傳速度:1Kb/0.3s = 10/3(KB/s),如果想設置上傳的速度為50KB/s,你則需要設置Delay 時間為 20ms;(=1000/50)
PS:設置之后可以通過http://www.speedtest.cn/在線測試網速,看是否生效;
2G一般上行/下行速率約為:2.7、9.6kbs,模擬設置為:uploaded 約 2962 ms,downloaded 約 833 ms;(弱網一般指2G網絡)
3G一般上行/下行速率約為:384、2560kbs,設置為:uploaded 約 2.6 ms,downloaded 約 0.39 ms;
PS:弱網模擬還可以通過其它工具實現,比如360WiFi的限速設置等;
3.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,2000);
// Delay receives by 150ms per KB downloaded.
oSession["response-trickle-delay"] = ""+randInt(1,2000);
}
|
這里的randInt(1,2000)應該很好理解,代表1-2000中的一個隨機整數,這樣就會出現偶爾有延遲偶爾網絡又良好的情況。
4、前端性能分析及優化
前端性能在一定程度可以提升用戶體驗,而前端的性能數據可以通過fiddler的Statistics和Timeline來獲取,從而為性能分析及優化提供依據。
4.1、實例--前端性能數據獲取分析
通過陳列出所有的HTTP通信量,Fiddler可以很容易的向您展示哪些文件生成了您當前請求的頁面。使用Statistics頁簽,用戶可以通過選擇多個會話來得來這幾個會話的總的信息統計,比如多個請求和傳輸的字節數。
選擇第一個請求和最后一個請求,可獲得整個頁面加載所消耗的總體時間。從條形圖表中還可以分別出哪些請求耗時最多,從而對頁面的訪問進行訪問速度優化。
同時,還可以通過Timeline分析資源加載時序圖,可以很直觀地看到頁面上各個資源加載過程所需要的時間和先后順序,有利於找出加載過程中比較耗時的文件資源,幫助我們有針對性地進行性能優化。
5、小結
總的來說,fiddler是移動互聯網測試的利器,除以上介紹的這些常見的日用場景外,還有很多其它用途,如域名的重定向、API的測試等,這里就不一一列舉,如有興趣,可抽空一起探討。