文章目录
在上一篇Android APP性能指标(一)中我们对CPU、内存、FPS和GPU四个常关注的指标进行学习。
本文将从响应时间、电量、流量等指标来了解Android性能。
一、响应时间
响应时间是衡量操作的APP达到期望效果的时间范围。如果一个软件,加载数据一直加载不出来,会对软件的日活、留存产生影响。
- 应用冷启动<=600ms为优秀,<=800ms为良好,<=1000ms为可接受
- 应用热启动<=200ms为优秀,<=400ms为良好,<=600ms为可接受
1.1 数据获取
获取package和activity的方法:adb logcat | grep -i displayed(需操作APP)
方法一:adb 方法
- 冷启动,需要提前确认程序是否在后台跑,如有则需要先kill应用程序
- 获取应用首次启动时间:
adb shell am start -W -S -n package/activity
- 获取应用二次启动时间:
adb shell am start –W –n
- 停止APP命令:
adb shell am force-stop package
(1)WaitTime 就是总的耗时,包括前一个应用 Activity pause 的时间和新应用启动的时间;TotalTime+系统资源启动时间
(2)TotalTime 表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用 Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时
使用am命令获取的时间只是apk从onCreate到onResume的时间,但不包含UI界面呈现出来的时间,所以考虑计算从am命令执行到logcat中有displayed出现的时候,视为app已经启动并展现,作为结束时间。此方法并不能完全计算出启动时间,有一定的误差。
方法二:使用charls 抓包,查看duration
1.2 响应时间指标测试点
- 冷启动:应用首次启动所花费的时间
- 热启动:应用非首次启动所花费的时间
- 跳转:应用界面切换所花费的时间
1.3 启动速度测试点
- 冷启动速冻:首次启动app的时间间隔(只是启动时间,不包括页面加载)
- 热启动速度:非首次启动app的时间间隔(只是启动时间,不包括页面加载)
- 完全启动速度:从启动到首页完全加载出来的时间间隔
- 有网启动速度:从发起跳转,到页面完全加载出来的时间间隔
- 无网启动速度:从发起跳转,到页面完全加载出来的时间间隔
启动时间验收标准为 冷启动不超过1.5S,热启动不超过1S
1.4 响应时间测试解决方法
场景 | 方法 |
---|---|
获取单机事件触发到容器启动Native APP消耗的时间 | 埋点 |
获取NativeAPP完全启动消耗时间 | 查看system.log |
获取Native调用PRC请求方法的延时时间 | 埋点 |
获取RPC请求发出去过程中的具体数据 | 埋点 |
获取RPC请求返回具体数据 | 埋点 |
获取本地解析返回数据所消耗的时间 | 埋点或者Traceview工具 |
获取界面渲染的时间 | 慢速摄像机或埋点 |
二、流量
如今,网络类型主要有2G、3G、4G、5G和WiFi,APP在使用不同网络时,我们要对其采取不同流量控制策略。如常用的视频APP,主要使用的网络类型为WiFi环境和蜂窝网络环境。
流量指标中涉及到的概念:
- 中等负荷:应用正常操作
- 高负荷:应用极限操作
2.1 数据获取
1、获取APP的PID:
- 方法一:
adb shell ps | grep 包名
- 方法二:
adb shell dumpsys package 包名
2、获取流量数据命令:
adb shell cat /proc/获取的进程号PID/net/dev
注意:有些设备获取的流量数据有差异cat /proc/net/dev
3、tcpdump 抓包分析
-
下载tcpdump工具,push到设备/data/local/tmp目录下
-
在命令行中,输入
tcpdump -v -i any -s 0 -c 2000 -w /文件地址
-
tcpdump 工具命令参数说明
-v/-vv/-vvv
:,输出数据的详细程度,针对流量测试。
-i
:指定网卡(interface): any代表不限网卡
-c
: 指定接收包的数量,接收完成后自动停止抓包
-s
: 指每个包中最多截取的字节数,设置为0 时,为默认值262144 -
使用Wirshark打开统计流量值,筛选ip.host=
2.2 流量测试关注点
- 应用首次启动流量值
- 应用后台持续运行时长2H的流量值
- 应用高负荷运行的流量峰值
- 应用中等负荷运行中的流量均值
2.3 测试标准
- 不存在重复请求
- 页面静默时或处于后台不应有流量增加
- 缓存机制的逻辑合理
- 在移动网络下不应自动下载素材等数据
- 小缩略图小于5KB
- 中缩略图小于25KB
- 大缩略图小于50KB
三、电量
电量指标需要关注以下场景:
- 设备安装APK前后,待机功耗无明显差异
- 待机、操作页面、启动APK等常见操作,电量消耗均值正常
- 长时间使用APK,无异常耗电现象
要通过adb命令来监控手机的耗电量,所以建议通过wifi的方式来连接手机,而不是用usb线来连接手机设备。usb方式连接手机会自动给手机充电,这样会影响对耗电量的统计的准确性。
3.1 连接手机
# 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个WiFi
# 先使用原装数据线把电脑与手机连接,手机在开发者选项中开启USB调试
# 使用adb devices命令查看是否与设备连接
$ adb devices
List of devices attached
86af3f27 device
# 显示device表示连接成功
# 断开数据线
$ adb connect 172.16.xxx.xxx:5555
unable to connect to 172.16.xxx.xxx:5555: Connection refused
# 输入 adb tcpip 5555命令
# 打印 “restarting in TCP mode port: 5555”表示启动成功
# 找到手机的 IP 地址
# 进入手机的WIFI连接,进入连接属性,查看手机的 IP
# 也可在「设置」-「关于手机」-「状态信息」-「IP地址」找到
# 输入adb connect '手机ip地址'
$ adb connect 172.16.xxx.xxx:5555
# 出现 connected to ip:5555 表示连接成功
3.2 数据获取
adb命令:adb shell dumpsys battery
Current Battery Service state:
AC powered: false
USB powered: true
Wireless powered: false
Max charging current: 500000 # 最大充电电流
Max charging voltage: 5000000 # 最大充电电压
Charge counter: 2449000
status: 5 # 电池状态:2:充电状态 ,其他数字为非充电状态
health: 2 # 电池健康状态:只有数字2表示good
present: true # 电池是否安装在机身
level: 100 # 电量: 百分比
scale: 100
voltage: 4302 # 电池电压
temperature: 385 # 电池温度,单位是0.1摄氏度
technology: Li-poly # 电池种类
3.3 获取APP的UID
adb shell COLUMNS=512 top
或者adb shell ps | grep 包名
,Windows电脑将grep替换成findstr即可
3.3 重置电池数据收集数据
-
清除已有的耗电量数据
adb shell dumpsys batterystats --enable full-wake-history
-
重置设备耗电量数据
adb shell dumpsys batterystats --reset
-
然后执行业务场景,测试完成之后再执行以下命令取出APP电量消耗日志(把数据重定向到本地)
adb shell dumpsys batterystats > 文件地址
在文件中搜索 Estimated power use (mAh)即可跳转到App电量消耗位置:
之前获取的Uid值 u0_a1619 需要将下划线 _ 去掉变成 u0a1619 ,然后通过该Uid在日志文件中查找则可搜索到该APP对应的耗电量。
其中, Uid u0a1619:0.0978 中的 0.0978 为该APP在测试期间消耗的总电量,单位为 mAh ,圆括号中详细说明了电量消耗的详细信息。
3.4 电量指标测试
电量指标需要从软件和硬件两方面都要进行测试。
硬件端:需要硬件测试工程师使用万用表、功耗仪进行测试。满足市场行业标准
软件端:
- 方式一:可以使用第三方工具进行测评
- 方式二:命令端获取电量数据
四、温度
Android 设备运行过程中,设备温度异常不仅对用户体验带来不好影响,同时也存在安全方面隐患。
温度指标需要关注如下几个场景:
- 设备满负荷情况,设备温度峰值无异常
- 设备APK长时间播放,设备温度均值无异常
- 设备常规操作如点击、启动APK等温度正常
温度指标数据与电量指标获取方式都一样的
adb shell dumpsys battery
- temperature:温度(int类型),单位:0.1度
五、性能测试常见问题
在性能测试过程中,经常会遇到如下问题及原因:
问题 | 原因 |
---|---|
APP连接超时 | 网络中断;APP 请求接口异常 |
APP 闪退 | Android缓存垃圾过多;运行程序多,导致内存不足等;版本兼容问题 |
卡顿、黑白屏 | 系统CPU、GPU资源不够;过度绘制 |
崩溃 | APP常常表现为Crash |
交互性能差 | 其他APK、弹框干扰 |
内存泄漏 | APK新建的对象没有释放,导致内存一直被占用 |
内存溢出 | APK申请内存不够时 |
参考文档:https://juejin.cn/post/7068239461607276581#heading-5