【Android应用】性能测试方法
前言
Android设备的性能测试涉及面较广,且机型较多,所以Android设备的性能测试先天就是比较复杂的。此文力图以最简洁、最直接的方式阐述Android应用性能测试方法,同时也会涉及到一些性能测试标准。一方面是为有需要的童鞋做个参考,少踩些坑;另一方面也是为了共同进步,不断学习Android应用性能测试方法。
Android性能测试主要分为:帧率fps、静默CPU占用率、内存泄漏、流量、响应时间、过度渲染等,下文按照以上顺序进行展开(以手淘外卖为测试对象)。
ps:在进行具体测试之前,需要先配置好电脑环境,安装Android studio(最新版都是集成了Android sdk的)、java、MAT,具体怎么配置,请自行百度;打开手机USB调试,通过USB连接到电脑。
注:一定要确定手机能被正常检测到(cmd中输入:adb devices,应该能看到设备号)。
帧率fps
帧率fps测试标准:大于16ms帧占比<8%,流畅度>50(手淘有专门的换算公式)。
谈到帧率,这里有必要讲解下Android渲染机制,一图胜千言:
Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,那么整个过程如果保证在16ms以内就能达到一个流畅的画面。那么如果操作超过了16ms就会发生下面的情况:
这到底什么意思呢?意思就是第三个VSYNC信号来的时候,要进行UI渲染了,结果发现对应于第二个VSYNC信号的UI渲染还没完成,这时第三个VSYNC信号只能等着下个16ms再进行响应的渲染了,这会发生什么呢?掉帧呗,或者叫丢帧,如果这种情况发生的太多,用户就会感觉到app卡顿了。
有童鞋肯定纳闷为什么是16ms?那么我网上查了下,原因如下:
1.现在手机一般刷新频率都是60HZ,那么1000/60≈16.67,所以必须在16ms内完成一帧的任务;
2.1000/16=62.5(Hz/fps),而人眼与大脑之间的协作无法感知超过60fps的画面更新。12fps大概类似手动快速翻动书籍的帧率,这明显是可以感知到不够顺滑的。24fps使得人眼感知的是连续线性的运动,这其实是归功于运动模糊的 效果。24fps是电影胶圈通常使用的帧率,因为这个帧率已经足够支撑大部分电影画面需要表达的内容,同时能够最大的减少费用支出。但是低于30fps是
无法顺畅表现绚丽的画面内容的,此时就需要用到60fps来达到想要的效果,当然超过60fps是没有必要的(据说Dart能够带来120fps的体验)。
那么,怎么测量帧率呢?
【方法一】
1.下载本文附件中的工具包;
2.在Android手机设置里打开GPU呈现模式分析->在adb shell dumpsys gfxinfo中:以MX4手机为例:设置->辅助功能->开发者选项->GPU呈现模式分析->在adb shell dumpsys gfxinfo中;
3.打开步骤1中下载的工具包:android_perfTool->perftest.jar,双击或在命令行中输入:java -jar perftest.jar(具体以该工具所在路径为准),此时就能在工具中进行检测了。该工具最下方给出了具体的信息,较为方便。
【方法二】
1.在Android手机设置里打开GPU呈现模式分析->在adb shell dumpsys gfxinfo中:以MX4手机为例:设置->辅助功能->开发者选项->GPU呈现模式分析->在adb shell dumpsys gfxinfo中;
2.打开需要测试的APP,如果已经打开,请关闭后,重启该应用;
3.打开命令行(cmd),在命令行输入:adb shell dumpsys gfxinfo "你自己的应用名字" > fps.txt;
4.打开生成的fps.txt,找到Profile data in ms这部分数据,即是我们需要的数据。
5.当然,你要是觉得txt中查看不方便,可以将这部分数据复制到excel中,做一个图表出来,很直观。
【方法三】:Android手机设置->GPU呈现模式分析->在屏幕上显示为条形图:以MX4手机为例:设置->辅助功能->开发者选项->GPU呈现模式分析->在屏幕上显示为条形图,这样就能直观的观察帧率情况了。
静默CPU占有率
性能测试标注:<=1%(至少保证静默测试60分钟);
【方法一】
1.下载本文附件中的工具包;
2.打开步骤1中下载的工具包:android_perfTool->perftest.jar,双击或在命令行中输入:java -jar perftest.jar(具体以该工具所在路径为准),此时就能在工具中进行CPU占用率的检测了。
注:如果工具不能正常测得数据,请采用【方法二】。
【方法二】打开命令行,输入:adb shell "top|grep 'com.taobao.taobao'",一定注意,要带双引号,这是个坑!这时需要的数据就来了。
ps:图中数据不是静默的哈,只是方便展示而已~
内存泄漏
性能测试标准:不存在内存泄漏。
手淘中植入了开源的内存检测代码,该检测基本上能够监控到任何内存泄漏,并给出友好的界面提示。当然,这不是百分百的,我们还是需要进一步测试,测试方法如下:
【方法一】通过检测内存占用量来判断是否发生了内存泄漏:内存占用量应该在一个有限的范围内变化,如果波动较大,就存在内存泄漏,具体步骤如下:
一种方法是:
1.下载本文附件中的工具包;
2.打开步骤1中下载的工具包:android_perfTool->perftest.jar,双击或在命令行中输入:java -jar perftest.jar(具体以该工具所在路径为准),此时就能在工具中进行内存占用量的检测了。
另一种方法是:打开Android Studio,在主界面下方【monitor】也有性能检测需要的各种信息,只是该信息不方便导出。
【方法二】
1.打开Android->Sdk->tools->monitor(或者ddms),左侧Devices中必须显示待测设备,即图中标注1所示。
2.选中需要测试的APP进程,手淘进程是“com.taobao.taobao”(图中是system_process),即图中标注1所示。在手机上反复进出外卖首页3~5次,然后点击“Update Heap”(图中标注2所示),等待20s后,点击一次“Cause GC”,观察“data object”中的“Total Size”值,然后反复进出外卖首页,观察“data object”中的“Total Size”值(该值大小即是手淘此时占用手机的内存总量,应该稳定在一个有限的范围,可以作为内存泄漏的一个判断指标)。
3.点击“Dump HPROF file”按钮,即图中标注5所示,导出hprof文件,名称是"com.taobao.taobao",该名称一般都是以进程名称命名。
4.打开命令行(cmd),将路径切换到“...\Android\Sdk\platform-tools”,什么?不会切换,那么请自行百度! 然后输入命令:“hprof-conv com.taobao.taobao.hprof aaa.hprof”,其中,“com.taobao.taobao.hprof”文件注意路径,可以直接拖拽到命令行(cmd),“aaa.hprof” 即是需要的文件,执行完之后,该文件在“...\Android\Sdk\platform-tools”路径下;
5.打开MAT,File->Open file,选中步骤4中的“aaa.hprof”文件,之后一路点next、finish...最终出现下图所示界面,注意图中标注1:
6.点击上图中标注2所示,得到下图所示界面,在下图中标注为1的地方输入要查询的类,本文需要定位的类为“TakeoutMainActivity”,即可检测到外卖主界面是否仅持有一个单例,或者是否正常释放,至此,【方法二】检测内存泄漏即算完成。
注:步骤2中“Cause GC”点击一次之后,每隔一段时间,软件会自动执行一次GC,因此不必手动点击;步骤3中导出文件过程比较慢,请耐心等待。另外,图中的system_process别乱GC,GC完我手机都挂了,怎么都开不开,后来系统好像是重新更新了一样。。。
流量
性能测试标准:控制资源个数和资源大小(<50KB),无重复请求,静默时尽量无使用,h5页面控制在200KB大小。
【方法一】
1.下载本文附件中的工具包;
2.打开步骤1中下载的工具包:android_perfTool->perftest.jar,双击或在命令行中输入:java -jar perftest.jar(具体以该工具所在路径为准),此时就能在工具中进行流量的检测了。
【方法二】:打开Android Studio,在主界面下方【monitor】处也有性能检测需要的各种信息,只是该信息不方便导出(内存泄露中已附图,此处省略)。
【方法三】
1.打开Android->Sdk->tools->monitor(或者DDMS),左侧Devices中必须显示待测手机设备。
2.在上图中下方栏中即可检测到流量数据;
3.接口数量是否重复请求,可以通过无线实验室进行,具体步骤详见
无线实验室帮助文档,其中可以查看接口请求,以及请求资源大小等信息。
响应时间
过度渲染
性能测试标准:wifi/4G/3G<1s,2G<2s。
【方法】:Android手机设置->调试GPU过度绘制->手机上显示的不同颜色就标识层数:以MX4手机为例:设置->辅助功能->开发者选项->调试GPU过度绘制->手机上显示的不同颜色就标识层数,这样就能直观的观察页面哪些地方层数比较深,便于改进。
总结:
本文是自己做Android手淘外卖性能测试的一点小小的总结,中间难免会有差错,希望各位能多多指正,共同学习。
注:附件包就不附上了,如果需要,联系我就好~