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 环境搭建完整流程

  1. 确定压测目标平台:Android / iOS / 双平台。
  2. 选择运行载体:
    • Android:推荐 Pixel 或三星旗舰真机 + 官方模拟器 (API 30+)
    • iOS:推荐 iPhone 12+ 真机 + Xcode 16 模拟器 (iOS 17+)
  3. 安装压测工具:如 Android 端安装 jmeter-android 或 PerfDog;iOS 端配置 xctrace 或 Instruments。
  4. 配置网络模拟器:在每台设备上启用预设档(3G/4G/弱网),并验证延迟与带宽是否符合预期。
  5. 连接 CI 服务器:真机通过 USB 集线器或 AWS Device Farm;模拟器通过 Docker + ADB 或 Xcode CLI。
  6. 录制基准测试脚本:使用自动化框架(如 Appium / XCTest)录制单接口或全流程操作。
  7. 执行冒烟压测: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 分钟流量,确认网络模拟不会导致应用崩溃或数据损坏。

下图总结了压测环境的选择与网络模拟流程:

压测环境选择与网络模拟流程 确定压测目标 平台判断: Android/iOS 真机 维护成本高,结果真实 模拟器 快速部署,结果有偏差 网络条件模拟 环境就绪,开始压测 建议:真机+模拟器并行覆盖