性能测试 学习笔记

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新版本无权限访问

弱网测试

  1. 通过模拟器 $(which emulator) -avd [avd-image] -netdelay 20000 -netspeed gsm
  2. 真机,通过代理 Charles模拟弱网
  3. 网关 Facebook 的 ATC

卡顿 (掉帧、gc、cpu)

卡顿测试、内存泄漏测试、method profile
卡顿定义:人眼感知的流畅度不能小于60fps
帧分析工具:systrace
卡顿影响:
gc
cpu overdraw
gpu 渲染
卡顿指标:
1.adb shell dumpsysy gfxinfo

响应慢

冷热启动、界面切换、h5性能

冷启动

进程不存在,从创建应用进程开始
测试方法:

  1. adb logcat
  2. uiautomator 等自动化工具200ms巡检界面变化
  3. 录屏+拆帧

测试流程:

  1. 冷启动 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
  1. 录屏+拆帧(判断渲染是否完成)
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

  1. usb连接设备,清除之前的电池数据,避免获取到的数据文件过大
adb shell dumpsys batterystats --reset  # 因为设备会一直在后台收集电池数据,所以在使用之前要重置清除之前收集的电池数据
  1. 断开usb连接,避免设备通过usb充电,造成数据不准确
  2. 任意使用设备,过一段时间后在把设备连接电脑,收集数据
adb shell dumpsys batterystats > [path/]batterystats.txt
  1. 创建报告
    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

  1. network
    • Queueing 资源加载的排队时间
    • TTFB 发起请求之后,服务器首次返回的时间
    • content download 内容加载时间
    • DOMContentLoaded DOM加载完成时间(页面布局加载完成,可进行点击等操作)
    • Load 整个页面完整加载时间(包括图片、动效等)
  2. js获取
  • 获取每个阶段的时间 performance.timing.toJSON()
  • 获取每个资源加载过程的相关信息 performance.getEntries()[0].toJSON()

发布前检测方式

  1. 健壮性检测:MONKEY、MAXIM
  2. 深度功能覆盖:appcrawler自动遍历
  3. 异常场景覆盖

系统资源

adb shell dumpsys procstats --hours 3 查看CPUINFO 数据
adb shell dumpsys meminfo package_name|pid [-d] 当前包的内存信息

method profile

  1. 打开as
  2. 打开 run-> profile 'app'
  3. call chart
  4. flame chart 记录函数耗费的cpu
  5. top dowm 从父函数开始调用的函数
posted @ 2022-03-11 18:44  丛影HHZ  阅读(191)  评论(0编辑  收藏  举报