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。

『言善信』Fiddler工具 — 14、使用Fiddler进行弱网测试-LMLPHP

(2)设置弱网的参数

菜单Rules —> Cutomize Rules...,来打开CustomRules.js文件。

在文件中搜索关键字m_SimulateModem

『言善信』Fiddler工具 — 14、使用Fiddler进行弱网测试-LMLPHP

让我们来分析一下这几行代码:

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

抓取结果如下:

『言善信』Fiddler工具 — 14、使用Fiddler进行弱网测试-LMLPHP

2)开启弱网环境发送请求

Rules菜单 —> Performance —> 勾选Simulate Modem Speeds

『言善信』Fiddler工具 — 14、使用Fiddler进行弱网测试-LMLPHP

可以看到比正常网速发送请求慢了很多。我这里使用的是默认配置,如果需要调整弱网的程度,可以自行调整弱网参数。

(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;
}
06-17 18:49