性能测试 学习笔记
Activity 启动过程
system进程 --> 创建android虚拟机 --> Application onCreat
-->创建主线程MainThead
-->Activity init
-->Activity onCreate
-->界面渲染 #界面出现
专项测试
崩溃(crash、弱网)
自动遍历、横竖屏切换、快速进退
ANR: 主线程5s内没响应;常见原因: 主线程IO、计算、跨进程通讯耗时、死锁、同步锁等待
JAVA Crash: 未捕获的Android vm异常
捕获异常命令:
adb logcat -s *:E
adb root;adb shell ls /data/anr # android新版本无权限访问
弱网测试
- 通过模拟器
$(which emulator) -avd [avd-image] -netdelay 20000 -netspeed gsm
- 真机,通过代理 Charles模拟弱网
- 网关 Facebook 的 ATC
卡顿 (掉帧、gc、cpu)
卡顿测试、内存泄漏测试、method profile
卡顿定义:人眼感知的流畅度不能小于60fps
帧分析工具:systrace
卡顿影响:
gc
cpu overdraw
gpu 渲染
卡顿指标:
1.adb shell dumpsysy gfxinfo
响应慢
冷热启动、界面切换、h5性能
冷启动
进程不存在,从创建应用进程开始
测试方法:
- adb logcat
- uiautomator 等自动化工具200ms巡检界面变化
- 录屏+拆帧
测试流程:
- 冷启动 logcat(启动是否完成)
package=com.xueqiu.android
清理缓存数据:adb shell pm clear $package
停止进程:adb shell am force-stop $package
启动app:adb shell am start -S -W $package/.view.WelcomeActivityAlias
获取数据:adb logcat |grep -i displayed
- 录屏+拆帧(判断渲染是否完成)
adb shell am force-stop $package
adb shell screenrecord --bugreport --time-limit 30 /data/local/tmp/xueqiu.mp4 &
adb shell am start -S -W $package/.view.WelcomeActivityAlias
wait
adb pull /data/local/tmp/xueqiu.mp4 .
ffmpeg -i xueqiu.mp4 xueqiu.gif
ffmpeg -i xueqiu.mp4 -r 10 frames_%03d.jpg
暖启动
进程存在,界面不存在
热启动
后台启动应用
发热
method profile、gc统计、io统计、流量统计、硬件使用统计、耗电量分析
耗电
https://developer.android.com/topic/performance/power/setup-battery-historian
- usb连接设备,清除之前的电池数据,避免获取到的数据文件过大
adb shell dumpsys batterystats --reset # 因为设备会一直在后台收集电池数据,所以在使用之前要重置清除之前收集的电池数据
- 断开usb连接,避免设备通过usb充电,造成数据不准确
- 任意使用设备,过一段时间后在把设备连接电脑,收集数据
adb shell dumpsys batterystats > [path/]batterystats.txt
- 创建报告
Android7.0及以上
adb bugreport > [path/]bugreport.zip
Android6.0及以下
adb bugreport > [path/]bugreport.txt
这里遇到一个坑
我的设备是Android5.1的,使用adb bugreport > [path/]bugreport.txt
命令之后提示
Failed to get bugreportz version, which is only available on devices running Android 7.0 or later.
Trying a plain-text bug report instead
解决办法:下载一个低版本的platform-tools(https://www.androiddevtools.cn/ 我下载的是22版本的)可正常生成报告
5. 因为txt格式的报告不怎么容易分析,采用battery-historian工具
根据官方文档,刚好我机子里已经安装好docker,就用dockers来尝试一下
docker run -p port_number:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999
遇到坑2
运行后返回docker: Error response from daemon: Get https://gcr.io/v2/: net/http: request canceled while waiting for connection
解决办法:查了资料,官方给的命令需要FQ,所以换了个镜像
docker pull bhaavan/battery-historian
这个镜像拉下来也挺久的,幸好还是能获取成功
按照文档,使用命令,运行
docker run -d -p 9999:9999 bhaavan/battery-historian
成功
6.打开浏览器,输入http://192.168.0.2:9999/(http://192.168.0.2为本机ip地址)
7.等待加载完成,打开本地生成好的bugreport.txt文件,最终
兼容性问题(机型覆盖、回归)
兼容性测试、自动化测试、自动遍历、monkey测试
W3C web性能标准
https://developers.google.com/web/tools/chrome-devtools/network/reference#timing-explanation
- network
- Queueing 资源加载的排队时间
- TTFB 发起请求之后,服务器首次返回的时间
- content download 内容加载时间
- DOMContentLoaded DOM加载完成时间(页面布局加载完成,可进行点击等操作)
- Load 整个页面完整加载时间(包括图片、动效等)
- js获取
- 获取每个阶段的时间
performance.timing.toJSON()
- 获取每个资源加载过程的相关信息
performance.getEntries()[0].toJSON()
发布前检测方式
- 健壮性检测:MONKEY、MAXIM
- 深度功能覆盖:appcrawler自动遍历
- 异常场景覆盖
系统资源
adb shell dumpsys procstats --hours 3
查看CPUINFO 数据
adb shell dumpsys meminfo package_name|pid [-d]
当前包的内存信息
method profile
- 打开as
- 打开 run-> profile 'app'
- call chart
- flame chart 记录函数耗费的cpu
- top dowm 从父函数开始调用的函数