『言善信』Fiddler工具 — 14、使用Fiddler進行弱網測試

繁華似錦Fighting發表於2021-06-17

1、什麼是弱網測試

從測試角度來說,需要額外關注的場景遠不止斷網、網路故障等情況,還需要關注弱網情況下測試。

弱網測試屬於健壯性測試的內容。隨著國內移動端迅猛發展,大大增加使用者碎片化使用使用APP的。想象一下,使用者在地鐵裡,甚至是電梯,車庫等場景使用APP,我們就需要針對這些場景的弱網環境下,驗證出現丟包、延時軟體的處理機制,避免因使用者體驗不友好造成使用者的流失。

2、弱網環境的影響

  1. 使用者體驗。
    使用者使用過程中,弱網的高延遲和高丟包,在實時性要求非常高的場景,容易傷害使用者體驗。
  2. 非正常情況下,出現bug概率會增加。
    在解決日常的支援需求中,經常會遇到使用者反饋一些無法簡單復現的bug,有很大一部分的bug是由於使用者自身的網路環境波動,或者是本身網路環境就較為惡劣,而服務在面對這些惡劣的網路環境的健壯性不夠,導致會出現一些意想不到的bug。

3、弱網環境測試場景

  1. 場景:測試弱網環境下某個操作響應時間
    原因:使用者對等待時間容忍度低,若弱網環境載入超過5s,使用者很容易kill應用後再次進入應用。
    測試點:效能測試中,加入弱網環境測試點,檢測各個場景網路請求的 API 消耗時間(此處可以放入效能測試中,做為衡量軟體效能好壞的指標)。
  2. 場景:測試弱網環境下直至超時,UI介面友好度和APP是否穩定。
    原因:容錯機制主要是考慮弱網情況下帶來的不穩定,常見的問題是:loading超時導致ANR(無響應)或者crash當機。
    測試點:弱網環境直至超時,判定為斷網狀態,UI介面和提示,友好且理解無歧義。
  3. 場景:測試斷網後環境下,是否自動重發請求。
    原因:不同模組,開發對請求處理不同。測試前可瞭解,程式碼是否支援自動重複請求,自動重發請求的頻率是什麼?
    測試點:斷網後恢復網路,是否堆積網路請求(目前來說理財模組,當10s左右無返回,則會重發請求),此時請求和返回正常情況下,是否出現異常情況。比如一次支付操作,斷網後堆積多個支付請求,恢復網路後因堆積多個支付請求,是否完成多次支付。
    ps:斷網後恢復網路,考慮APP進行操作目的是否對傷害使用者體驗,通過哪種手段可以達到操作目的,同時使用者體驗無感或者低傷害。

還有很多弱網測試的場景,就不一一列舉了。

4、使用Fiddler進行弱網測試

(1)Fiddler模擬弱網環境

Fiddler模擬弱網環境是非常簡單的,操作如下:

Rules選單 —> Performance —> 勾選Simulate Modem Speeds

勾選之後訪問網站會發現網路慢了很多,不需要進行重啟Fiddler。

image

(2)設定弱網的引數

選單Rules —> Cutomize Rules...,來開啟CustomRules.js檔案。

在檔案中搜尋關鍵字m_SimulateModem

image

讓我們來分析一下這幾行程式碼:

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

抓取結果如下:

image

2)開啟弱網環境傳送請求

Rules選單 —> Performance —> 勾選Simulate Modem Speeds

image

可以看到比正常網速傳送請求慢了很多。我這裡使用的是預設配置,如果需要調整弱網的程度,可以自行調整弱網引數。

(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介面進行檢視也行。

參考:

相關文章