最近在搞一個智能穿戴項目。
手環手表等智能穿戴項目中最核心的功能是運動計步功能。
計步功能的業務邏輯是主要流程是通過手環設備采集運動數據,通過app提交采集的數據并發送到服務端,在服務端的算法庫解析以后,回傳給app顯示出來。
由此可見,在整個業務邏輯過程中,數據的傳輸是很重要的一環。
因此有必要針對app開展網絡測試。
[TOC]
? 當前app的網絡環境比較復雜,在網絡制式上就存在2G
、3G
、4G
網絡,以及越來越多的公共wifi
。不同的網絡環境以及網絡制式的差異,都會對用戶使用app造成一定的影響。如果app沒有針對各種異常的網絡狀況進行兼容處理,那么用戶就很有可能在日常使用中碰到app閃退、ANR
、數據丟失等嚴重的問題。
測試維度
1、功能測試
對于功能測試,要考慮在各種網絡制式下app的功能體驗。雖然現在4G網絡越來越普及了,但是作為測試,依然要考慮到所有可能發生的場景。雖然不可能把所有網絡制式都覆蓋到,但是我認為還是有必要在弱網環境下,針對app開展基本的功能測試,保證app在弱網環境下能夠把整個業務流程跑一遍。弱網環境下,有時候會對app的功能造成嚴重的影響,例如:在弱網環境下,同步跑步數據,如果app沒有針對這個方面做處理,那么很可能導致app把設備的數據同步過來,但是卻無法上傳,如果開發人員沒有針對這種情況做處理,那么這段數據就可能丟失。
2、響應時間
? 響應時間這個指標在性能測試中出現比較多,對于用戶體驗以及app的市場占用率都有很重要的影響。安卓手機一般超過5秒鐘無響應就會報ANR的錯誤,ios手機響應時間過長也會報錯。
據調查顯示,用戶能夠忍受的最佳響應時間是2秒以內,超過5秒無響應的話,一般性子比較急躁的用戶很可能就會直接退出頁面了,如果超過10秒無響應,很多人都會選擇殺掉app。app經常處于無響應或者響應時間過長的狀態,會導致大批的用戶轉移到競爭對手的產品上。
3、異常測試
? 異常測試是指驗證app針對各種網絡異常情況是否做出了容錯處理,這里面包括異常提示信息、出錯容錯機制、超時判斷處理機制、出錯以后自動重連等。
從一個app的異常測試結果,就可以看出開發人員對這款app投入的精力以及負責程度。
4、無網測試
? 無網測試測試主要針對斷網的情況下,app各個功能是否受到影響。例如:公司的手環app在開始某個版本出現斷網以后,進入周數據統計頁面,從服務器請求數據時出現閃退問題。
5、弱網UI測試
? 弱網的情況下,app很可能出現UI刷新不及時或者不刷新的情況,這時候就可能會導致呈現在用戶面前的是一個殘缺的頁面。偶會也會導致出現頁面UI元素錯亂的情況。
6、網絡切換測試
? 現在的公共wifi越來越多,用戶使用app中很可能發生這種情況:用著4G網絡時, 走上十幾米突然連上一個咖啡廳的公共wifi,再走一段距離又斷開了連接重新切換到4G模式。針對這種情況,我們在測試過程中也要考慮到不同的網絡切換是否會引發一些問題。
? 手環app和其他常規的app存在很大的不同。像淘寶微信等app,其中嵌入了大量的H5頁面,和服務端交互很頻繁,而手表的app在網絡交互這一塊,并不是那么頻繁,只有在幾個模塊上需要和服務端進行交互。因此,結合以上在網絡測試中的測試方向,針對公司app的情況,可以設計出app的網絡測試方案的測試點。
1、網絡測試中,首先要考慮無網絡的情況。
- app各個功能在無網絡情況下是否可用
- app各個頁面之間切換是否正常
- 發送網絡請求時是否會導致閃退、卡死等異常情況
- app各個頁面是否顯示完整美觀,未刷新的頁面是否做了相應的提示和處理
- 在無網絡情況下數據是否會丟失
- 無網絡提示信息是否友好
2、然后應該考慮弱網情景
- 弱網情況下app是否針對請求做了超時處理
- 網絡延遲的情況下,操作app進行數據同步、OTA升級是否會發生Crash、ANR等嚴重錯誤
- 弱網情況下,app請求回調未完成時,執行其他動作以及交互時,是否會出現app閃退等異常。
- 弱網情況下,原始數據是否出現丟失的情況
- 弱網環境下,是否會出現請求堆積的情況
- 弱網環境下,app各個頁面是否顯示完整
- 系統超時,提示信息是否清晰明確
- 弱網情況下app的響應時間是否在一個合理的時間范圍內
3、最后考慮網絡狀態之間的轉變
- 斷開網絡連接以后,操作app各個功能是否正常
- 同步數據過程中,斷開網絡連接,app是否出現異常情況
- 傳輸數據過程中,網絡由wifi切換到gprs,app是否出現異常情況
- 弱網環境下發送的請求是否在恢復網絡以后出現重復提交的情況
? 以上的測試類型里面,弱網測試是值得關注的重點。
很多時候,app在正常網絡環境中運行良好,但是在弱網情景下則頻繁出問題。
弱網又稱為網絡環境不良、網絡傳輸延遲,我們俗稱網絡卡的現象。
? 通常我們在咖啡廳或者車站的時候,連接公共wifi都有一種體會:網頁打不開、微信無法發送、qq消息延遲等,這些現象大多是網絡環境不良造成的。
? 當我們使用公司手環app時,下拉同步一次數據,app有時會在同步界面停頓超過10秒以上,如果app在同步數據時,未做超時處理機制的話,很可能會一直卡在數據同步界面,給用戶造成不良的使用體驗。
弱網測試就是通過各種工具和手段來模擬網絡延遲,來驗證軟件產品在弱網環境下的工作情況是否符合產品預期定義。
搭建測試環境
如果要做弱網測試,那么首先必須先搭建一個弱網的環境。
搭建弱網環境有幾種方法:
- 采用天然的弱網場所。
- 購買網絡損傷儀等硬件設備。
- 使用軟件模擬產生弱網環境。
? 天然的弱網環境有電梯
、GPRS盲點
、可控隔離箱
等,這些環境不太適合我們日常的測試工作,購買網絡損傷儀價格又比較貴,還有另一種方式就是通過各種工具模擬來模擬弱網環境。其中比較簡單的方法是使用筆記本電腦創建一個假熱點,但是不是每個人都隨身帶著一個筆記本電腦,所以我們可以采用軟件模擬的方式來搭建弱網環境。
可以模擬弱網環境的軟件比較多,在window環境下使用比較多是使用抓包工具Charles和Fiddle或者微軟的工具Network Emulator for Windows Toolkit以及Facebook的開源工具ATC。
由于ATC配置較為麻煩且需要linux環境,因此本文只介紹如何用Fiddler和NEWT來搭建弱網環境。
Fiddle模擬
? 首先我們可以采用Fiddle這個工具簡單模擬弱網環境。Fiddler模擬弱網環境的原理是通過設置代理來延遲發送或接收數據的時間來模擬限速。
? 首先需要注意的是,模擬弱網環境手機連接的wifi的ip地址必須和我們PC機的ip地址或者網關處于同一個網段。
手機wifi的ip地址是:
192.168.2.1
,那么我們的PC的ip地址也必須在192.168.2.xxx
,否者Fiddle無法通過代理的方式來監聽到通過這個網關的請求。
如何才能保證我們的手機IP地址和PC的IP地址在同一個網段?
- 方法一、手機和電腦同時連接同一臺wifi,在代理設置里面使用DHCP的方式自動獲取ip地址,這樣二者都是處于同一個網段內。
- 方法二、使用擁有無限網卡的PC機或者筆記本,創建一個wifi熱點,通過手機連接熱點,也可以在同一個網段內。創建Wifi熱點的步驟這里就不再詳述了。
因此我們最好在測試之前準備好一塊無線網卡或者隨身Wifi。
操作步驟
以上準備工作完成以后,打開Fiddle工具。
點擊菜單欄內的Rules
—Custom Rules
,或者開發Fiddle后直接按Ctrl + R
可以直接打開一份JS文本文件。在文本文件內查找類似下面的內容。
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";
}
oSession["request-trickle-delay"] = "300" #代表上行速率,發送1KB需要300ms
oSession["response-trickle-delay"] = "150" #代表下行速率,接受1KB需要150ms
Fiddle默認的上傳/下載1KB的數據需要300ms和150ms,要達到模擬弱網的情況,只需要把后面的數值改大即可。
Fiddler的算法: 1000/下載速度 = 需要等待的時間(毫秒)
? 我們設置1000ms,那么可以大致計算出網速為1Kbps。這里我們分別設置上行和下行參數為1000和800。
? 設置好參數以后保存退出custom.js
文件,這時不要忘記查看菜單內Rules
—Performance
內Simulate Modem Speeds
選項有沒有被勾選,一般設置完custom.js
文件以后,此選項被默認為未勾選狀態。
? 勾選Simulate Modem Speeds
選項,你會發現,打開一個網頁需要的時間已經慢了許多。
以上設置完畢以后,打開Fiddle菜單欄Tools
—Telerik Fiddle Options
默認設置監聽端口為8888
,勾選Allow remote computers to connect
。
在手機wifi內修改網絡(ios手機和andriod手機修改方式類似),選擇高級選項,在代理服務器一欄填寫你的電腦主機的ip地址,下方端口內填寫Fiddle里設置的8888
.
? 這時候,你在手機上執行的網絡請求操作在Fiddle界面已經顯示出來了,手機發出的網絡請求和接收的返回數據都已經處于延遲狀態。
NEWT模擬弱網
雖然Fiddle可以通過模擬延遲的方式達到弱網環境,但是真實的網絡環境是很復雜的,Fiddle無法模擬網絡錯誤、丟包、數據包亂序、網絡斷斷續續的情況。
這時候就需要使用另一個更強的工具Network Emulator for Windows Toolkit
準備
? 使用這個工具之前,我們需要提前準備有AP功能的無線網卡,可以使用360wifi或者小米wifi等產品均可。連接無線網卡以后在電腦上創建一個熱點Testwifi,并啟動熱點。手機連接Testwifi這個熱點以后,我們開始配置NEWT
。
安裝好NEWT
以后,打開界面是這樣的:
首先我們創建一個過濾器:點擊菜單欄configuration
選擇new filter
,或者點擊上圖工具欄內的沙漏圖標。
選擇為所有網絡設置過濾All Network
,也可以選擇下方的IPv4
為某個特定ip設置過濾器。這里勾選ALL Network
,其他選擇默認。
點擊Add按鈕后,下方表格內會出現一個新建的過濾器,點擊close
完成設置。
下一步設置一個新的連接,點擊configuration——New Link,新建一個連接。
上圖中新建的連接未配置時顯示為灰色,在連接上右鍵點擊,選擇Set Upstream,彈出如下窗口。
上圖菜單欄依次為Loss
、Error
、Latency
、BW&Queue
、bg Traffic
、Reorder
、Disconnected
,依次代表可以設置丟包、網絡錯誤、延遲、帶寬和隊列、背景傳輸、亂序數據、模擬斷續網絡。
這里最常用的就是前三個。依次可以設置丟包、錯誤、延遲的網絡狀態。由于選項比較多,下面只介紹最常用的功能。
丟包設置
No Loss 不丟包
Periodic Loss 設置每多少個包丟失一個packets
Random Loss 設置隨機丟包比率
當數據包經過網絡傳輸時,包中的數據可能發生錯誤。
Error設置
No Error:不模擬傳輸錯誤。
Random error:根據比率模擬隨機發生傳輸錯誤。
延遲發送和接受數據的時間
No Latency 不模擬延遲狀態
Fixed 延遲固定時間(單位:毫秒)
Uniform 按統一分布,延遲一定量的時間(時間控制在最大最小值之間)
Normal 按正態分布.延遲一定量的時間(average:平均值,Devation:偏差)
Bandwith 設置網絡帶寬
Queue 設置隊列,下方為丟包規則,分為丟包頭、丟包尾、隨機丟包等
? 其他選項使用的不多,不在這里詳述。以上四個選項設置完成以后,點擊確定按鈕完成上傳的設置。以同樣的步驟,在Local Application
下方的連接上右鍵點擊,選擇Set Downstream
,設置下行連接的狀態。
設置完成以后如下圖
? 點擊菜單欄Action-Start
,或者點擊三角符號,這時我們設置好的過濾器和連接已經啟動,可以在cmd
命令行ping
一下百度的地址查看一下效果。
? 如圖顯示出現請求超時、延遲發送、丟包等現象,說明我們配置已經生效了。
? 最后,按照上文提到的方法,連接wifi熱點以后,就可以按照之前規劃好的網絡測試方案和測試點進行測試了。