前言
针对上面提到的问题,我之前已经陆续发表过一系列性能测试的白皮书:
后续我还会针对其他具体性能指标来展开写,这里先来聊聊针对基础性能指标的一个测试和准出标准。我参考了一些常见的性能测试方案以及过去对于客户端性能测试的一些经验,总结出了一套客户端产品进行基础性能测试的标准流程和集成卡口,下面介绍一下针对Android和iOS两端的准出标准,可以参考这种方式去做,但具体数据要根据应用的线上性能基线和经验值去制定(下面的数字部分由于不影响大家参考所以就打码了)。
测试设备建议选取中端设备,有时间的同学也可以针对高中低不同的设备做区别测试。
下面测试过程中用到的掌中测是阿里百川的一款产品,大家可以到阿里百川官网去注册体验。
Android
页面加载时间
数据来源:
推荐方法:
- 用 Debug 包通过摇一摇唤出掌中测图标,选择应用性能 -> 页面加载;
- 进入待测页面;
备用方法:
- 开启Android自带的视频录制功能或者从应用市场下载录屏大师app,把页面操作录下来,传到mac上;
- 用mac自带的QuicktimePlayer打开视频,在“编辑”菜单中点击“修剪”;
- 通过数帧的方式查看从页面点击到第一屏数据加载出来的时间差,此时间差就是用户真实感知的页面加载时间;
集成要求:
页面流畅度(帧率)
数据来源:
推荐方法:
- 用 Debug 包通过摇一摇唤出掌中测图标,选择应用性能 -> 帧率;
- 滑动页面,实时记录fps值;
备用方法:
- 打开开发者选项;
- 打开GPU呈现模式分析和调试GPU过度绘制;
- 滑动被测页面,实时记录fps值和曾在过度绘制的区域(深红色);
集成要求:
CPU
数据来源:
推荐方法:
- 用 Debug 包通过摇一摇唤出掌中测图标,选择应用性能 -> CPU;
- 实时记录CPU值;
备用方法1:
- 打开开发者选项,开启USB调试;
- 打开终端命令行,输入adb shell top -n 1 | grep -v 'grep' | grep XXX(包名),记录CPU的值;
备用方法2:
- 准备一台Root过的手机,安装被测应用;
- 手机连接到AndroidStudio 并在菜单栏“Run”中打开Profiler;
- 首次进入被测页面,在CPU栏查看当前值,并记录;
静默CPU利用率获取:
- APP前台切到被测页面,手机闲置15分钟,多次获取当前CPU值,CPU利用率应该在0-10%内;
- APP切到后台需停止消耗CPU的逻辑,如传感器、定位等,避免用户反馈APP在后台耗电;
集成要求:
内存
数据来源:
推荐方法:
- 用 Debug 包通过摇一摇唤出掌中测图标,选择应用性能 -> 内存;
- 首次进入被测页面,等第一屏数据加载完成,记录内存(javaHeap、nativeHeap)的值A1;
- 退出页面,等第一屏数据加载完成,记录内存值(javaHeap、nativeHeap)B1;
- 再次进入被测页面,等第一屏数据加载完成,记录内存的值A2;
- 退出页面,记录内存值B2;
- 多次重复此操作,检查内存是否持续增加;
- 记录被测页面内存(javaHeap、nativeHeap)值(A1-B1);
备用方法1:
- 打开开发者选项,开启USB调试;
- 操作步骤同推荐方法,记录方式改成:打开终端命令行,输入adb shell dumpsys meminfo packageName | grep -A 1 Java,记录javaHeap、nativeHeap的值;
备用方法2:
- 准备一台Root过的手机,安装被测应用;
- 手机连接到AndroidStudio 并在菜单栏“Run”中打开Profiler;
- 首次进入被测页面,操作步骤参考推荐方法里的描述;
为了避免链路太长,其他页面进程运行产生的内存干扰,最好的办法是通过应用扫码进入页面,产出性能报告的话还是要尽量模拟用户的操作路径,从而得到更真实的数据。
集成要求:
- 无内存泄露 ;
- 内存增量控制在一定值,没有无限增加的情况;
- 退出页面内存恢复到近似原始值 ;
- 超过达标值的必须在页面不可见或收到内存报警时释放内存(onLowMemory) ;
- Android系统8.0+设备,图片使用的内存是native内存,故单独处理;