文章目录
19-1 app启动性能测试
android设计理念,利用activity降低模块耦合度
- 1)
- 1、调起app
- 2、创建白窗口
- 3、启动进程(绿色外窗口)
- 2)创建object android 调用写的方法
- 3)main thread主线程:加载main activity ->初始化,渲染,数据的初始化,对象的创建;开始渲染页面,渲染完成进入displayed time
- 4)displayed time 与空白窗口对调,用户真正能控制app的时间就在这个时间开始
- 5)other stuff 动态加载过程,页面已经显示,但未加载完全(例如雪球app的内页广告)
- 冷启动:app完全q掉,完全启动,从开始到displayed time
- 热启动:app在后台,直接启动
- 暖启动:app在后台驻久了,内存被杀掉,用户此时重启app,有一些object会被保留,比热会慢一点
- 首屏启动:加上stuff time(自己加的概念)
- adb logcat 只能计算首屏启动之前的时间
- 需要手工进行,比较耗时
- 每个200ms打印pagesource
- 硬埋点:开发在app启动时间之前加一个埋点,app启动完成之后结束埋点,数据回传到服务器,这个方法最准确,也可解决不同机型测试,但需要开发配合
1)adb logcat方法
清除缓存,停止进程,进行冷启动
-S 启动前先停掉
-W 等待activity启动完成
totaltime即为冷启动时间
2)使用ffmpeg拆帧
adb pull . 拉到本地
ffmpeg 工具可进行视频拆解
-r 10 1秒拆成10帧(1帧相当于0.1秒)——通过拆帧时间推算出每个启动用了多长时间
frames_%03d.jpg 格式化命名拆帧图片——frames开头,后面3个长度,0代表不够三个长度用0补充
19-2 接口性能测试
19-3 PC浏览器的性能数据获取与分析
- webview:手机内嵌浏览器,可以加载小型页面,android4.4后直接采用Chrome浏览器,webview主要用来加载html
- h5:就是html5,就是html的技术
- webview通常采用的技术是h5,h5依托webview加载
- 蓝线 :dom加载完全时间(图片,动图,视频等可能都没加载完全)
- 红线:所有资源加载完全
- disable cache:清除缓存(相当于移动端冷启动)
- all:动态资源,静态资源全部加载
- XHR :只加载动态资源
1)关键选项
- 蓝线代表数据的dom出现的时间,到蓝线代表dom加载完全,可以对dom进行点击,sendkeys,但图片,动图,视频未加载完全
- 红线后代表资源加载完全
- Disable cache:每次刷新时,从0开始,清除缓存,相当于移动端的冷启动
- XHR:加载动态资源,图片,CSS静态资源不会出现在悬框里
selenium中
- xpath方式定位是在dom中查找,dom加载后即会查找
- css方式定位是在css加载完成后查找(图片等加载完成)
- 使用css 定位更稳定
2)时间线关键信息
双击项目即可点击时间线
- Queueing:排队时间(数据传输过程中排队过程,队列排队0.91ms)
- Stalled:资源在排队过程中被丢弃的时间(在队列排队中请求停止请求0.25ms)
- Waiting(TTFB):等待服务器响应的时间(发出了一个请求,等待了25.72ms收到服务器的响应)
- Content Download:下载资源的时间
鼠标选定拖动后可以只显示选中内容
Explanation——官网字段详细解释
Chrome62版本webview比较稳定
19-4 系统资源分析
1)cpu统计
cpu处理图形,完成后,GPU拿到图形进行绘制
中间经过Graphics中间件绘图处理工具
cpu处理过快,GPU处理过慢,出现缓存(绿色方块,队列),进行码队
如果GPU显示完整,GPU渲染过程平缓,队列也好,那么cpu一定也也没问题
因此可以借助GPU绘制工具,反观CPU状态
GPU渲染工具
- 每个竖条都是1帧,每1帧代表一个画面
- 绿线:看电影时fps通常为24,1s绘制24帧,android规定绘制1帧时间不要超过16ms,绿线代表16ms,超过绿线代表超过16ms,超过16ms时现象:发生卡顿
GPU拿到view之前的工作,CPU放入队列中,中间件处理的过程即为蓝色
onDraw:对图形进行绘制的函数,绘制的基础:Convert类似画布,在画布上调各种函数,比如画三角,画圆圈,而convert和绘制过程要放到ondraw函数中,如果ondraw过于负责,蓝线可能会飙高
OpenGL或其他中间件处理displaylist
较高:负载过重
页面是多层的,0,1,2,3层,反复提交某一层,可能造成view重复提交,红线过高
可到android官网查看
2)mem统计
手机room即为内存
所有RSS 相加大于实际使用的物理内存(不按比例分配)
所有PSS相加等于实际使用的物理内存
共享内存: 交互数据存放在共享内存中
查内存命令procstas
process stats进程状态
– hours 仅看3小时内的
*进程名,用户名,版本号:
- Total综合内存情况:100%代表3个小时内完全占据了内存,说明应用在3个小时内一直在启动,没有中断过
- Persistent长驻内存:期间一直长驻的时间
- Imp Fg是否前台显示
- Service是否以服务形式驻留内存
- Top目前最高级别
也可以用meminfo命令
如果不指定包名,默认以PSS进行排序
提示
- 同一时间total有好几个100%,同一时间有多个占内存应用,测试内存不准确,做版本对比才有意义,而不是看应用本身内存大小
3)网络流量分析
显示网络流量命令
活动接口和活动UID接口在android中未做区分,为统一数据
type:网络类型
subType:子网类型
networkID:网络ID
流量抓控以ident为单位
指定应用UID命令
指定包,过滤userID
直接输入命令报空指针异常(模拟器无效,需连接真机)
- rb:receive bytes 接收字节数
- rp:receive package 接收包数
- tb:transport bytes 传输字节数
- tp:transport package 传输包数
网络信息的内容建议查阅AndroidStuio官网或Android Developer官网进行扩展
19-5 耗电量测试
1、clone项目
2、进入目录
3、安装golang语言;编译,拉取;-d -u不运行只编译和拉取
4、go run 运行
清空
电量录制
左边:常见内容指标
黑线:所有走势代表整体耗电量变化(时间较短时看不到黑线,小时以上才能看到黑线)y轴:电量情况
x轴:时间维度
battery_level电量百分比
screen屏幕亮度
安装环境
1、下载golang
2、环境变量设置golang
3、python版本设置2.7(history依赖2.7,3.7会报错)
clone代码
不建议docker安装,项目比较老,未更新,建议手动编译
修改版本为20190513(最稳定)
注意⚠️:正常测试应使用真机,不用模拟器,(演示使用模拟器&不清除数据)
👆开启电量收集
电量数据收集
对手机进行随机操作或自动化测试脚本等
长时间操作
数据下载
uptime开机时间
导入数据
用模拟器导入的数据非常少
👇真机数据10min 左右
- 屏幕:
- 每段时间当前app:
- wifi:
- 广播:
- Wi-Fi开启情况:
- 电量:
- 后台进程:
- 温度:
- historian:
19-6 健壮性测试
盲点:随机操作(monkey等)
网络不佳:弱网+盲点
数据不通:无网,飞行模式测试
打开安卓模拟器
-s 根据时间轴进行操作
-s 100 执行100个时间序列
- 如果某次操作崩溃了,从头返回上次执行场景,重复执行100个时间序列,可以复现
- 一般将时间数调的特别大,比如20000,让app自动跑,跑半个小时,看app有无异常状况,如果30min无异样,比较稳定,则认为app健壮性比较完好
- 如果想操作更详细一些,可以使用Appcrawler指定具体范围,对具体范围内的app或对app中具体某个模块进行测试