弱网测试

1.1 为什么要做弱网测试?

弱网测试,属于健壮性测试范畴。随着国内移动端迅猛发展,大大增加了用户碎片化使用app的场景。因此,针对地铁、巴士、电梯、车库等场景,我们需要针对这些场景的弱网环境下,验证app在出现丢包、延时等异常网络下的处理机制,避免因用户体验不友好而造成用户的流失。

  • 用户体验

app使用过程中,弱网的高延迟和高丢包,在实时性要求非常高的场景,容易损失用户体验。

  • 非正常情况下,出现bug概率会增加

在日常需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣。而服务面对这种恶劣的网络环境的健壮性不够,导致会出现一些意想不到的bug。

 

1.2 衡量网络性能好坏的指标

在测试网络性能之前,我们需要先知道衡量网络性能好坏的几个指标:

  1. 带宽(吞吐量):单位时间内传输的数据量,单位通常是:每秒比特数:bps。带宽反映了网络的传输能力,越大越好。
  2. 丢包:数据丢包个数=发送的数据包数-接收的数据包数。丢包反映了网络可靠性,越小越好。
  3. 时延:数据包从发送开始到接收到该数据,所耗费的时间,单位通常是ms。时延反映了网络的速度,越小越好。
  4. 抖动:指时延的变化,即两个数据包时延的差值。抖动反映了网络的稳定性,越小越好。
  5. 乱序:指接收到的数据包顺序和发送顺序不一致的次数。乱序反映了网络的稳定性,越小越好。当乱序比较严重的时候,丢包也会比较严重,所以一般都以丢包指标为主,忽略乱序指标。

 

1.3 常用网络环境的参数参考及测试点

 

 

 

1.4 移动端弱网测试

1.4.1 方法一:利用抓包工具charles进行弱网设置,适用PC端和移动端(IOSAndroid

  • 以charles 4.5.6版本为例,下载charles并按照指引进行安装
  • 打开Proxy->Throttle Settings 

  • 打开Throttle Settings界面如下

配置参数说明:

  1. Bandwidth:带宽,即上行、下行数据传输速度
  2. Utilisation:带宽可用率,大多数现代互联网连接利用率是100%
  3. round-trip latency:第一个请求的时延,单位是ms
  4. MTU:最大传输单元,即TCP包的最大size,可以更真实模拟TCP层,每次传输的分包情况。
  5. Releability:指连接的可靠性。这里指的是10kb的可靠率。用于模拟网络不稳定。
  6. Stability:连接稳定性,也会影响带宽可用性。用于模拟移动网络,移动网络连接一般不可靠。

charles的预设已经有常用的网速模拟设置,同时也可以根据需要,自己添加设置。

  • 下面就可以按照charles工具的正常方法进行测试

 

1.4.2 方法二:利用第三方工具的限速功能

Android

QNET:一个独立app,为用户提供快捷、可靠的弱网络模拟服务。(目前只支持Android)

  • 扫描下面二维码,按照指引进行安装

  • 登录

首次使用QNET的用户,可以使用QQ账号首次登陆,需要注册WeTest平台账号,即可成功登陆。

  • 选择待测试app

成功登陆后,点击【点击选择测试程序】按钮,选择待测试的弱网工具,然后点击下方的【开始测试】按钮,第一次启动的时候需要对悬浮窗权限进行授权,部分机型会弹出开启VPN服务的确认框,点击确认。

  • 弱网设置

QNET支持系统预设模板和用户自定义模板。

  • 开始测试

点击开始测试按钮后,QNET会自动拉起待测试程序,然后默认会显示弱网模板控制悬浮窗,以及弱网模板信息悬浮窗。

【左边悬浮窗是控制悬浮窗,可以下拉即时切换弱网模板,双击Q按钮可以切回QNET应用,点击暂停按钮可以停止弱网状态恢复正常网络;右侧悬浮窗显示当前的模板名,实时延迟,实时网速,以及当前模板的具体参数。】

 

iOS

使用手机自带的限速功能(只适用IOS设备),且需要先打开开发者选项。

  • 打开IOS设备,设置->开发者->NETWORK LINK CONDITIONER

  • 打开Status进入后,选择预设或者自定义设置即可

  

 

1.5 web端弱网测试

1.5.1 方法一:利用抓包工具charles进行弱网设置,参见1.4.1

 

1.5.2 方法二:tc命令行

  • 前置条件——安装相关工具

tcTrafficControl,用于linux内核的流量控制。tc是Linux 内核内置的框架,能够实现流量限速、流量整形、策略应用,可以注入延时故障、丢包故障、包重复故障、乱序故障,以及模拟网络闪断等情况。

tc 对硬件、系统的一些要求:

  • 硬件要求
  1. PC - 建议配置不低于 CPU i3,4G 内存,64G 硬盘
  2. 双网卡 - 除原有板载网卡外, 额外需要一块 pci-e 网卡(例如 intel 82574L
  3. 路由器 - 支持桥接模式
  4. 网线 - 若干
  • 系统要求
  1. 需要 Fedora、OpenSuse、Gentoo、Debian、Mandriva 或 Ubuntu,如果Linux内核版本大于 2.6,则已内置 TC
  • 系统模块
  1. Ubuntu/Debian 系统下需要 iproute2
  2. Fedora/RHEL 系统下需要 iproute-tc
  3. iptables
  4. Linux kernel module : sch_netem

 

iftop:监控网卡的实时流量-查看当前的网速流量

  • 安装(centos/ubuntu):sudo yum/apt install iftop
  • 使用:sudo iftop

 

wondershaper:一个 shell 脚本,是使用 tc 来定义流量调整命令,限制linux服务器网卡级别带宽的工具。

  • 下载: git clone https://github.com/magnific0/wondershaper.git
  • 查看帮助信息:进入wondershaper文件夹,执行./wondershaper -h

 

  • 使用:./wondershaper -a eno1 ***

 

speedtest-cli:是一个用 Python 编写的轻量级的命令行工具,用于测试带宽。要求python_version>2.4+

  • 安装:pip install speedtest-cli
  • 使用:./speedtest.py

 

ping:内置,简单便捷,可以测试时延和丢包,缺点是无法测试带宽。ping的原理如下:

  

  • 前置/后置条件——清除外网网络接口的所有队列规则
sudo tc qdisc del dev eno1 root 2> /dev/null > /dev/null
# 此时eno1是服务器的外网网络接口

 

  • 模拟弱网环境测试——网络延迟
  1. 模拟网络延迟(这里设置网络延迟时长100ms,可以通过ping或iftop查看实时网络数据情况),并通过ping命令查看是否配置成功
sudo tc qdisc add dev eno1 root netem delay 100ms
# 该命令实现将eno1网卡的传输设置为延迟100ms

 

  • 模拟弱网环境测试——网络丢包
  1. 模拟网络丢包(这里设置10%网络丢包率,可以通过ping或iftop查看实时网络数据情况),并通过ping命令查看是否配置成功
sudo tc qdisc add dev eno1 root netem loss 10%
# 该命令实现将eno1网卡的传输设置为10%丢包率

 

  • 模拟弱网环境测试——数据包损坏
  1. 模拟数据包损坏(这里设置随机产生 5% 的损坏的数据包),并通过ping命令查看是否配置成功
sudo tc qdisc add dev eno1 root netem corrupt 5%
# 该命令将 eno1网卡的传输设置为随机产生 5% 的损坏的数据包

 

  • 模拟弱网环境测试——网络限速1(工具: wondershaper
  1. 模拟网络限速(这里设置网口最大上传限速为150Kbps,下载限速250Kbps),并通过speedtest-cli命令查看网速是否配置成功
./wondershaper -a eno1 -u 150 -d 250
# 该命令将 eno1网口上传限速为150Kbps,下载限速250Kbps

2. 进行***测试

3. 取消限速 #./wondershaper -a eno1 -c

 

  • 模拟弱网环境测试——网络限速2(工具:tc,可以针对ip限速、端口限速、服务器网卡出口限速),并通过speedtest-cli命令查看网速是否配置成功
  1. 模拟网络限速(限制eth0单个IP-192.168.1.2的网速30Mb-60Mb之间)
tc qdisc add dev eth0 root handle 1: htb r2q 1 
tc class add dev eth0 parent 1: classid 1:1 htb rate 30mbit ceil 60mbit 
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.1.2  flowid 1:1

 

1.5.3 方法三:chrome浏览器的开发者工具

  • 打开开发者工具(F12)

  • 打开Network,点击throttling

  • 有一些预设值,也可以根据自己的需要进行自定义添加

 

  • 设置后,该页面即按照设定的网络限制进行展示。即可进行测试。

 


此文档转载加汇总 

posted @ 2020-03-24 15:00  小嘉欣  阅读(280)  评论(0编辑  收藏