APP性能测试
一、响应
测试点:
- 冷启动:首次启动APP的时间间隔(只是启动时间,不包括页面加载)
adb shell am start -W packageName/ActivityName(绝对路径,首个Activity)
含义:
ThisTime:该Activity的启动耗时
TotalTime:应用自身启动耗时,ThisTime+应用application等资源启动耗时
WaitTime:系统启动应用耗时,TotalTime+系统资源启动时间
测试标准:冷启动时间TotalTime不超过1.5秒 -
热启动:按back键后再启动adb命令
测试标准:热启动时间不超过1秒
-
完全启动:从启动到首页完全加载出来的时间间隔
- 有网启动:从发起跳转,到页面完全加载出来的时间间隔
- 无网启动:从发起跳转,到页面完全加载出来的时间间隔
(一般只关注冷启动和热启动即可)
二、内存
在安卓系统中,每个APP进程除了其他进程共享内存之外,还独用私有内存,通常我们用PSS(私有内存+比例分配共享内存)来衡量一个APP的内存开销,。由于一个设备的内存是固定的,如果内存消耗过大就会出现应用卡顿或者闪退,因此需要对内存进行测试。正常情况下,应用不应占用过多的内存资源,且能及时释放内存,保证整个应用内的稳定性和流畅性。
测试点:
- 空闲状态:切换至后台或者启动后不做任何操作,消耗最小
- 中强度状态:时间偏长的操作应用
- 高强度状态:高强度使用应用,可以跑moneky来测试
内存泄漏:应用内的内存没有释放,内存一直增加,系统内存一直减少
测试方法:
- 使用adb命令:
adb shell dumpsys meminfo packageName
关注点:
1、Native heap alloc:JNI层的内存分配
2、Dalvik heap alloc:Java层的内存分配
如果这两个值一直增长,应用程序可能出现了内存泄漏
Total的PSS:应用真正占据的内存大小 - 使用性能测试工具:Emmagge(一直没更新了)、GT(需要接入sdk)、Android Monitor等
关注点:
1、退出某个页面后,内存是否有回落:如果没有及时回落,且程序自动GC或者手动GC,那便可确认有问题
2、进行某个操作后,内存是否增长过快:如果增长过快,也可能有风险,需要重复操作确认
三、CPU
cpu测试,主要是关注cpu的占用率。cpu占用率过高,容易引起无法响应、ANR(application not responding)等问题
测试点:
- 在空闲时间(切换至后台)的消耗
- 在运行一些应用的情况下,观察应用程序占用cpu的情况
- 在高负荷的情况下,观察应用程序占用cpu的表现
具体场景:
测试方法:
- 使用adb命令
1、adb shell top -n 3|grep packageName
top cpu参数:
-m 显示最大数
-s 按指定列序号排序(1-x,默认是9)
-t 显示进程名称
-n 在退出前刷新几次
-d 刷新间隔
如果反复进行某个操作,cpu占用过高且一直无法释放,那便可能存在风险2、adb shell dumpsys cpuinfo |grep packageName
-
使用第三方工具:Emmagee、GT等
- 使用Android Monitor
四、FPS
一般来说,安卓设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这一段时间的画面发生跳帧,画面会卡顿
测试方法:
- adb命令
1)打开手机:开发者选项-->GPU呈现模式分析 --> in adb shell dumpsys gfxinfo
2)操作要测试的apk
3)cmd命令:adb shell dumpsys gfxinfo packageName
4)得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比
含义:
Draw:表示在java中创建显示列表部分中,OnDraw()方法所占用的时间
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间越长
Execute:表示把一帧数据发送到屏幕上排版显示实际所花费的时间
Draw+Process+Execute:完整显示一帧,这个时间要小于16ms才能保持每秒60帧
5)通过Excel进行表格处理可以直观的查看软件的流畅度
2、使用开发者选项自带的图表
1) 打开手机:开发者选项 --> GPU呈现模式分析 --> 在屏幕上显示为条形图
2)操作被测得软件,界面会显示条形图
3、使用第三方测试工具:Emmagee、GT等
4、使用Android Monitor
五、GPU渲染
gpu渲染是指在一个像素点上绘制多次(超过一次):显示一个什么都没有做的activity界面算作画了1层,给activity加一个背景是第2层,在上面放了一个Text View(有背景的Text View)是第3层,Text View显示文本就是第4层仅仅只是为了显示一个文本,却在同一个像素点绘制了四次,这是一定要优化的。过度绘制对动画性能的影响是极其严重的,如果你想要流畅的动画效果,那么一定不能忽视过度绘制。
测试方法:
1)打开开发者选项 -- > 调试GPU过度绘制 --> 显示过度绘制区域
2)打开被测应用,可以看到不同颜色的绘制程度
原色:无过度绘制
蓝色:绘制一次(理想状态)
绿色:绘制两次
浅红:绘制三次
深红:绘制四次(必须优化)
测试指标
- 控制过滤绘制为2x
- 不允许存在4x过度绘制
- 不允许存在面积超过屏幕1/4的3x过度绘制
六、耗电量
测试前先看下规定时间内手机正常待机下耗电量为多少,然后再启动APP测试耗电量
测试点:
- 测试手机安装apk前后待机状态功耗无明显差别
- 常见使用场景中,耗电量在正常范围内
- 长时间连续使用应用,耗电量正常
测试方法:
- adb命令
#设置,目的:依照时间顺序展示各个wakelock的详细信息
adb shell dumpsys batterystats --enable full-wake-history
#重置batterystats数据
adb shell dumpsys batterystats --reset
#执行测试用例
#完成测试用例执行,连接设备,导出数据
adb shell dumpsys batterystats > bugreport.txt
#Android 7.0及以上
adb bugreport bugreport.zip - 使用第三方测试工具:Emmagee、GT等