【弱網測試的背景】css
對於某些問題的定位可使用抓包來看數據。html
弱網測試,屬於健壯性測試的內容。web
1.用戶體驗瀏覽器
APP使用過程當中,弱網的高延遲和高丟包,在實時性要求很是高的場景下,用戶體驗容易減弱服務器
2.非正常狀況下,出現bug機率會增長微信
在平常的需求中,常常會遇到用戶反饋而且沒法簡單復現的問題,有很大一部分的問題是因爲用戶自身網絡環境的波動,或者自己網絡環境就比較惡劣,致使會出現一些意想不到的bug。cookie
【弱網測試的原理】網絡
使用代理捕捉網絡信號進行環境部署來分析APP的延遲(加載)時間,內容,提出HTTP優化建議,讓開發者可以在APP上線前提早預知APP在較差網絡環境下的表現,以便提早發現問題,進行有針對性優化。讓APP在任何網絡狀況下,都能表現自如。工具
核心流程 網絡請求》代理proxy》進行目標操做(修改返回值&延遲&丟包等)》返回給移動端性能
【模擬方法】
1.經過應用層或者傳輸層的代理服務器,在代理服務器上設置一些模擬惡劣網絡環境的參數,使得經過這些代理服務器的流量都被轉化爲弱網下的流量。如利用fiddler,Charles等具備代理服務器功能的網絡流量分析軟件來實現。
2.經過利用一些更底層的驅動層面的服務,經過控制網卡收包和發包的行爲,來模擬弱網環境。如dummynet的ipfw驅動等。
3.經過創建一個可控的網關,在網關上部署弱網的相關程序。
【實際操做】具備代理服務器功能的網絡流量分析軟件
一,Charles
經過抓包工具Charles(如何配置Charles),設置延遲,進行模擬不一樣的網絡狀況
配置好Charles後,選擇throttle setting設置弱網環境
Throttle settings
Throttle preset選擇弱網環境目標:2G和3G
注意:也能夠在Bandwidth(帶寬)中選擇上傳,下載數值
二,Fiddler
Fiddler是一個HTTP協議調試代理工具,跨瀏覽器,跨系統,跨平臺的免費webdebug代理服務器,它可以記錄並檢查全部你的電腦和互聯網之間的HTTP通信,設置斷點,查看全部的「進出」Fiddler的數據(指html,cookie,js,css等文件)。Fiddler是用C#寫出來的,它包含一個簡單卻功能強大的基於Jscrip .net事件腳本子系統,目前沒法在mac ,os上適用,能夠在win上適用。
Fiddler 界面說明
1.抓包
PC端設置網絡——》手機端使用PC端網絡代理
1)查找本機PC端網絡地址——》fiddler options 選擇connections設置端口信息&勾選allow remote computers to connect
2)手機端再設置———》選擇手動代理,並輸入PC端網絡代理
選擇fiddler options
勾選allow remote computers to connect
3)網絡鏈接成功·,則在移動端使用目標URL或者應用,獲得請求和返回信息
4)設置斷點
fiddler菜單欄——》rules——》automatic Breakpoints->選擇斷點方式,這種方式下設置的斷點會對以後全部http請求有效。
有兩個斷點位置:
a.before response 。也就是發送請求以後,fiddler代理中轉以前,這時能夠修改請求的數據。
b.after response。也就是服務器響應以後,在fiddler將響應中轉給客戶端以前,這時能夠修改響應的結果。
設置響應後斷點,能夠經過命令進行設置,bpafter localhost
5)修改返回值
觀察inspector,頁面內容出現變化(說明攔截成功)
切換到textView子面板,選擇須要修改的部分,而後點擊「run to complete」 ,即可回送修改後的響應
PS:終止斷點的方式有
1>在rules——》auto breakpoint 中disabled斷點便可;
2>在inspector界面點擊「run complete」便可終止本次AHTTP請求的斷點
3>輸入Go命令,也會使得當前的請求跳過斷點
2.模擬弱網
1)rules——》customer rules(或者Ctrl+r)
選擇Customize Rules
2)Ctrl+F組合鍵調出搜索對話框,輸入m_Simulate進行搜索,找到以下代碼框
upload 表明上傳速度
download 表明下載速度
完成設置——》保存——》點擊Perfermance——》點擊Simulate Modem Speeds ,完成弱網模擬功能的打開
m_SimulateModem
完成弱網工具環境搭建,來梳理下弱網測試場景和測試點。
一,【弱網測試場景】
既然APP弱網測試中,異常測試屬於必須考慮的測試項,哪些業務適合驗證,哪些業務不須要驗證呢?
1.結合APP自己屬性
好比社交類APP(聊天,搶紅包)對網絡環境依賴信大且用戶關注度高,弱網環境下須要重點關注。
結合互聯網金融APP,申購流程中建立訂單後是否支付成功,用戶關注度最高(涉及扣費)。例如弱網環境,建立訂單失敗,用戶關注是否被扣費;建立訂單成功後,支付失敗,再次支付是否重複扣費。
2.使用頻率&易遇到弱網的場景
好比微博APP【觀看小視頻】,用戶在碎片時間極易【觀看小視屏】(APP用戶喜歡使用碎片化時間進行娛樂操做),同時增長了【刷微博】(微博小視頻和刷微博 操做場景重合),此處就須要增強弱網環境測試。
好比金融APP ,用戶在碎片化時間使用金融APP,領取獎品,查看理財類新聞,查看收益
好的例子:微信的升級就會監聽用戶是否插着電,連着WiFi,一旦監聽到了,就立刻告訴你,現場能夠升級。
二,【弱網環境測試點總結】
1.場景:弱網環境下某個操做,響應時間
緣由:APP用戶等待時間容忍度低,弱網環境loading超過5S,用戶很容易kill應用後再進入應用
【測試點】性能測試中,加入弱網環境測試點,檢測各個場景網絡請求的API消耗時間(此處能夠放入性能測試中,做爲衡量APP性能好壞的指標)
2.場景:弱網環境下直至超時(UI界面友好度&APP是否穩定)
緣由:容錯機制主要是考慮弱網狀況下帶來的不穩定,常見的問題是:loading超時致使ANR或者crash
【測試點】弱網環境直至超時,判斷爲斷網狀態,UI界面和提示,友好且理解無歧義
3.場景:斷網後狀況下,是否自動重發請求
緣由:不一樣模塊,開發對請求處理不一樣。測試前可瞭解,代碼是否支持自動重複請求,自動重發的頻率是什麼?
【測試點】:斷網後恢復網絡,是否堆積網絡請求(目前來講,理財模塊,當10S左右無反應,將會重發請求),此時請求和返回正常狀況下,是否出現異常狀況。好比一次支付操做,斷網後堆積多個支付請求,恢復網絡後因堆積多個支付請求,是否完成屢次支付。
PS:斷網後恢復網絡,考慮APP進行操做目的是否傷害用戶體驗,經過哪一種手段能夠達到操做目的同時用戶體驗無感或者下降傷害
好比,微信但願在線升級某些內容,會自動監聽用戶是否插着電或者連着WIFi,一旦檢測到,APP自動升級。
1)插電場景,確保升級過程當中,耗電不會致使手機低電量甚至沒電
2)WiFi場景,確保升級過程當中,流量消耗不會使用用戶話費中流量包,不會致使因消耗話費流量影響用戶體驗
4.網絡請求中,kill進程(致使APP登陸狀態下掉線)
登陸同一帳號成功,應該不繼續相同網絡請求(要和RD確認,程序實際實現)
登陸不一樣帳號成功,應該不繼續相同網絡請求(要和RD確認,程序實際實現)
三,【常見弱網問題和緣由分析】
1.場景:上傳大圖或者多圖時,在弱網環境下出現進度條走到一半卡住,而後又從頭開始
緣由:採用分段上傳的方式,直至請求超時,分段請求沒有結束,代碼邏輯不對,致使每次重試都從頭上傳,一直循環。
2.場景:在弱網環境下容易出現登陸不上或者登錄後當即掉線
緣由:登陸沒有緩衝機制,而請求超時時間的設置沒有區分網絡狀況。
解決方案:建議開發針對WiFi,2g,3G,4G設置不一樣的超時時間
3.場景:弱網環境下,請求的數據返回時間較長,等待過程當中,若是頁面上其它的控件仍能夠操做,則容易出現異常狀況(閃退,觸發底部時得到原頁面請求數據)
緣由:依賴數據的控件操做,在數據返回前沒有作兼容處理。
4.場景:搜索時輸入關鍵字會連續發請求,停下時,顯示最終的關鍵字搜索結果,但很快又會被前面的關鍵字搜索結果覆蓋了;
緣由:中間的返回請求較慢,顯示了最終的結果後,以前的請求返回的數據應不作處理。