1选泻、什么是弱網(wǎng)測試
從測試角度來說,需要額外關(guān)注的場景遠(yuǎn)不止斷網(wǎng)、網(wǎng)絡(luò)故障等情況滔金,還需要關(guān)注弱網(wǎng)情況下測試色解。
弱網(wǎng)測試屬于健壯性測試的內(nèi)容。隨著國內(nèi)移動端迅猛發(fā)展餐茵,大大增加用戶碎片化使用使用APP的科阎。想象一下,用戶在地鐵里忿族,甚至是電梯锣笨,車庫等場景使用APP,我們就需要針對這些場景的弱網(wǎng)環(huán)境下道批,驗(yàn)證出現(xiàn)丟包错英、延時軟件的處理機(jī)制,避免因用戶體驗(yàn)不友好造成用戶的流失隆豹。
2椭岩、弱網(wǎng)環(huán)境的影響
-
用戶體驗(yàn)。
用戶使用過程中璃赡,弱網(wǎng)的高延遲和高丟包判哥,在實(shí)時性要求非常高的場景,容易傷害用戶體驗(yàn)碉考。
-
非正常情況下塌计,出現(xiàn)bug概率會增加。
在解決日常的支持需求中侯谁,經(jīng)常會遇到用戶反饋一些無法簡單復(fù)現(xiàn)的bug锌仅,有很大一部分的bug是由于用戶自身的網(wǎng)絡(luò)環(huán)境波動,或者是本身網(wǎng)絡(luò)環(huán)境就較為惡劣墙贱,而服務(wù)在面對這些惡劣的網(wǎng)絡(luò)環(huán)境的健壯性不夠热芹,導(dǎo)致會出現(xiàn)一些意想不到的bug。
3惨撇、弱網(wǎng)環(huán)境測試場景
-
場景:測試弱網(wǎng)環(huán)境下某個操作響應(yīng)時間
原因:用戶對等待時間容忍度低剿吻,若弱網(wǎng)環(huán)境加載超過5s,用戶很容易kill應(yīng)用后再次進(jìn)入應(yīng)用串纺。
測試點(diǎn):性能測試中,加入弱網(wǎng)環(huán)境測試點(diǎn)椰棘,檢測各個場景網(wǎng)絡(luò)請求的 API 消耗時間(此處可以放入性能測試中纺棺,做為衡量軟件性能好壞的指標(biāo))。
-
場景:測試弱網(wǎng)環(huán)境下直至超時邪狞,UI界面友好度和APP是否穩(wěn)定祷蝌。
原因:容錯機(jī)制主要是考慮弱網(wǎng)情況下帶來的不穩(wěn)定,常見的問題是:loading超時導(dǎo)致ANR(無響應(yīng))或者crash宕機(jī)帆卓。
測試點(diǎn):弱網(wǎng)環(huán)境直至超時巨朦,判定為斷網(wǎng)狀態(tài)米丘,UI界面和提示,友好且理解無歧義糊啡。
-
場景:測試斷網(wǎng)后環(huán)境下拄查,是否自動重發(fā)請求。
原因:不同模塊棚蓄,開發(fā)對請求處理不同堕扶。測試前可了解,代碼是否支持自動重復(fù)請求梭依,自動重發(fā)請求的頻率是什么稍算?
測試點(diǎn):斷網(wǎng)后恢復(fù)網(wǎng)絡(luò),是否堆積網(wǎng)絡(luò)請求(目前來說理財(cái)模塊役拴,當(dāng)10s左右無返回糊探,則會重發(fā)請求),此時請求和返回正常情況下河闰,是否出現(xiàn)異常情況科平。比如一次支付操作,斷網(wǎng)后堆積多個支付請求淤击,恢復(fù)網(wǎng)絡(luò)后因堆積多個支付請求匠抗,是否完成多次支付。
ps:斷網(wǎng)后恢復(fù)網(wǎng)絡(luò)污抬,考慮APP進(jìn)行操作目的是否對傷害用戶體驗(yàn)汞贸,通過哪種手段可以達(dá)到操作目的,同時用戶體驗(yàn)無感或者低傷害印机。
還有很多弱網(wǎng)測試的場景矢腻,就不一一列舉了。
4射赛、使用Fiddler進(jìn)行弱網(wǎng)測試
(1)Fiddler模擬弱網(wǎng)環(huán)境
Fiddler模擬弱網(wǎng)環(huán)境是非常簡單的多柑,操作如下:
Rules菜單 —> Performance —> 勾選Simulate Modem Speeds
,
勾選之后訪問網(wǎng)站會發(fā)現(xiàn)網(wǎng)絡(luò)慢了很多楣责,不需要進(jìn)行重啟Fiddler竣灌。
(2)設(shè)置弱網(wǎng)的參數(shù)
菜單Rules —> Cutomize Rules...
,來打開CustomRules.js
文件秆麸。
在文件中搜索關(guān)鍵字m_SimulateModem
初嘹。
讓我們來分析一下這幾行代碼:
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";
}
-
m_SimulateModem
:表示一個開關(guān)flag。當(dāng)Rules菜單 —> Performance —>
Simulate Modem Speeds
是勾選狀態(tài)沮趣,則flag=true屯烦,就進(jìn)入這段代碼,開啟弱網(wǎng)。如果Simulate Modem Speeds
不是勾選狀態(tài)驻龟,則反之温眉。 -
oSession["request-trickle-delay"] = "300";
表示限制上傳速度。注釋說的也很明白:上傳
1KB
內(nèi)容需要300ms
翁狐,轉(zhuǎn)化一下上傳速度:1Kb/0.3s = 3.3KB/s
类溢,也就是說網(wǎng)絡(luò)上行速度只有3.3KB/S
。 -
oSession["response-trickle-delay"] = "150";
表示限制下載速度谴蔑。說明:下載
1KB
內(nèi)容需要150ms
豌骏,轉(zhuǎn)化后的下載速度:1KB/0.15s=6.6KB/s
,也就是說網(wǎng)絡(luò)下載速度只有6.6KB/S
。 總結(jié):我們就修改最后的數(shù)據(jù)就可以隐锭,數(shù)值越大網(wǎng)絡(luò)越慢窃躲。
(3)進(jìn)行弱網(wǎng)測試對比
1)先用正常的網(wǎng)速發(fā)送請求
例如方位:http://test.lemonban.com/ningmengban/app/login/login.html
抓取結(jié)果如下:
2)開啟弱網(wǎng)環(huán)境發(fā)送請求
Rules菜單 —> Performance —> 勾選Simulate Modem Speeds
。
可以看到比正常網(wǎng)速發(fā)送請求慢了很多钦睡。我這里使用的是默認(rèn)配置蒂窒,如果需要調(diào)整弱網(wǎng)的程度,可以自行調(diào)整弱網(wǎng)參數(shù)荞怒。
(4)恢復(fù)設(shè)置
完成測試之后洒琢,需要再次執(zhí)行:Rules菜單 —> Performance —> 勾選Simulate Modem Speeds
,關(guān)閉弱網(wǎng)模擬褐桌。
5衰抑、補(bǔ)充:TimeTaken/ms列配置
TimeTaken/ms
列是計(jì)算完成請求的用時。
配置方法:
Rules菜單 —> Custome Rules荧嵌,搜索class Handlers
呛踊。
加在class Handlers
里面添加,如下代碼:
//左側(cè)信息會顯示時間
public static BindUIColumn("TimeTaken/ms", 120)
function TimeTaken(oS: Session):String{
var sResult = "0";
//獲得時間戳的ms值
var t1_ms = oS.Timers.ClientBeginResponse.ToUniversalTime().Millisecond;
//獲得時間戳的minute值
var t1_m = oS.Timers.ClientBeginResponse.ToUniversalTime().Minute;
//獲得時間戳的second值
var t1_s = oS.Timers.ClientBeginResponse.ToUniversalTime().Second;
var t1 = t1_m*60*1000 + t1_s*1000 + t1_ms ;
var t2_ms = oS.Timers.ClientDoneRequest.ToUniversalTime().Millisecond;
var t2_m = oS.Timers.ClientDoneRequest.ToUniversalTime().Minute;
var t2_s = oS.Timers.ClientDoneRequest.ToUniversalTime().Second;
var t2 = t2_m*60*1000 + t2_s*1000 + t2_ms ;
if(t1 >= t2){
var t3 = t1 - t2;
sResult = t3.toString();
}
return sResult;
}
提示:不想配置TimeTaken/ms列也可以啦撮,在
Statistics
界面進(jìn)行查看也行谭网。
參考: