弱网测试在移动开发中的应用
1 引言
- 随着移动应用的普及和发展,移动应用程序的成功关键之一是其在各种网络条件下的稳定性和性能;由于用户可能在各种网络环境下使用移动应用,包括弱网络连接或不稳定的网络,因此在开发过程中进行弱网测试至关重要;本文将详细介绍弱网测试在移动开发中的应用场景和使用方法;
- 弱网可能引发的问题:App 闪退、ANR、数据丢失等。
2 弱网测试的定义及重要性
2.1 弱网测试的定义
- 弱网测试是一种测试方法,旨在模拟网络信号弱或不稳定的条件,以评估移动应用在这些环境下的表现;通过模拟不同类型的网络条件,开发人员可以更好地了解应用在现实世界中的行为,并识别潜在的性能问题。
2.2 弱网测试的重要性
- 用户体验优化: 弱网条件下的应用性能问题可能导致用户体验下降,例如长时间的加载时间、应用崩溃或功能失效;通过弱网测试,可以识别并解决这些问题,提高用户满意度;
- 产品稳定性提升: 弱网络条件下的应用行为往往与正常情况下有所不同,可能导致崩溃或数据丢失;通过在开发早期进行弱网测试,可以发现并解决这些稳定性问题,从而提高应用的可靠性;
- 节省成本和时间: 在发布后发现网络相关问题可能会导致延迟和额外的成本;通过在开发过程中执行弱网测试,可以在早期发现和解决问题,避免后期修复的成本和时间浪费。
3 移动开发中 App 网络测试要点
3.1 各个网络下功能测试
- 不同网络下,检查基本功能点;
- 运营商移动、联通、电信接入点测试(需要使用实际 SIM 卡);
- 若有智能 DNS 功能,还需要关注运营商判断/归类;
- 高延时、高丢包、无网、假热点也可归入弱网测试范畴。
3.2 无网测试
- 在无网络的情况下,各个功能是否受到影响;
- 最低原则:不能闪退。
3.3 网络切换测试
- 部分 App 有智能 DNS 功能,网络切换涉及 DNS 切换;
- 网络切换检测机制:Android 可以监听系统广播。
3.4 弱网测试
- 用户体验和异常处理是各个网络场景都需要关注的,只是弱网场景下,需要重点关注。
3.5 异常机制
- 在开发中需要考虑到异常信息日志上传、容忍机制、超时机制、重连机制等处理,需要重点关注。
4 模拟弱网测试
4.1 什么样的网络属于弱网
- 低于 2G 速率的时候都属于弱网,3G 也可划分为弱网,一般 Wi-Fi 不划入弱网测试范畴。
4.2 如何进行弱网测试
- SIM 卡的网络切换:手机-设置-移动网络设置-网络类型选择,3G、4G卡都可以设置关闭 3G/4G,只走 2G 网络;
- 具体弱网场景测试:常见场景包括:地铁/巴士、电梯、楼梯间、停车场;
- 使用虚拟机模拟网络速度:如用树莓派搭建的弱网测试仪;
- 使用软件进行网络代理:模拟不同的网络带宽、延时率、丢包率。
4.3 弱网模拟常用工具
4.3.1 HTTP/HTTPS 弱网模拟
- 如果只是 HTTP/HTTPS 请求,可以使用 Charles 或 Fiddler 等工具模拟,这里以 Charles 为例进行简单说明:
- 相关配置参数说明:
- Bandwidth (kbps):带宽,即上行、下行数据传输速度;
- Utilisation (%):带宽可用率;
- Round-trip Latency (ms):第一个请求的时延 (单位:ms);
- MTU (bytes):最大传输单元,即 TCP 包的最大 size,可以更真实模拟 TCP 层,每次传输的分包情况;
- Releability (%):连接的可靠性,用于模拟网络不稳定;
- Stability (%):连接稳定性,也会影响带宽可用性,用于模拟移动网络,移动网络连接一般不可靠;
- Unstable quality range (%):不稳定质量范围。
4.3.2 Chrome 的 WebView 调试工具弱网模拟
- 使用 Chrome 的 WebView 调试工具,缺点是只适用于 Web 页面的弱网模拟,且只能是基于 HTTP/HTTPS 协议的网络请求;
- 具体步骤:
- 1)应用打开 WebView 调试功能,具体如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true)
}
- 2)手机链接电脑,运行 App,进入具体 H5 页面;
- 3)Chrome 的 DevTools 中打开 WebView,进入 chrome://inspect/#devices,会显示已经连接设备,选中待调试 Webview 的 Inspect network 页面,No throttling 下拉框,可以进行网络模拟。
4.3.3 iOS 手机自带 Network Link Conditioner 弱网模拟
- iOS 手机打开 "设置" -> "开发者" -> "Network Link Conditioner" 入口:
- 相关配置参数说明:
- In Bandwidth:下行带宽,即下行网络速度;
- In Packet Loss:下行丢包率;
- In Delay:下行延迟 (单位:ms);
- Out Bandwidth:上行带宽;
- Out Packet Loss:上行丢包率;
- Out Delay:上行延迟;
- DNS Delay: DNS 解析延迟;
- Protocol:支持 Any、IPv4、IPv6;
- Interface:支持 All、WLAN(WI-Fi)、Cellular(蜂窝网)。
4.3.4 Socket 弱网模拟(tcconfig)
- tc 命令包装器,可轻松且精准的设置网络带宽/延迟/数据包丢失/数据包损坏等到网络接口/Docker 容器(veth) 的流量控制;
- 具体如果使用可查看如下文档:
- tcconfig 官方文档
- tcconfig github
5 网络测试经典场景
- 场景一:弱网下,页面加载过程,程序闪退
- 原因:WebView 超时处理未在 UI 线程;toast、关闭页面等操作需要在 UI 线程。
- 场景二:302 跳转页面,达到内置超时阀值后,WebView 自动关闭
- 原因:业务有页面加载超时自动关闭的逻辑,超时机制未考虑 302 场景。