androidAPP性能测试及专项测试
⼀、前⾔
1、Android性能测试分为两类:
1、⼀类为rom版本(系统)的性能测试
2、⼀类为应⽤app的性能测试
2、Android的app性能测试包括的测试项⽐如:
1、资源消耗
2、内存泄露
3、电量功耗
4、耗时
5、⽹络流量消耗
6、移动终端相关资源利⽤率
7、帧率
8、渲染等等....
3、⼯具:
(⼯具的原理都是基于调⽤android底层的⼀些api来获取到测试所⽤到的值)GT等
4、测试⽅法:
1、设计场景:⼿⼯或⾃动化场景
2、获取数据:可获取的数据包括:内存、cpu、电量功耗、hprof(内存泄露分析⽂件)、响应时间等等。。。。配合⼿⼯或⾃动化场景来获取数据(最好多取⼏次⽽且每次配合不同的设备看平均值)作为最后的对⽐分析
3、结果分析:拿到数据后分析哪些模块的数据异常再去Check code定位问题的原因
5、Android系统的⼏种场景状态:
1、空闲状态:指打开应⽤后,点击home键让应⽤后台运⾏,此时应⽤处于的状态叫做空闲
2、中等规格和满规格状态:中等规格和满规格指的是对应⽤的操作时间的间隔长短不⼀,中等规格时间较长,满规格时间较短
⼆、内存
1、内存测试中的测试⼦项
1)空闲状态下的应⽤内存消耗情况
2)中等规格状态下的应⽤内存消耗情况
3)满规格状态下的应⽤内存消耗情况
4)应⽤内存峰值情况
5)应⽤内存泄露情况
6)应⽤是否常驻内存
7)压⼒测试后的内存使⽤情况
2、内存问题现象
1)内存抖动
2)⼤内存对象被分配
3)内存不断增长
4)频繁GC
3、内存数据获取
1)各种Linux命令(free、top、meninfo等等。。。)
2)通过dumpsys
adb shell dumpsys meminfo pakagename
4、android检查内存泄漏步骤
1)运⾏Monkey运⾏压⼒测试
adb shell monkey -p [包名] --pct-touch 100 --throttle 1000 -s 100 -v -v 50 //运⾏APP,50次随机点击时间,每次时间间隔
1s,并⽣成种⼦值100
2)监控内存值,如果出现过⼤等递增异常则保存HPROF⽂件(hprof⽂件是Java 虚拟机的Heap快照)⽤于分析查看应⽤内存的命令:
adb shell dumpsys meminfo cn.microinvestment.weitou(进程名)
如果发现内存过⼤,则保存HPROF⽂件:adb shell am dumpheap <;进程名> <;保存路径>
3)分析hprof⽂件
⽤⼯具MAT来查看,⾸先还要这个HPROF⽂件转换成MAT可读的⽂件
在Android SDK tool⾥⾯有个hprof-conv命令:
hprof-conv <;原HPROF⽂件路径> <;转换后的HPROF路径>
hprof-conv a.hprof b.hprof
4)⽤MAT⼯具打开转换后的HPROF⽂件
⼀般选择Leak Suspects Report(通过SQL语句来查询对象有没有被释放掉,如果有多个相同的对象,则会存在内存泄露的问题)
三、CPU篇
1、CPU测试中的测试⼦项:
1)空闲状态下的应⽤CPU消耗情况
2)中等规格状态下的应⽤CPU消耗情况
3)满规格状态下的应⽤CPU消耗情况
4)应⽤CPU峰值情况
2、CPU数据获取:
1)adb shell dumpsys cpuinfo | grep packagename
2)top命令
adb shell top -m 10 -s cpu #查看占⽤cpu最⾼的前10个程序(-t 显⽰进程名称,-s 按指定⾏排序,-n 在退出前刷新⼏次,-d 刷新间隔,-m 显⽰最⼤数量)
叶贝文 adb shell top | grep PackageName > /
说明:
VSS – Virtual Set Size 虚拟耗⽤内存(包含共享库占⽤的内存)
RSS – Resident Set Size 实际使⽤物理内存(包含共享库占⽤的内存)
PSS – Proportional Set Size 实际使⽤的物理内存(⽐例分配共享库占⽤的内存)
USS – Unique Set Size 进程独⾃占⽤的物理内存(不包含共享库占⽤的内存) USS 是针对某个进程开始有可疑内存泄露的情况,
春天的谚语 是⼀个程序启动了会产⽣的虚拟内存,⼀旦这个程序进程杀掉就会释放
三、流量篇
1、概念:
中等负荷:应⽤正常操作
⾼负荷:应⽤极限操作
2、流量测试中的测试⼦项:
1)应⽤⾸次启动流量值
2)应⽤后台连续运⾏ 2 ⼩时的流量值
3)应⽤⾼负荷运⾏的流量峰值
4)应⽤中等负荷运⾏时的流量均值
3、获取流量数据:
1)tcpdump+wireshark
2)/proc/net/⽬录下相关⽂件
cat /proc/net/dev 获取系统的流量信息
3)查询应⽤的pid: adb shell ps | grep tataufo #如:31002
通过PID获取该应⽤的流量数据: adb shell cat /proc/31002/net/dev
(wlan0代表wifi上传下载量标识, 单位是字节可以/1024换算成KB, 打开⼿机飞⾏模式再关掉就可以将wlan0中的值初始化0) 4)查询应⽤的pid: adb shell ps | grep tataufo #如:31002
通过PID获取UID:adb shell cat /proc//status
通过UID获取:adb shell cat /proc/net/xt_qtaguid/stats | grep 31002
5)通过adb shell dumpsys package来获取应⽤的uid信息,然后在未操作应⽤之前,通过查看:
adb shell cat /proc/uid_stat/uid/tcp_rcv
adb shell cat /proc/uid_stat/uid/tcp_snd
获取到应⽤的起始的接收及发送的流量,然后我们再操作应⽤,再次通过上述2条命令可以获取到应⽤的结束的接收及发送的流量,通过相减及得到应⽤的整体流量消耗
6)Android代码:Android的TrafficStats类
四、功耗篇
1、功耗测试中的测试⼦项:
1)⼿机安装⽬标APK前后待机功耗⽆明显差异
2)常见使⽤场景中能够正常进⼊待机,待机电流在正常范围内
3)长时间连续使⽤应⽤⽆异常耗电现象
2、功耗测试⽅法:
⽅法⼀:软件
1)采⽤市场上提供的第三⽅⼯具,如⾦⼭电池管家之类的。
2)就是⾃写⼯具进⾏,这⾥⼀般会使⽤3种⽅法:
(1)基于android提供的PowerManager.WakeLock来进⾏
(2)⽐较复杂⼀点,功耗的计算=CPU消耗+Wake lock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗
(3)通过 adb shell dumpsys battery来获取
3、battery-historian(google开源⼯具)
⽅法⼆:硬件
⼀般使⽤万⽤表或者功耗仪安捷伦进⾏测试,使⽤功耗仪测试的时候,需要制作假电池来进⾏的,有些不能拔插电池的⼿机还需要焊接才能进⾏功耗测试
五、GPU篇
1、概念
过度绘制:界⾯显⽰的activity套接了多层⽽导致
帧率:屏幕滑动帧速率
帧⽅差:屏幕滑动平滑度
**FPS:**Frames Per Second 每秒显⽰的帧数根据⼈眼的⽣理结构,帧率⾼于24时就被认为是连贯的。对于游戏画⾯30fps是最低能接受的,
60fps逼真感,如果帧率⾼于屏幕刷新频率就是浪费。要达到30fps,每帧所占⽤的时间要⼩于33毫秒
2、GPU测试中的测试⼦项:
1)界⾯过度绘制
2)屏幕滑动帧速率
3)屏幕滑动平滑度
3、过度绘制测试:(⼈⼯进⾏测试)
打开开发者选项中的显⽰GPU过度绘制(Debug GPU overdraw)
验收的标准:
1)不允许出现⿊⾊像素
2)不允许存在4x过度绘制
3)不允许存在⾯积超过屏幕1/4区域的3x过度绘制(淡红⾊区域)
4、屏幕滑动帧速率测试:
⽅法⼀:
1)⼿机端打开开发者选项中的启⽤跟踪后勾选Graphics和View
2)启动SDK⼯具Systrace,勾选被测应⽤,点击Systrace,在弹出的对话框中设置持续抓取时间,在trace taps下⾯勾选gfx及view选项
3)⼿⼯滑动界⾯可以通过节拍来进⾏滑动或者扫动,帧率数据会保存到默认路径下,默认名称为trace.html
4)将trace.html⽂件拷贝到linux系统下通过命令进⾏转换,⽣成trace.csv⽂件
grep 'postFramebuffer' trace.html | sed -e 's/.]\W//g' -e 's/:.*$//g' -e 's/.//g' > trace.csv
5)⽤excel打开⽂件计算得到帧率
⽅法⼆:
硬件的⽅法,打开⾼速相机,开启摄像模式,录制⼿⼯滑动或者扫动被测应⽤的视频,再通过⼈
⼯或者程序数帧的⽅法对结果进⾏计算得到帧率
5、屏幕滑动平滑度的测试:
⽅法如同帧率测试,唯⼀的差异就是最后的结果计算公式的差异
6、捕获app帧率(android流畅度FPS测试):
1)打开⼿机开发者选项,勾选GPU显⽰配置⽂件(系统会记录保留每个界⾯最后128帧图像绘制的相关时间信息)
2)adb shell dumpsys x >
3)结果数据分析
怎么开通博客 Profile data in ms部分:
Draw:创建显⽰列表的时间(DisplayList),所有View对象OnDraw⽅法占⽤的时间
Process: Android 2D渲染引擎执⾏显⽰列表所花的时间,View越多时间越长
Execute:将⼀帧图像交给合成器(compsitor)的时间,较⼩
7、其他⼯具:
GameBench 测试android app的FPS⼯具
Gfxinfo 查看app绘制性能⼯具
六、响应时间篇
1、理解:
2020端午安康祝福语 1)从单击事件触发到容器启动NativeAPP消耗的时间(埋点)
2)NativeAPP完整启动消耗的时间(可以通过system.log获取)
3)Native调⽤RPC请求⽅法的延迟时间(埋点)
4)RPC请求发出去过程中的具体数据(req_size req_header req_time等,通过埋点获取)
5)RPC请求返回的具体数据(res_size res_header res_time等,通过埋点获取)昆山电工培训
6)本地解析返回数据所消耗的时间(埋点或者TraceView⼯具可获取)
7)界⾯渲染的时间(可以通过慢速摄像机或者埋点获取)
2、android app启动时间测试
3、应⽤的启动时间的测试,分为三类:
1)⾸次启动 --应⽤⾸次启动所花费的时间
2)⾮⾸次启动 --应⽤⾮⾸次启动所花费的时间
3)应⽤界⾯切换--应⽤界⾯内切换所花费的时间
4、应⽤启动时间数据获取:
1)adb logcat > / #所有activity打印的⽇志
find “Displayed” / > / #通过⽇志过滤关键字Displayed来过滤
find “ActivityName” / > / #通过activity名来过滤获取所测应⽤
南瓜饼怎么做 通过计算activity最后剩余的时间之和即可
2)硬件测试,使⽤⾼速相机或者⼿机采⽤录像的⽅法把应⽤启动过程给录制下来,然后通过⼈⼯数帧或者程序数帧的⽅式计算启动时间
七、弱⽹测试
1、测试⽅法:
1)使⽤真实的SIM卡、运营商⽹络来进⾏测试(移动⽆线测试中存在⼀些特别的BUG必须在特定的真实的运营商⽹络下才会发现)
2)通过代理的⽅式模拟弱⽹环境进⾏测试(charles 硬延迟)
3)连接模拟弱⽹的热点进⾏测试
2、热点模拟⽅法:
1)通过设置iPhone的开发者模式之后共享热点(硬延迟)
2)FaceBook开源的ATC(可使⽤树莓派来搭建ACT环境)
3、⽤户体验需要做的:
1)在应⽤中统⼀弱⽹加载的界⾯样式、动画效果、菊花icon等
2)统⼀⽹络错误、服务端错误、超时等展现给⽤户的界⾯和提⽰语句
3)定义清楚在每个中间过程是的⽤户交互⾏为
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论