工具選型
弱網測試工具有如下幾種:
1. Fiddler
2. Network Emulator for Windows Toolkit(NEWT)
3. Augmented Traffic Control(ATC)
Fiddler是一個抓包工具,顯然不是專門用來進行弱網測試的,術業有專攻,我希望有一個專門進行弱網測試並持續維護的工具。
NEWT和ATC分別是微軟和Facebook推出的網絡模擬工具。其中,ATC是一個搭建在linux上的一個web服務,搭建一套之后可以給多人使用,而且是開源的。於是,我毫不猶豫的選擇了ATC。
安裝
ATC項目地址:
https://github.com/facebook/augmented-traffic-control
安裝方式可參考:
http://www.cnblogs.com/coderzh/p/AugmentedTrafficControl.html
http://blog.csdn.net/w263044840/article/details/46469285
弱網測試作為健壯性測試的重要部分,對於移動端測試來說必不可少。這是因為目前移動端產品的使用用戶所處的網絡並非完全的流暢WIFI環境,仍有相當體量的用戶主要使用4G、3G、2G等網絡,另外因移動端產品使用場景多變,如進地鐵、上公交、進電梯等,使得弱網測試顯得尤為重要。畢竟考慮到各種場景的客戶端展示及容錯,能極大提升產品印象和用戶體驗。
一、弱網測試的思路篇

總結了下(如上圖所示),弱網測試主要進行特殊網絡狀態下的功能測試同時關注用戶體驗,具體來說,弱網測試包括弱網功能測試、無網狀態測試、網絡切換測試等,測試的同時關注用戶體驗的諸多方面。
1.弱網功能測試
這一部分主要是在各種非wifi網絡環境下進行的功能測試,同時模擬高延時和高丟包的異常網絡環境進行健壯性測試。2G/3G/4G的網絡可以通過使用電話卡移動/聯通/電信等網絡進行模擬,關注頁面的響應時間、頁面呈現是否完整一致等。高延遲和高丟包的網絡環境需要借助工具來模擬,在windows環境下可以使用fiddler和network emulator for windows toolkit來模擬,在mac環境下則可以使用charles和Xcode自帶的開發環境網絡異常模擬工具進行。工具的使用在工具篇具體介紹。
弱網功能測試建議將整體的功能測試用例在弱網環境下進行一輪測試,相同模塊下的功能可以分多個網絡條件進行測試。這部分發現的問題可能會有:頁面圖片在弱網環境下加載不出來(圖片加載邏輯需優化)、需要模版的頁面版式結構混亂(模版文件在弱網環境的加載需優化)、頁面響應時間較長沒有任何顯示(頁面顯示邏輯待優化、重試機制加入)等。
2.無網狀態測試
無網狀態測試則是在切段網絡的情況下進行的測試,主要關注頁面的顯示與交互、本地數據的存儲、斷網功能的使用等,經常該部分也需要與網絡切換部分協同進行。通常來說,(1)斷網情況下請求一個非本地數據的頁面需要設定一定的時間等待上限,及時提示網絡異常以及提示重試;(2)斷網情況下請求一個部分本地數據的頁面需要觀察本地數據的部分是否加載顯示正常,待請求的部分是否符合交互給的缺省樣式一致;(3)斷網情況下請求一個完全本地數據的頁面是否顯示正常。這里還需考慮本地數據存儲的情況,有些需要聯網后上報服務器的數據本地是否正確存儲,聯網后這些數據能否正常上報。
無網狀態測試建議按照頁面划分進行,針對每個頁面單獨測試無網狀態的顯示,頁面間跳轉的顯示,頁面內功能的點擊和顯示,同時關注無網到有網時的頁面恢復顯示狀態、數據上報情況是否正常。
3.網絡切換測試
這部分主要是進行幾個不同網絡場景的切換,包括wifi-2G/3G/4G、wifi-無網、2G/3G/4G-wifi、2G/3G/4G-無網、無網-2G/3G/4G、無網-wifi等。主要關注頁面的顯示與交互,尤其是弱網到wifi,wifi到弱網的情況,是否會有頁面的crash以及顯示的錯亂、session是否一致、請求堆積處理等。
4.用戶體驗關注
弱網測試的目的就是盡可能保證用戶體驗,關注的關鍵點包括:
(1)頁面響應時間是否可接受,關注包括熱啟動、冷啟動時間,頁面切換,前后台切換,首字時間,首屏時間等。
(2)頁面呈現是否完整一致
(3)超時文案是否符合定義,異常信息是否顯示正常。
(4)是否會有超時重連
(5)安全角度:是否會發生dns劫持、登錄ip更換頻繁、單點登錄異常等。
(6)大流量事件風險:是否會在弱網下進行更新apk包、下載文件等大流量動作。
二、弱網測試的工具篇
在安卓產品測試的過程中,使用到的弱網測試工具主要是fiddler模擬網絡延遲,以及network emulation for windows toolkit模擬網絡丟包場景。MAC環境下的charles等抓包工具的實現原理是相同的。這里主要介紹下安卓弱網測試場景下使用到的工具。
1.fiddler
fiddler主要是使用Rules->Performance->Simulate Modem Speeds功能進行的網絡延遲模擬,點擊Rules->Customize Rules進行設置,打開自定義腳本編輯器,如下圖所示:

紅框內標出的就是設置延遲時可以操作的上行和下行網絡延遲時間,意為每上傳/下載1KB的數據要延遲多少毫秒。這里我把請求(上行)時間延遲設置為3000ms,響應(下行)時間延遲設置為1000ms(模擬了2G網絡的速度)。
這里通過計算上行和下行的網絡延遲時間,可以模擬出想要的網絡效果。利用 (1KB/下載速度)x1000 = 要delay的毫秒數 來計算。比如我們要模擬2G的網絡。2G網絡上行和下行的網絡速度如下圖所示:

我們看到在各種制式下上行速度都是2.7kb/s,下行速度是9.6kb/s,根據1KB=8kb,可以計算出上行延遲為(1/(2.7/8))x1000=2962ms ,同理下行延遲未(1/(2.7/8))x1000=833ms。這里我取了近似整值3000ms和1000ms,模擬了2G網絡。同理也可以通過計算模擬3G網絡,附3G網絡制式及速度圖如下:

設置完成后,在fiddler里將Rules->Performance->Simulate Modem Speeds選中即可使設置生效。

2.Network Emulation for Windows Toolkit
fiddler只能設置延遲,無法進行丟包的設置。在windows上有個簡單易用的工具Network Emulation for Windows Toolkit可以用來設置網絡丟包情況。設置丟包有兩個關鍵步驟,一是設置電腦網絡,二是將移動設備接入電腦共享的網絡。詳細看下每個步驟:
(1)設置電腦網絡
工具簡單界面如下所示:

最上方是本地應用,最下方的本地網絡。中間的兩塊區域上部分需要建立鏈路,下部分可以對特定IP進行過濾。因為我們需要進行的是網絡丟包設置,所以過濾器這邊就可以不做設定。我們點擊頂部菜單欄Configuration->New Filter,在彈出的設置框里點擊Add,新增一個過濾器,如下圖所示:

接着點擊Configuration->New Link新增一條鏈路,此時界面顯示如下:

我們沒有對網絡做任何限制,此時網絡是暢通的,ping一下看:

果然沒有任何丟失,且無超時發生。
此時我們設置網絡丟包,在新建鏈路點擊右鍵,選擇Upstream設置上行網絡。這里我們設置了隨機丟包率為40%:

同理也可以設置下行網絡。設置完成后要點擊Action->Start開始使設置生效。生效后我們再來ping一下網絡看看:

可以看到此時有丟包和超時發生了。
除了設置隨機丟包率,我們也可以設置周期丟包率、引入錯誤等網絡異常情況。甚至也可以設置延時。總之該工具在弱網測試中可用性還是很強。
(2)移動端設備接入電腦網絡
設置完PC端網絡環境,由於我們是移動端設備,需要移動端設備接入PC的網絡,因而需要做網絡共享。當PC有無線網卡的情況下,可以首先利用無線網卡共享有線網絡的數據,然后利用Connectify或者360wifi等共享wifi工具,讓移動端設備共享PC的網絡。當PC沒有無線網卡的情況下(我們的辦公PC就沒有網卡--),安卓端手機可以使用usb連接電腦使用PC的網絡。這里有個簡單易行的辦法,就是使用小米手機助手的一鍵開啟共享上網功能(當然了目前只能支持共享給小米手機,且系統安卓版本低於6.0)。在電腦上安裝小米手機助手,小米手機通過usb開啟usb調試連接電腦,就可以共享電腦的網絡了。如下圖所示:

點擊一鍵開啟后,可以看到小米手機的網絡全部關閉,此時設備使用的就是電腦共享出來的網絡。
至於非小米手機的其他設備,也可以使用usb線連接電腦共享其網絡。可參考網上的設置教程。
總之,弱網測試作為健壯性測試的一種,是測試過程中必不可少的重要環節。考慮到弱網測試的各項要點以及合理使用各項工具模擬出復雜、嚴苛的網絡環境,能極大提高產品的可用性,保證產品上線后應對各種應用場景的使用質量。以上是我在安卓產品弱網測試過程中總結出的一點經驗,還有許多未考慮周全的測試點,還需要在后續的測試中繼續加強經驗和總結,與大家共同探討。
參考文檔:
https://www.jianshu.com/p/c0b5ec817617
https://blog.csdn.net/m1213642578/article/details/52351279