[QA]App性能的相关指标

2019-06-28  本文已影响0人  yumiii_

竞品分析可考虑的维度:
1.安装包大小:包括apk的大小和apk解压后的大小

2.速度
启动相关(冷启动/热启动时长)
adb shell am start -W packagename/activity关注total time,其他时间代表的意义可参考Android 开发之 App 启动时间统计
应用界面内切换时长
滑动速度

3.短视频相关
耗时(编辑时长、切换时长、弱网耗时等)

4.内存
不同状态下的内存消耗
内存峰值
是否存在内存泄漏
压测后的内存使用

5.CPU
CPU使用率过高或者过去繁忙可能会引发以下问题:
1⃣️手机整体性能降低,卡顿、应用交互不流畅,用户体验变差,甚至无法响应用户,引起ANR
2⃣️手机发烫
3⃣️手机电量消耗快

6.流量
首次启动应用的流量提示
后台连续运行的流量值
高负荷运行的流量峰值

7.电量
测试手机安装app后前后的待机功耗
长时间连续使用是否有异常耗电现象


一、CPU的占用率

adb shell top -d 1 | grep 包名
-d:刷新间隔,可以输入小数即代表毫秒级间隔
但是安卓8.0以上会有包名显示不全的问题,如果包名进行过滤,可能过滤不到。我们可以用户id的值(USER,当前进程的用户id)来过滤。
获取包名: adb shell dumpsys window windows | grep -E 'mFocusedApp'(打印当前应用的包名)
显示出来的指标

PID 进程id
USER 进程所有者的用户id
PR 优先级
VIRT VIRT=SWAP +RES
CPU% 当前瞬时CPU占用率
S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
THR 程序当前所用的线程数
VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
ARGS包名

此外,安卓8.0以上的系统是按照800%cpu来计算的,因此该段时间内CPU均值应该换算成cpu均值/8。
p.s. 可以用adb -s "device" shell cat /proc/cpuinfo获取cpu核数, 实际cpu = 总cpu/核数
p.p.s: top命令相比于dumpsys cpuinfo这个命令获取瞬时CPU是更准确的。


二、内存

1⃣️procrank 移动性能测试 Android 性能测试初探 (三)
adb shell procrank但不是所有设备都适用

2⃣️adb shell dumpsys meminfo |grep packagename >/address/mem.txt
启动并设置好场景后,等待2-3min,查看内存平稳(不再降低或者升高)后,使用adb shell dumpsys meminfo "包名"查看内存,取10次取平均值。

Pss: 该进程独占的内存+与其他进程共享的内存
Privete Dirty:该进程独享内存
Heap Size:分配的内存
Heap Alloc:已使用的内存
Heap Free:空闲内存

Total size可以用来判断是否发生内存泄漏,正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况。如果每次操作后GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大,直到到达一个上限后导致进程被杀掉,也就是因为内存泄漏引起了应用crash。


三、启动时间

1⃣️可以使用 Android 提供的 DisplayManager 来获取 activity 的启动时间,参考如何统计Activity启动所用的时间?

获取package name和activity name:
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

2⃣️可以使用am命令
adb shell am start -w packagename/MainActivity

上一篇下一篇

猜你喜欢

热点阅读