本文中有引用的文章:
本文核心:
前言
网络测试:
| 序号 | 类型 | 问题示例 | 期望结果 |
|---|---|---|---|
| 1 | 无网 | 没有提示 | 提示”请求失败” |
| 2 | 弱网 | 没有提示 | 提示”请求超时” |
| 3 | 复网 | 显示的还是无网的页面 | 自动发起请求,恢复显示正常页面 |
| 4 | 切网 | —- | —- |
1、无网
问题示例:没有提示
优化方案:
1、Toast提示”请求失败”(与2不共存)
2、页面显示无网络页面,内含刷新按钮(与1不共存)
没有退出操作页面,支持退出。而不是无网络时候,卡住不动。
| 序号 | 描述 | 举例 | 正常 | 异常 | 其他 |
|---|---|---|---|---|---|
| 1 | 没有退出操作页面 | 网页游戏加载页 | OK | 新增退出 | |
2、弱网
具体可优化问题:详见下节 弱网问题与优化
一、弱网测试的关注点
1、关注点
弱网测试的目的就是尽可能保证用户体验,关注的关键点包括:
以下摘自:腾讯-AllTests软件测试-弱网测试工具-QNET
1、页面响应时间是否可以接受,关注包括热启动、冷启动时间、页面切换、前后台切换、首字时间,首屏时间等。
2、页面呈现是否完成一致。
3、超时文案是否符合定义,异常信息是否显示正常。
4、是否有超时重连。
5、安全角度:是否会发生DNS劫持、登陆IP更换频繁、单点登陆异常等。
6、大流量事件风险:是否会在弱网下进行更新Apk包、下载文件等大流量动作。
2、实际测试点总结
以下摘自:浅谈APP如何进行弱网测试
弱网环境测试点总结
完成弱网环境搭建后,一起来梳理下弱网测试场景和测试点。
场景一
弱网环境下某个操作响应时间
「原因」
APP
用户对等待时间容忍度低,如果弱网环境Loading
超过5s,用户很容易Kill
应用后再次进入应用「测试点」性能测试中,加入弱网环境测试点,检测各个场景网络请求的
API
消耗时间场景二
弱网环境下直至超时,
UI
界面友好度&APP
是否稳定「原因」容错机制主要是考虑弱网情况下带来的不稳定,常见的问题是:
Loading
超时导致ANR or Crash「测试点」弱网环境直至超时,判定为断网状态,界面提示友好且理解无歧义
场景三
断网环境下,是否自动重发请求
「原因」不同模块,开发对请求处理不同。测试前可了解,代码是否支持自动重复请求,自动重发请求的频率是什么?
「测试点」断网后恢复网络,是否堆积网络请求(目前来说理财模块10s左右无返回,则会重发请求),此时请求和返回正常情况下,是否出现异常情况。比如1次支付操作,断网后堆积多个支付请求,恢复网络后因堆积多个支付请求,是否完成多次支付
PS
:断网后恢复网络,考虑APP
进行操作目的是否伤害用户体验,通过哪种手段可以达到操作目的同时用户体验无感或者低伤害比如,微信希望在线升级某些内容,会自动监听用户是否插着电
or
连着WiFi
,一旦监听符合上述场景,APP
自动升级:
- 插电场景:确保升级过程中,耗电不会导致手机低电量甚至没电
WiFi
场景:确保升级过程中,流量消耗不会使用用户话费中流量包,不会导致因消耗话费流量伤害用户体验场景四
网络请求中,
kill
进程 (导致APP登录状态掉线)
- 登录同一个账号成功,应该不继续相同网络请求
- 登录不同账号成功,应该不继续相同网络请求
常见弱网问题和原因分析
场景一
上传大图或者多图时,在弱网络环境下出现进度条走到一半卡住,然后又从头开始
「原因」采用分段上传方式,直至请求超时,分段传输没有结束,代码逻辑不对,导致每次重试都重头上传,一直循环
场景二
在弱网络环境下,容易出现登录不上或者登录后立即掉线
「原因」登录没有缓冲机制,而请求超时时间的设置没有区分同网络情况
「解决方案」建议开发针对
WiFi、2G、3G、4G、5G
设置不同的超时时间场景三
弱网络环境下,请求的数据返回时间较长,等待的过程中,如果页面上的相关控件仍然可以操作,则容易出现闪退现象、触发底部时获得原页面请求数据。
「原因」依赖数据的控件操作,在数据返回前没有做兼容处理
场景四
搜索时输入关键字会连续发请求,停下时,显示最终的关键字搜索结果,但很快又会被前面的关键字搜索结果覆盖了。
「原因」中间的请求返回较慢,显示了最终的结果后,之前的请求返回的数据应不做处理。
其他问题场景补充:
1、用户登录应用时下载初始化数据,下载过程中因网速太慢点击取消并重新登录,数据下载过程中、下载失败后,未进行数据回滚,中止后重新下载,出现数据重复。
2、用户点击数据上传,数据上传过程中网络弱且不稳定,基于联网状态自动触发数据上传,导致出现数据重复写入,形成脏数据
3、在弱网环境下,用户输入用户名和密码点击登录,应用链接超时后,按照强网业务逻辑处理,导致返回超时异常。
4、在弱网环境下,用户输入用户名和密码后点击登录,数据下载超时,加载数据严重依赖于后来的异步加载。数据还没来得及返回,应用跳转到下个activity,导致崩溃。
二、弱网网络测试方案
常见方案:
| 序号 | 方案 | 描述 | 缺点 | |
|---|---|---|---|---|
| 1 | 前往弱网环境 | 电梯、地下室、隧道 | 不实际 | |
| 2 | 搭建弱网环境 | 购买一些路由网络设备,在全公司范围搭建一个弱网环境。 (相关的技术方案有Facebook的ATC和腾讯的WeTest-WiFi。) |
搭建成本高 | |
| 3 | 使用网络代理 | 在PC上安装网络抓包工具,将设备的网络代理到PC上。 通过设置PC上抓包工具的延时来进行弱网络模拟。 (比如Fiddler,Charles,NET-Simulator) |
||
| 4 | 安装弱网工具 | 苹果弱网测试工具-Network Link Conditioner(支持手机和Mac) 腾讯弱网测试工具-QNET(目前仅支持Android手机) |
三、弱网相关术语
1、衡量网络好坏的标准
(1)带宽(吞吐量):单位时间内传输的数据量(bps),反映网络的传输能力
(2)丢包:数据丢包个数=发送的数据包数-接受的数据包数,反映为网络的可靠性
(3)时延:数据包从发送开始到接受到该数据所耗费的时间,反映网络速度
(4)抖动:指时延的变化,反映网络的稳定性
(5)乱序:指接受到的数据包顺序和发送顺序不一致的次数,反映网络稳定性。乱序比较 严重时,丢包也会比较严重,所以一般以丢包
2、术语
2.1、上/下行带宽Bandwidth(kbps—千比特每秒)
上行带宽(上行速率):本地信息上传到网络的速率
下行带宽(下行速率):网络信息下载的本地的速率
注:上行速率不等于下行速率,在大多数情况下,下行与上行带宽的比率可达到10:1
2.2、上/下行丢包率packet loss(%)
数据在网络上是以数据包未单位传输的,由于一些原因不能百分百得完成,这时网络会自动根据协议来补办,网速快线路好得时候,包得损失会非常小,补包就会很容易完成,但是线路较差得时候,数据得损失量就会很大,补包就不可能百分之百完成,这种情况下就会造成丢包。
丢包率 = 1 - 单位时间内接收得数据包数 / 发送的数据包数
查看丢包率可以通过ping命令来查看。

2.3、上/下行延迟delay(ms)
1-30ms:极快,几乎察觉不出有延迟
31-50ms:良好,没有明显的延迟情况
52-100ms:普通,能感觉出网络有明显延迟
大于100ms:差,有卡顿,丢包并掉线现象

2.4、DNS延迟(ms)
DNS是域名解析服务器,延迟就是和这个服务器的连接速度,DNS的作用就是把网址解析成IP地址,因为电脑网络连接只能通过IP连接。
3、各个网络环境参数
常见网络设置参考:
| 网络环境 | 上/下行带宽(kbps) | 上/下行丢包率(%) | 上/下行延迟(ms) | DNS延迟(ms) |
|---|---|---|---|---|
| 2G | 20/50 | 0/0 | 500/400 | 0 |
| 3G | 330/2000 | 0/0 | 100/100 | 0 |
| wifi | 33000/40000 | 0/0 | 1/1 | 0 |
| 4G | 40000/80000 | 0/0 | 15/10 | 0 |
| 无网(飞行模式或关闭网络) | ||||
| 带宽有限环境 | 32/32 | 0/0 | 200/100 | 0 |
网络超时设置参考:
| 网络环境 | 上/下行带宽(kbps) | 上/下行丢包率(%) | 上/下行延迟(ms) | DNS延迟(ms) |
|---|---|---|---|---|
| 网络超时(请求) | 33000/40000 | 100/0 | 100/100 | 200 |
| 网络超时(完全丢包) | 33000/40000 | 100/100 | 100/100 | 200 |
| 网络超时(响应) | 33000/40000 | 0/100 | 100/100 | 200 |
特殊网络设置参考:
| 网络环境 | 上/下行带宽(kbps) | 上/下行丢包率(%) | 上/下行延迟(ms) | DNS延迟(ms) |
|---|---|---|---|---|
| 低丢包率、低时延的环境(上行) | 33000/40000 | 10/0 | 100/100 | 200 |
| 低丢包率、高时延的环境(上行) | 33000/40000 | 10/0 | 350/350 | 350 |
| 低丢包率、低时延的环境(下行) | 33000/40000 | 0/10 | 100/100 | 200 |
| 低丢包率、高时延的环境(下行) | 3000/40000 | 0/10 | 350/350 | 350 |
| 低丢包率、低时延的环境 | 33000/40000 | 10/10 | 100/100 | 200 |
| 低丢包率、高时延的环境 | 33000/40000 | 10/10 | 350/350 | 350 |
| 高丢包率的环境(上行) | 33000/40000 | 90/0 | 100/100 | 200 |
| 高丢包率的环境(下行) | 33000/40000 | 0/90 | 100/100 | 200 |
| 高丢包率的环境 | 33000/40000 | 90/90 | 100/100 | 200 |
四、网络测试工具
1、可直接安装的弱网工具
1.1、苹果弱网测试工具-Network Link Conditioner(支持iPhone和Mac)
1.1.1、iOS手机自带弱网测试工具-Network Link Conditioner
如下图:
1、进入设置找到开发者(Developer)选项。(如果没有该选项,请将手机接入开发人员电脑Xcode,即可自动生成。)
2、在开发者(Developer)选项中 –> Network Link Conditioner
2、打开Enable,并选择需要测试的网路开始测试
3、选择完毕后ios手机及会变更成指定网络环境(全局变更),可以开始测试弱网情况。

4、如果需要自定义
①、选择某个Profile,进入其详情
②、在该Profile的详情里,选择Duplicate Profile,修改对应数值后,即新增完成。
每个类型中可以查看对应的数据。数据内容包括如下部分。
| 序号 | 类型 | 描述 | 其他 |
|---|---|---|---|
| 1 | in Bandwidth | 下行带宽,即下行网络速度 | |
| 2 | In packet loss | 下行丢包率 | |
| 3 | in delay | 下行延迟,单位ms | |
| 4 | out bandwidth | 上行带宽 | |
| 5 | out packet loss | 上行丢包率 | |
| 6 | out delay | 上行延迟 | |
| 7 | DNS delay | DNS解析延迟 | |
| 8 | protocol | 支持Any,IPV4、IPV6 | |
| 9 | interface | 支持Any,WI-Fi,cellular(蜂窝网) |
1.1.2、Xcode的Additional Tools for Xcode弱网测试工具-Network Link Conditioner
Xcode弱网测试工具的下载及安装过程如下:
1、进入 https://developer.apple.com/download/all/
2、搜索 Network Link Conditioner
虽然没有Network Link Conditioner的选项。但其实其实包含在Additional Tools for Xcode 中的。
3、下载与自己xcode版本匹配的插件。如 Additional_Tools_for_Xcode_14.1.dmg
4、安装 Additional_Tools_for_Xcode 。安装过程如下图:

5、安装完后,即会在你的系统设置里新增一个Network Link Conditioner选项。
6、Mac版的Network Link Conditioner使用与iOS版没什么差别。

1.2、腾讯弱网测试工具-QNET(目前仅支持Android)
1、工具下载:
QNET官网(已失效):https://wetest.qq.com/products/qnet
其他地址(亲测有效-2023.05.17):http://www.5577.com/s/563515.html
2、工具使用/测试步骤:
①打开工具,授权登录
②选择应用,开启模拟
③在应用内,可自行按需切换模拟环境

2、网络抓包代理工具
| 序号 | 工具名 | 工具描述 | 其他 |
|---|---|---|---|
| 1 | Charles | 抓包工具,PC端安装,作为代理服务器,可以支持延迟、丢包、带宽等弱网配置。弱网配置项只支持HTTP/HTTPS。 | |
| 2 | Fiddler | 抓包工具,PC 端安装,作为代理服务器,设置延迟参数,模拟不同的网络情况。只能模拟延迟,如丢包、带宽等等是无法支持的。 | |
2.1、Charles
详见:Charles弱网模拟
2.2、
五、移动端下各类诊断方法与工具
以下内容摘自:移动端下各类诊断方法与工具
工具/方法 OS 使用场景及使用说明 优点 缺点 工具地址 华佗ping诊断 android/ios/pc 获取客户端IP,ldns,域名请求ip,请求耗时
https://cloud.tencent.com/developer/article/1489036无需客户端,直接浏览器请求 有时会获取不到ip,dns信息,或不准确 https://ping.huatuo.qq.com/ 腾讯云诊断APP android 分析dns劫持,http 302劫持。获取客户端IP,ldns,域名请求ip,请求耗时,可靠性高,信息较全
https://cloud.tencent.com/developer/article/1489043无需root 需要安装app http://imgcache.gtimg.cn/huatuo/apks/capture.apk iNetTools ios 获取dns解析,延迟,分析dns劫持
https://cloud.tencent.com/developer/article/1608239可准确获取ping数据和域名解析信息 无法对url进行诊断,需要安装app https://itunes.apple.com/cn/app/inettools-ping-dns-portscan/id561659975?mt=8 笔记本共享热点,通过fiddler抓包 android/ios/pc pc共享热点,通过fiddler来进行抓包,分析业务的http请求 fiddler可抓https包 自己模拟可以,让用户来用比较困难 https://www.telerik.com/fiddler 手机WIFI接入,走云主机代理抓包 android/ios/pc 检查手机端问题,还是网络问题 对用户侧操作比较简单有些公司wifi有限制代理 网络环境变了,请求网络是云主机到服务端 https://www.telerik.com/fiddler PC andorid模拟器 Nox android 在pc下用模拟器进行测试,抓数据包,分析业务的请求 可轻松root安装抓包软件 自己模拟可以,让用户来用比较困难 https://cn.bignox.com/ 华佗抓包工具 android 需要真实获取用户请求数据包
https://cloud.tencent.com/developer/article/1489050可直接移动端抓包,无需root 部分app无法进行抓包 http://imgcache.gtimg.cn/huatuo/apks/capture.apk Stream 抓包工具【推荐】 IOS 需要真实获取用户请求数据包,可抓https请求
https://cloud.tencent.com/developer/article/2116252可直接移动端抓包,无需root 部分app无法进行抓包 https://apps.apple.com/cn/app/stream/id1312141691 QuickSource 抓包工具 https://apps.apple.com/cn/app/quicksource/id1449472048











