1、什麼是弱網測試
從測試角度來說,需要額外關注的場景遠不止斷網、網路故障等情況,還需要關注弱網情況下測試。
弱網測試屬於健壯性測試的內容。隨著國內移動端迅猛發展,大大增加使用者碎片化使用使用APP的。想象一下,使用者在地鐵裡,甚至是電梯,車庫等場景使用APP,我們就需要針對這些場景的弱網環境下,驗證出現丟包、延時軟體的處理機制,避免因使用者體驗不友好造成使用者的流失。
2、弱網環境的影響
- 使用者體驗。
使用者使用過程中,弱網的高延遲和高丟包,在實時性要求非常高的場景,容易傷害使用者體驗。 - 非正常情況下,出現bug概率會增加。
在解決日常的支援需求中,經常會遇到使用者反饋一些無法簡單復現的bug,有很大一部分的bug是由於使用者自身的網路環境波動,或者是本身網路環境就較為惡劣,而服務在面對這些惡劣的網路環境的健壯性不夠,導致會出現一些意想不到的bug。
3、弱網環境測試場景
- 場景:測試弱網環境下某個操作響應時間
原因:使用者對等待時間容忍度低,若弱網環境載入超過5s,使用者很容易kill應用後再次進入應用。
測試點:效能測試中,加入弱網環境測試點,檢測各個場景網路請求的 API 消耗時間(此處可以放入效能測試中,做為衡量軟體效能好壞的指標)。 - 場景:測試弱網環境下直至超時,UI介面友好度和APP是否穩定。
原因:容錯機制主要是考慮弱網情況下帶來的不穩定,常見的問題是:loading超時導致ANR(無響應)或者crash當機。
測試點:弱網環境直至超時,判定為斷網狀態,UI介面和提示,友好且理解無歧義。 - 場景:測試斷網後環境下,是否自動重發請求。
原因:不同模組,開發對請求處理不同。測試前可瞭解,程式碼是否支援自動重複請求,自動重發請求的頻率是什麼?
測試點:斷網後恢復網路,是否堆積網路請求(目前來說理財模組,當10s左右無返回,則會重發請求),此時請求和返回正常情況下,是否出現異常情況。比如一次支付操作,斷網後堆積多個支付請求,恢復網路後因堆積多個支付請求,是否完成多次支付。
ps:斷網後恢復網路,考慮APP進行操作目的是否對傷害使用者體驗,通過哪種手段可以達到操作目的,同時使用者體驗無感或者低傷害。
還有很多弱網測試的場景,就不一一列舉了。
4、使用Fiddler進行弱網測試
(1)Fiddler模擬弱網環境
Fiddler模擬弱網環境是非常簡單的,操作如下:
Rules選單 —> Performance
—> 勾選Simulate Modem Speeds
,
勾選之後訪問網站會發現網路慢了很多,不需要進行重啟Fiddler。
(2)設定弱網的引數
選單Rules —> Cutomize Rules...
,來開啟CustomRules.js
檔案。
在檔案中搜尋關鍵字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
:表示一個開關flag。
當Rules選單 —>Performance
—>Simulate Modem Speeds
是勾選狀態,則flag=true,就進入這段程式碼,開啟弱網。如果Simulate Modem Speeds
不是勾選狀態,則反之。oSession["request-trickle-delay"] = "300";
表示限制上傳速度。
註釋說的也很明白:上傳1KB
內容需要300ms
,轉化一下上傳速度:1Kb/0.3s = 3.3KB/s
,也就是說網路上行速度只有3.3KB/S
。oSession["response-trickle-delay"] = "150";
表示限制下載速度。
說明:下載1KB
內容需要150ms
,轉化後的下載速度:1KB/0.15s=6.6KB/s
,也就是說網路下載速度只有6.6KB/S
。- 總結:我們就修改最後的資料就可以,數值越大網路越慢。
(3)進行弱網測試對比
1)先用正常的網速傳送請求
例如方位:http://test.lemonban.com/ningmengban/app/login/login.html
抓取結果如下:
2)開啟弱網環境傳送請求
Rules選單 —> Performance
—> 勾選Simulate Modem Speeds
。
可以看到比正常網速傳送請求慢了很多。我這裡使用的是預設配置,如果需要調整弱網的程度,可以自行調整弱網引數。
(4)恢復設定
完成測試之後,需要再次執行:Rules選單 —> Performance
—> 勾選Simulate Modem Speeds
,關閉弱網模擬。
5、補充:TimeTaken/ms列配置
TimeTaken/ms
列是計算完成請求的用時。
配置方法:
Rules選單 —> Custome Rules
,搜尋class Handlers
。
加在class Handlers
裡面新增,如下程式碼:
//左側資訊會顯示時間
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
介面進行檢視也行。
參考: