一、性能测试概述

核心目标

  1. 理解性能测试思路

    • 负载测试:正常负荷下的性能指标
    • 压力测试:超负荷下的性能指标
    • 容量测试:系统极限能力(如最大并发用户数)
  2. 掌握主流测试工具
    Emmagee | SoloPi | Monkey

Web Vs 移动端性能指标对比

类型 Web 系统指标 移动 App 特有指标
通用指标 响应时间、并发数、吞吐量 启动时间、界面切换时间
资源占用 CPU、内存 GPU 占用、存储占用
终端特性 - 流量消耗、电量消耗

二、移动端核心性能指标详解

1. 时间指标

启动时间类型

1
2
3
4
5
graph LR
A[启动时间] --> B[首次启动]
A --> C[非首次启动]
C --> D[冷启动:所有进程退出后启动]
C --> E[热启动:部分进程驻留时启动]

性能关系:首次启动 > 冷启动 > 热启动

测试方法

  • Logcat 日志分析法:
1
adb logcat -v time > d:\temp\logcat.txt

grep "Displayed" logcat.txt 提取关键记录

1
2
3
4
5

ActivityManager(503): Displayedcom.tal.kaoyan/.ui.activity.SplashActivity +1s227ms

ActivityManager(503): Displayedcom.tal.kaoyan/.ui.activity.LoginActivity +802ms

考研帮 app 启动对应 2 个 activity:SplashActivity 和 LoginActivity。

考研帮 app 首次启动时间=1s227ms+802ms=2s29 ms

  • 工具推荐:
    使用 catalog 工具简化日志分析流程

2. 存储占用

存储结构

类型 路径 检测方法 典型值
APK 大小 /data/app/<包名> ls -l base.apk 48MB
安装目录大小 /data/data/<包名> du -sh 56MB
缓存数据 /sdcard/Android/data 手动清理检测 可变

3. CPU/GPU 占用

Cpu:中央处理器单元

Gpu:图像处理器单元,包含在显卡上

检测命令

1
2
3
4
5
adb shell top -n 100 | grep <包名> # 实时CPU监控

adb shell dumpsys meminfo | grep <包名> # 内存详情

adb shell procrank # PSS内存分析

GPU 关键问题

  1. GPU 过度绘制
    App 的界面不是一次性绘制出来的,有的区域经过了多次绘制,但用户只能看到最后一次的绘制,前面的绘制就产生了浪费,直观的表象就是掉电快。

    • 现象:界面多次重复渲染 → 功耗增加
    • 检测:
      开发者选项 → 开启 “ 调试 GPU 过度绘制 “
      • 颜色标识:
        无→白 / 1次→蓝 / 2次→绿 / 3次→粉 / ≥4次→红
    • 优化目标:减少红色区域
  2. 流畅度 (FPS)
    操作 app 时,app 会不会出现卡顿情况。流畅度一般通过 FPS 来衡量
    FPS:每秒帧数

    • 合格标准:≥60 FPS
    • 测试工具:SoloPi 帧率监测

4. 流量/电量消耗

测试场景

场景 检测重点
安装过程 安装包下载流量
前台运行 核心业务流程消耗
后台运行 心跳包/推送通知的持续消耗
待机状态 异常唤醒(wakelock)

三、主流测试工具指南

1. Emmagee(网易开源)

官网地址:https://github.com/NetEase/Emmagee

下载地址:Emmagee.Apk

适用场景:实时性能数据监控
限制:Android 7.0+ 需兼容模式
操作流程:

  • 安装APK 并启动
  • 选择被测App → 点击 开始测试
  • 操作App → 停止测试
  • 导出CSV 报告: adb pull /sdcard/Emmagee/<报告>.csv

报告分析:关注内存峰值、CPU 波动、FPS 稳定性

2. SoloPi(蚂蚁集团开源)

官网地址:https://github.com/alipay/SoloPi

下载地址:SoloPi.Apk

核心功能:

  • 性能测试
  • 录制回放(自动化)
  • 一机多控(批量设备同步操作)

性能测试流程:

  • 进入 性能测试 模块
  • 选择被测 App 和监控指标(CPU/内存/帧率等)
  • 启动 悬浮窗 实时监控
  • 录制操作 → 生成报告
  • 查看 数据可视化图表(支持历史对比)

3. Monkey(Android 原生)

核心用途:稳定性测试 & 压力测试
基础命令:

1
2
3
4
5
6
adb shell monkey -p <包名> \
--throttle 500 \ # 操作间隔(ms)
--pct-touch 70 \ # 触摸事件占比
-s 1234 \ # 随机种子
-v -v -v 1000 # v,表示monkey日志的详细程度,3个-v表示最详细; 执行次数

事件类型权重

事件类型 参数 默认权重
触摸事件 --pct-touch 15%
手势滑动 --pct-motion 10%
启动 Activity --pct-appswitch 2%
系统按键 --pct-syskeys 2%
查看全部

日志分析重点:
CRASH / ANR / Exception / error 关键错误


四、性能测试策略

1. 需求分析

  • 有明确需求:如 “ 内存峰值 ≤ 100MB” → 验证达标性
  • 无明确需求:记录基准值 → 协同开发评估优化点

2. 结果解读原则

指标类型 分析方法
时间相关 对比历史版本/竞品
资源占用 观察峰值而非平均值
流量/电量 关联业务场景评估合理性

3. 测试报告要素

  • 测试环境(设备型号/OS 版本/网络)
  • 监控指标与工具
  • 性能基线数据
  • 瓶颈分析与优化建议