4. 压测环境搭建:Android/iOS真机与模拟器选择、网络条件模拟
4.1 真机与模拟器选择对比
移动端压测结果的可信度,首先取决于运行环境与真实用户场景的接近程度。真机与模拟器各有优劣,选择正确组合可避免大量回测与返工。
| 对比维度 | 真机 | 模拟器 |
|---|---|---|
| CPU/GPU 性能模拟精度 | 完全真实 | 依赖宿主机,偏差 10–40% |
| 电池、温度、传感器 | 真实反映 | 无法模拟 |
| 市场覆盖 | 需采购多机型 | 可一键切换 API level / 屏幕 |
| CI/CD 集成 | 需 USB 连接或设备池,成本高 | Docker 化,并行度高 |
| 调试与日志 | adb / Xcode Devices | 自带 logcat / 模拟器日志 |
| 网络条件模拟 | 需外部工具或代理 | 原生网络限速 |
推荐组合策略:压测基线(基准测试)在模拟器上运行以快速迭代;关键场景(视频播放、后台刷新、弱网)压测必须回真机验证。
4.2 网络条件模拟
网络延迟、丢包、带宽限制是压测中最重要的变量之一。不同平台提供不同工具,统一管理可避免环境不一致导致的误差。
Android 可通过 adb 命令或原生 NetworkPolicyManager 模拟;iOS 依赖 Xcode 的 Network Link Conditioner;跨平台测试可用 HTTP 代理(如 Charles / mitmproxy)统一限速。
以下为 Android 真机 / 模拟器常用的网络模拟命令示例:
# 设置延迟 200ms,丢包率 5%
adb shell cmd netpolicy set network-condition --delay 200 --loss 5
# 重置为正常网络
adb shell cmd netpolicy set network-condition --reset
# 通过 iptables 模拟带宽限制(需 root)
adb shell iptables -A OUTPUT -p tcp --dport 443 -m limit --limit 100kb/s -j ACCEPT
adb shell iptables -A OUTPUT -p tcp --dport 443 -j DROP
iOS 模拟器可通过系统偏好设置 → Network 配置创建自定义配置:
# 在模拟器中开启 Network Link Conditioner
xcrun simctl add_profile "WeakNetwork" \
--uplink 500kbps --downlink 256kbps \
--delay 150ms --loss 3%
xcrun simctl apply_profile "com.apple.CoreSimulator.SimDeviceType.iPhone-14" "WeakNetwork"
Charles Proxy 适用于双平台,支持断点、限速、重复响应,适合 CI 管道中的标准化网络模拟:
# 启动 Charles Throttle preset(控制台模式)
charles throttle --preset "3G" --host 192.168.1.100 --port 8888
4.3 环境搭建完整流程
- 确定压测目标平台:Android / iOS / 双平台。
- 选择运行载体:
- Android:推荐 Pixel 或三星旗舰真机 + 官方模拟器 (API 30+)
- iOS:推荐 iPhone 12+ 真机 + Xcode 16 模拟器 (iOS 17+)
- 安装压测工具:如 Android 端安装
jmeter-android或PerfDog;iOS 端配置xctrace或Instruments。 - 配置网络模拟器:在每台设备上启用预设档(3G/4G/弱网),并验证延迟与带宽是否符合预期。
- 连接 CI 服务器:真机通过 USB 集线器或 AWS Device Farm;模拟器通过 Docker + ADB 或 Xcode CLI。
- 录制基准测试脚本:使用自动化框架(如 Appium / XCTest)录制单接口或全流程操作。
- 执行冒烟压测:2–3 分钟短压,检查环境是否稳定(无断连、无驱动崩溃)。
验证环境健康度的快速方法:在压测前执行一次 ping 测试(目标服务 IP),记录 RTT 平均值与丢包率;与模拟配置对比,偏差 >20% 时需检查网络工具或设备状态。
4.4 常见错误与优化
- 错误:设备时间不同步 — 导致压测报告中时间戳混乱。解决:压测前执行
adb shell date -s "$(curl -s --head http://ntp.aliyun.com | grep Date | cut -d' ' -f2-)"。 - 错误:模拟器 NAT 导致网络配置无效 — 模拟器默认 NAT,iptables 规则可能不生效。解决:使用
adb reverse或模拟器自带的netdelay/netspeed参数。 - 错误:iOS 真机使用 Charles 需安装 CA 证书 — 未信任证书导致 HTTPS 请求失败。解决:在压测脚本中加入
curl -k或预先安装并信任证书。 - 优化:并行使用多台真机 — 通过 USB HUB + adb 多进程启动,避免单机压测时被系统限制频率。
- 优化:模拟器快照与回滚 — 在压测开始前创建模拟器快照,每次压测后回滚,确保环境完全一致。
重要:切勿在生产环境或正式发布的 CI 流水线中使用未验证的网络模拟配置。建议预先在隔离设备上录制 10 分钟流量,确认网络模拟不会导致应用崩溃或数据损坏。
下图总结了压测环境的选择与网络模拟流程: