【背景】
弱網(wǎng)測(cè)試盏筐,屬于健壯性測(cè)試的內(nèi)容围俘。隨著國(guó)內(nèi)移動(dòng)端迅猛發(fā)展,大大增加用戶碎片化使用移動(dòng)端的概率琢融。想象一下界牡,用戶在地鐵里,巴士上漾抬,甚至是電梯宿亡,車庫(kù)等場(chǎng)景使用APP,我們就需要針對(duì)這些場(chǎng)景的弱網(wǎng)環(huán)境下纳令,驗(yàn)證出現(xiàn)丟包挽荠、延時(shí)軟件的處理機(jī)制,避免因用戶體驗(yàn)不友好造成用戶的流失平绩。
1.用戶體驗(yàn)
APP使用過(guò)程中圈匆,弱網(wǎng)的高延遲和高丟包,在實(shí)時(shí)性要求非常高的場(chǎng)景捏雌,容易傷害用戶體驗(yàn)
2.非正常情況下跃赚,出現(xiàn)bug概率會(huì)增加
在解決日常的支持需求中,經(jīng)常會(huì)遇到一些用戶反饋一些無(wú)法簡(jiǎn)單復(fù)現(xiàn)的bug腹忽,有很大一部分的bug是由于用戶自身的網(wǎng)絡(luò)環(huán)境波動(dòng)来累,或者是本身網(wǎng)絡(luò)環(huán)境就較為惡劣砚作,而服務(wù)在面對(duì)這種惡劣的網(wǎng)絡(luò)環(huán)境的健壯性不夠窘奏,導(dǎo)致會(huì)出現(xiàn)一些意想不到的bug
【原理】
使用代理捕獲網(wǎng)絡(luò)信號(hào)進(jìn)行環(huán)境部署來(lái)分析APP的延遲(加載)時(shí)間嘹锁、內(nèi)容,提出HTTP優(yōu)化建議着裹,讓開發(fā)者能夠在APP上線前提前預(yù)知app在較差網(wǎng)絡(luò)環(huán)境下的表現(xiàn)领猾,以便提前發(fā)現(xiàn)問(wèn)題,進(jìn)行有針對(duì)性優(yōu)化骇扇。讓APP在任何網(wǎng)絡(luò)情況下摔竿,都能表現(xiàn)自如,出類拔萃
核心流程 網(wǎng)絡(luò)請(qǐng)求—》代理proxy—》進(jìn)行目標(biāo)操作(修改返回值&延遲&丟包等)—》返回給移動(dòng)端(見(jiàn)下圖)
【模擬方法】
當(dāng)前模擬惡劣網(wǎng)絡(luò)環(huán)境主要可以通過(guò)以下這些手段實(shí)現(xiàn):
通過(guò)應(yīng)用層或者傳輸層的代理服務(wù)器少孝,通過(guò)在代理服務(wù)器上設(shè)置一些模擬惡劣網(wǎng)絡(luò)環(huán)境的參數(shù)继低,使得通過(guò)這些代理服務(wù)器的流量都被轉(zhuǎn)化為惡劣網(wǎng)絡(luò)環(huán)境下的流量。如利用Fiddler稍走,Charles等具有代理服務(wù)器功能的網(wǎng)絡(luò)流量分析軟件來(lái)實(shí)現(xiàn)袁翁。
通過(guò)利用一些更底層的驅(qū)動(dòng)層面的服務(wù),通過(guò)控制網(wǎng)卡的收包發(fā)包的行為婿脸,來(lái)模擬惡劣的網(wǎng)絡(luò)環(huán)境粱胜。如dummynet的ipfw驅(qū)動(dòng)等。
通過(guò)建立一個(gè)可控的網(wǎng)關(guān)狐树,在網(wǎng)關(guān)上部署模擬惡劣環(huán)境的相關(guān)程序焙压,所有需要借助該網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)的流量都會(huì)被模擬為惡劣網(wǎng)絡(luò)條件。Linux下的netem就提供了這類支持抑钟。
ps:實(shí)際生活中,電梯里 or 地鐵里 模擬用戶體驗(yàn)測(cè)試是個(gè)不錯(cuò)的選擇~~~O(∩_∩)O~~
【實(shí)際操作】具有代理服務(wù)器功能的網(wǎng)絡(luò)流量分析軟件
一涯曲、Charles
通過(guò)抓包工具Charles(如何配置Charles),設(shè)置延遲在塔,進(jìn)行模擬不同的網(wǎng)絡(luò)情況
配置好Charles后掀抹,正常聯(lián)網(wǎng),選擇throttle settings 設(shè)置弱網(wǎng)環(huán)境
Throttle preset 選擇弱網(wǎng)環(huán)境目標(biāo):2G或者3G
ps:也可在在Bandwidth(帶寬)中選擇上傳心俗、下載數(shù)值
二傲武、Fiddler
Fiddler是一個(gè)http協(xié)議調(diào)試代理工具,跨瀏覽器城榛、跨系統(tǒng)揪利、跨平臺(tái)的免費(fèi)Web Debug代理服務(wù)器,它能夠記錄并檢查所有你的電腦和互聯(lián)網(wǎng)之間的http通訊狠持,設(shè)置斷點(diǎn)疟位,查看所有的“進(jìn)出”Fiddler的數(shù)據(jù)(指cookie,html,js,css等文件,這些都可以讓你胡亂修改的意思)喘垂。Fiddler 是用C#寫出來(lái)的,它包含一個(gè)簡(jiǎn)單卻功能強(qiáng)大的基于JScript .NET 事件腳本子系統(tǒng)甜刻,目前無(wú)法再mac OS上適用绍撞,可以在win上使用。
1.抓包
PC端設(shè)置網(wǎng)絡(luò)—》手機(jī)端使用PC端網(wǎng)絡(luò)代理
1)查找本機(jī)PC端網(wǎng)絡(luò)地址—》fidder options選擇connections 設(shè)置端口信息&勾選allow remote computers to connect
2)手機(jī)端在設(shè)置—》選擇手動(dòng)代理得院,并輸入PC端網(wǎng)絡(luò)代理
3)網(wǎng)絡(luò)連接成功傻铣,則在移動(dòng)端使用目標(biāo)URL或者使用應(yīng)用,得到請(qǐng)求和返回信息
4)設(shè)置斷點(diǎn)
A?fiddler菜單欄->rules->automatic?Breakpoints->選擇斷點(diǎn)方式祥绞,這種方式下設(shè)定的斷點(diǎn)會(huì)對(duì)之后的所有HTTP請(qǐng)求有效非洲。
有兩個(gè)斷點(diǎn)位置:
a) before?response。也就是發(fā)送請(qǐng)求之后蜕径,但是Fiddler代理中轉(zhuǎn)之前两踏,這時(shí)可以修改請(qǐng)求的數(shù)據(jù)。
b.)after?response兜喻。也就是服務(wù)器響應(yīng)之后梦染,但是在Fiddler將響應(yīng)中轉(zhuǎn)給客戶端之前。這時(shí)可以修改響應(yīng)的結(jié)果
B ?設(shè)置響應(yīng)后斷點(diǎn)(after?response?breakpoint),可以通過(guò)命令行設(shè)置:bpafter?localhost
5)修改返回值
觀察inspector朴皆,頁(yè)面內(nèi)容出現(xiàn)變化(說(shuō)明攔截成功)
切換到textView子面板帕识,選擇需要修改的部分,然后點(diǎn)擊 “run to complete“车荔,便可回送修改后的響應(yīng)
ps:終止斷點(diǎn)的方式有:
1> 在rules->auto?breakpoint中disabled斷點(diǎn)即可渡冻。
2> 在inspector界面點(diǎn)擊“run?complete“即會(huì)終止本次HTTP請(qǐng)求的斷點(diǎn)。
3>輸入Go 命令忧便,也會(huì)使得當(dāng)前的請(qǐng)求跳過(guò)斷點(diǎn)
2.模擬弱網(wǎng)
1)Rules—》customer rules(或者ctrl+r)
2)Ctrl+F組合鍵調(diào)出搜索對(duì)話框族吻,鍵入m_Simulate進(jìn)行搜索,找到如下代碼框
upload代表 上傳速度
download代表下載速度
完成設(shè)置—》保存—》點(diǎn)擊Performance-->點(diǎn)擊Simulate Modem Speeds珠增,完成弱網(wǎng)模擬功能的打開
完成弱網(wǎng)工具環(huán)境搭建超歌,來(lái)梳理下弱網(wǎng)測(cè)試場(chǎng)景和測(cè)試點(diǎn)。
一蒂教、【弱網(wǎng)測(cè)試場(chǎng)景】
既然APP異常測(cè)試中巍举,弱網(wǎng)測(cè)試屬于必須考慮的測(cè)試項(xiàng),哪些業(yè)務(wù)適合驗(yàn)證凝垛,哪些不需要驗(yàn)證呢懊悯?以下是個(gè)人淺見(jiàn),歡迎拋磚引玉:
1.結(jié)合APP本身屬性
比如社交類APP(聊天梦皮、搶紅包)對(duì)網(wǎng)絡(luò)環(huán)境依賴性大且用戶關(guān)注度高炭分,弱網(wǎng)環(huán)境下需要重點(diǎn)關(guān)注。
結(jié)合互聯(lián)網(wǎng)金融APP剑肯,申購(gòu)流程中創(chuàng)建訂單后是否支付成功捧毛,用戶關(guān)注度最高(涉及扣費(fèi))。例如 弱網(wǎng)環(huán)境,創(chuàng)建訂單失敗呀忧,用戶關(guān)注是否被扣費(fèi)师痕;創(chuàng)建訂單成功后支付失敗,再次支付是否重復(fù)扣費(fèi)等
2.使用頻率&易遇到弱網(wǎng)的場(chǎng)景
比如微博APP【觀看小視頻】而账,用戶在碎片時(shí)間極易【觀看小視頻】(APP用戶喜歡使用碎片化時(shí)間進(jìn)行娛樂(lè)操作)胰坟,同時(shí)增加了【刷微博】(微博小視頻和刷微博 操作場(chǎng)景重合)此處就需要加強(qiáng)弱網(wǎng)環(huán)境測(cè)試
比如金融APP,用戶在碎片化時(shí)間使用金融APP福扬,領(lǐng)取獎(jiǎng)品腕铸、查看理財(cái)類新聞惜犀、查看收益
好的例子:據(jù)我所知铛碑,微信的升級(jí)就會(huì)監(jiān)聽用戶是否插著電,連著wifi虽界,一旦監(jiān)聽到了汽烦,就馬上告訴你,現(xiàn)場(chǎng)可以升級(jí)
二莉御、【弱網(wǎng)環(huán)境測(cè)試點(diǎn)總結(jié)】
1.場(chǎng)景:弱網(wǎng)環(huán)境下某個(gè)操作響應(yīng)時(shí)間
原因:APP用戶對(duì)等待時(shí)間容忍度低撇吞,若弱網(wǎng)環(huán)境loading超過(guò)5s,用戶很容易kill應(yīng)用后再次進(jìn)入應(yīng)用
【測(cè)試點(diǎn)】性能測(cè)試中礁叔,加入弱網(wǎng)環(huán)境測(cè)試點(diǎn)牍颈,檢測(cè)各個(gè)場(chǎng)景網(wǎng)絡(luò)請(qǐng)求的 API 消耗時(shí)間(此處可以放入性能測(cè)試中,做為衡量APP性能好壞的指標(biāo))
2.場(chǎng)景:弱網(wǎng)環(huán)境下直至超時(shí)琅关,UI界面友好度&APP是否穩(wěn)定
原因:容錯(cuò)機(jī)制主要是考慮弱網(wǎng)情況下帶來(lái)的不穩(wěn)定煮岁,常見(jiàn)的問(wèn)題是:loading超時(shí)導(dǎo)致ANR or crash
【測(cè)試點(diǎn)】弱網(wǎng)環(huán)境直至超時(shí),判定為斷網(wǎng)狀態(tài)涣易,UI界面和提示画机,友好且理解無(wú)歧義
3.場(chǎng)景:斷網(wǎng)后環(huán)境下,是否自動(dòng)重發(fā)請(qǐng)求
原因:不同模塊新症,開發(fā)對(duì)請(qǐng)求處理不同步氏。測(cè)試前可了解,代碼是否支持自動(dòng)重復(fù)請(qǐng)求徒爹,自動(dòng)重發(fā)請(qǐng)求的頻率是什么荚醒?
【測(cè)試點(diǎn)】斷網(wǎng)后恢復(fù)網(wǎng)絡(luò),是否堆積網(wǎng)絡(luò)請(qǐng)求(目前來(lái)說(shuō) 理財(cái)模塊 當(dāng)10s左右無(wú)返回 則會(huì)重發(fā)請(qǐng)求)隆嗅,此時(shí)請(qǐng)求和返回正常情況下界阁,是否出現(xiàn)異常情況。比如1次支付操作榛瓮,斷網(wǎng)后堆積多個(gè)支付請(qǐng)求铺董,恢復(fù)網(wǎng)絡(luò)后因堆積多個(gè)支付請(qǐng)求,是否完成多次支付
ps:斷網(wǎng)后恢復(fù)網(wǎng)絡(luò),考慮APP進(jìn)行操作目的是否對(duì)傷害用戶體驗(yàn)精续,通過(guò)哪種手段 可以達(dá)到操作目的同時(shí)用戶體驗(yàn)無(wú)感或者低傷害
比如坝锰,微信希望在線升級(jí)某些內(nèi)容,會(huì)自動(dòng)監(jiān)聽用戶是否插著電 or 連著wifi重付,一旦監(jiān)聽符合上述場(chǎng)景顷级,APP自動(dòng)升級(jí):
1)插電場(chǎng)景 確保升級(jí)過(guò)程中,耗電不會(huì)導(dǎo)致手機(jī)低電量甚至沒(méi)電
2)wifi場(chǎng)景确垫,確保升級(jí)過(guò)程中弓颈,流量消耗不會(huì)使用用戶話費(fèi)中流量包,不會(huì)導(dǎo)致因消耗話費(fèi)流量傷害用戶體驗(yàn)
4.網(wǎng)絡(luò)請(qǐng)求中删掀,kill進(jìn)程 (導(dǎo)致APP登錄態(tài)掉線)
登錄同一個(gè)賬號(hào)成功翔冀,應(yīng)該不繼續(xù)相同網(wǎng)絡(luò)請(qǐng)求(要和RD確認(rèn),程序?qū)嶋H實(shí)現(xiàn))
登錄不同賬號(hào)成功披泪,應(yīng)該不繼續(xù)相同網(wǎng)絡(luò)請(qǐng)求(要和RD確認(rèn)纤子,程序?qū)嶋H實(shí)現(xiàn))
三、【常見(jiàn)弱網(wǎng)問(wèn)題和原因分析】
1.場(chǎng)景:上傳大圖或者多圖時(shí)款票,在弱網(wǎng)絡(luò)環(huán)境下出現(xiàn)進(jìn)度條走到一半卡住然后又從頭開始
原因:采用分段上傳方式控硼,直至請(qǐng)求超時(shí),分段傳輸沒(méi)有結(jié)束艾少,代碼邏輯不對(duì)卡乾,導(dǎo)致每次重試都重頭上傳,一直循環(huán)
2.場(chǎng)景:在弱網(wǎng)絡(luò)環(huán)境下容易出現(xiàn)登錄不上或者登陸后立即掉線
原因:登錄沒(méi)有緩沖機(jī)制缚够,而請(qǐng)求超時(shí)時(shí)間的設(shè)置沒(méi)有區(qū)分同網(wǎng)絡(luò)情況
解決方案:建議開發(fā)針對(duì)wifi幔妨、2g、3g潮瓶、4g設(shè)置不同的超時(shí)時(shí)間
3.場(chǎng)景:弱網(wǎng)絡(luò)環(huán)境下陶冷,請(qǐng)求的數(shù)據(jù)返回時(shí)間較長(zhǎng),等待的過(guò)程中毯辅,如果頁(yè)面上的相關(guān)控件仍然可以操作埂伦,則容易出現(xiàn)異常現(xiàn)(閃退現(xiàn)象思恐、觸發(fā)底部時(shí)獲得原頁(yè)面請(qǐng)求數(shù)據(jù))
原因:依賴數(shù)據(jù)的控件操作沾谜,在數(shù)據(jù)返回前沒(méi)有做兼容處理
4.場(chǎng)景:搜索時(shí)輸入關(guān)鍵字會(huì)連續(xù)發(fā)請(qǐng)求,停下時(shí)胀莹,顯示最終的關(guān)鍵字搜索結(jié)果基跑,但很快又會(huì)被前面的關(guān)鍵字搜索結(jié)果覆蓋了;
原因:中間的請(qǐng)求返回較慢描焰,顯示了最終的結(jié)果后媳否,之前的請(qǐng)求返回的數(shù)據(jù)應(yīng)不做處理栅螟。