性能测试
作者:王劲松 2016-03-09 {{allComments.length}} 7454 干货分享【背景介绍】
百度视频是第三方视频资源聚合类产品,主要提供用户在线播放、离线下载各种视频服务,提供pc、android、iOS三端入口,用户体验、流畅度、下载速度、检索视频资源等是目前产品线最关注的层面。一款优秀的娱乐类应用,必须具有卓越的性能,超越同类竞品,同时兼具良好的用户体验。
一、app性能维度分析
App类型众多,根据具体类型划分,性能指标的维度和优先级各不相同。视频类app归属于娱乐游戏型的app,因此性能测试维度优先级排序为:流畅度、crash、内存、流量、响应时长、功耗、cpu。
表征不同维度指标的量化单位如图1所示。比如流畅度是FPS(帧率),内存是兆比等等
图1 不同维度指标的量化单位
因为android平台底层是由linux系统改良而来,不同维度的指标绝大部分都可以通过命令来取不同的指标(具体方法可以参加后面工具)
在iOS平台上,性能的获取,必须使用Xcode里面instruments下的相应组件,不像开源的android那样灵活,但技术上是可以做到各平台的性能指标获取测试。
二、app性能测试平台
从2012年后,测试平台化、服务化的思路推广到全国各地。各大公司都开发了不同的性能测试平台,比较有代表性的性能测试平台是:
1. 百度的慕斯(又名移动app测试业务支撑平台(外部名称MTC:http://mtc.baidu.com))
2. 腾讯的bita
3. GT(http://gt.qq.com)
4. itestin(最老的一个性能和兼容性测试平台http://i.testin.cn/)
由于iOS性能测试首先要涉及到签名的破解,所以所有平台一开始就是从android的app进行切入点先行开发。
图2 三大性能测试平台
三、app性能测试落地
性能测试开展主要分线下测试和线上性能监控测试两大类。
线下app性能测试主要是传统测试手段和方法,比如PM和QA发起做一个性能和竞品对比性能测试,或者版本大改动、框架迁移,都需要重新进行app性能测试。线下测试我们可以用一些比较靠谱的平台和工具就足以应付,产品接入即可收集性能指标。百度内部产品线一般都接入了慕斯平台,如果是腾讯产品一般都用他们内部开发的GT工具,GT工具不但线下测试用起来很方便,线上测试性能也不错。
线上监控测试主要是针对一些动态变化的情况,因为app测试非常关键的一点是场景化测试,即app必须在特定场合,特别条件才触发某类问题。这时候比较E2E场景case指标功能,才能精准衡量产品核心性能的能力。比如:我们在二三线城市特定的网络下,观看某一部特定片源(百度爱奇艺视频源),并且离线缓存,这时候用到了不同地域网络,和调用了爱奇艺在那个城市的server。这是在北京家里没法做到的场景,但可以借助vpn模拟异地场景测试。然而实际上效果并不良好,因为模拟取决于北京的网络情况,还有vpn不能模拟动态变化网络切换的场景。
针对线上性能的监控,百度深圳研究所还做了个场测助手,是一款方便收集性能,定位bug一体化的工具。
四、app性能指标获取手段
如果你不在大公司,又没办法使用上面好用的平台。下面有几个简单方便的方法可以让你自己写脚本来获取各种性能指标。Android系统指标获取:
——CPU
CPU的测试方法分为几类
1) 使用android提供的view plaincopy在CODE上查看代码片派生到我的代码片adbshell dumpsys cpuinfo |grep packagename>/address/cpu.txt来获取
2) 使用top命令view plaincopy在CODE上查看代码片派生到我的代码片 adbshell top |grep
packagename>/address/cpu.txt 来获取
——内存
内存消耗,这个测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性,当然关于内存测试,在这里我们需要引入几个概念:空闲状态、中等规格、满规格。
空闲状态:指打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲。中等规格和满规格指的是对应用的操作时间的间隔长短不一,中等规格时间较长,满规格时间较短。
接下来我们说说在内存测试中,存在很多测试子项,如下清单所示:
1) 空闲状态下的应用内存消耗情况
2)中等规格状态下的应用内存消耗情况
3) 满规格状态下的应用内存消耗情况
4) 应用内存峰值情况
5) 应用内存泄露情况
6) 应用是否常驻内存
7) 压力测试后的内存使用情况
——电量
功耗测试主要从以下几个方面入手进行测试:
1) 测试手机安装目标APK前后待机功耗无明显差异。
2) 常见使用场景中能够正常进入待机,待机电流在正常范围内。
3)长时间连续使用应用无异常耗电现象。
功耗测试的方法分为两类,一类为软件测试,一类为硬件测试。
软件测试一般分为2类:
第一种采用市场上提供的第三方工具,如金山电池管家之类的。第二种就是自写工具进行,这里一般会使用3种方法:
第一种基于android提供的PowerManager.WakeLock来进行;
第二种比较复杂一点,功耗的计算=CPU消耗+Wakelock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗;
第三种通过 adbshell dumpsys battery来获取。
接着说下硬件测试,在这里我们一般使用万用表或者功耗仪进行测试,使用功耗仪测试的时候,需要制作假电池来进行的,有些不能拔插电池的手机还需要焊接才能进行对了测试。
——启动时长
Android性能测试-启动时间:
首先我们来说说启动时间。关于应用的启动时间的测试,分为三类:
1) 首次启动 --应用首次启动所花费的时间
2) 非首次启动 --应用非首次启动所花费的时间
3) 应用界面切换--应用界面内切换所花费的时间
那么如何来做启动时间的测试呢,一般我们分为2类,一类为使用软件来测试,一类为使用硬件来测试,首先我们说说软件测试的方法,可能大部分人都比较通晓使用android 提供的 DisplayManager 来获取 activity 的启动时间。通过日志过滤关键字 Displayed 来过滤所有 activity 所打印的,记录日志通过。
——帧率
GPU这个词对于PC性能测试者来说并不陌生,而今3Dmax,安兔兔之类的第三方软件让GPU 在移动端性能测试领域家喻户晓,但对于app内的GPU该如何来测试呢?首先我们引入几个名词:过度绘制、帧率、帧方差。过度绘制是指界面显示的activity套接了多层导致的结果。帧率是指屏幕刷新率。帧方差是指屏幕刷新帧间隔方差。对于 GPU 的测试主要包括以下几个测试子项:界面过度绘制、屏幕滑动帧速率、屏幕滑动平滑度。
对于过度绘制的测试主要通过人工进行测试,通过打开开发者选项中的显示GPU过度绘制来进行测试(PS:只有android4.2及以上的版本才具备此功能),验收的标准为:
1) 不允许出现黑色像素
2) 不允许存在4x过度绘
3) 不允许存在面积超过屏幕1/4区域的3x过度绘制(淡红色区域)
对于屏幕滑动帧速率主要有 2 种方法。
先说说软件测试的方法:
1)手机端需打开开发者选项中的启用跟踪后,勾选 Graphics 和 View;
2)启动SDK工具Systrace插件,勾选被测应用,点击Systrace插件,在弹出的对话框中设置持续抓取时间,在tracetaps下面勾选gfx及view选项;
3)人滑动界面可以通过节拍来进行滑动或者扫动,帧率数据会保存到默认路径下,默认名称为 trace.html;
4)将trace.html文件拷贝到linux系统下通过命令进行转换,生成trace.csv文件。
——网络流量
性能测试的——流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试。流量测试,同样需要引入几个名词
中等负荷:应用正常操作
高负荷:应用极限操作
流量测试包括以下测试项:
1)应用首次启动流量提示
2)应用后台连续运行2小时的流量值
3)应用高负荷运行的流量峰值
4)应用中等负荷运行时的流量均值流量测试一般都是用软件来进行的,这里我们一般分为2类:a、采用市场提供的第三方工具来进行测试,如流量宝之类的b、自研工具进行测试
自研工具进行测试一般包含 2 类方法:
通过tcodump抓包,再通过wireshake直接读取包信息来获得流量
首先获得被测应用的uid信息,可以通过adbshell dumpsys package来获取 然后在未操作应用之前,我们可以通过查看
adbshell cat /proc/uid_stat/uid/tcp_rcv
adbshell cat /proc/uid_stat/uid/tcp_snd
获取到应用的起始的接收及发送的流量,然后我们再操作应用,再次通过上述 2 条命令可以获取到应用的结束的接收及发送的流量,通过相减及得到应用的整体流量消耗。
五、iOS系统指标获取
对于ios系统,只需要一个装了xcode的mac电脑,取以上指标相对容易。最新版本是xcode7.0(当然你用老版本的也一点问题都没有)性能测试工具,推荐用下面三个:
5.1 Instruments,这个是mac苹果自带的工具,里面有很多模板,选择不同的系能模板就可以监听手机app性能了,但是要注意,没越狱的机器必须注册开发者证书,或者拿到app企业证书,这样xcode才能启动app进行性能监控,也就是说你被测app必须有源代码才行,当然你想规避这个问题,得走百度smallApple破解签名机制
5.2 GT,是腾讯开发的一款app,但是也得在源码层面嵌入GT的SDK SmallApple ( http://smallapple.newoffline.bae.baidu.com)Smallapple是一个开源的IOS自动化测试工具,旨在提供一套完整的IOS自动化测试解决方案,提供针对IOS App的功能和性能测试,同时提供类似Android adb、重签名、instruments结果解析、录制回放等工具集。Smallapple通过一键式的执行方式,自动完成App重签名、安装、测试、性能采集(包括CPU、内存、流量等)、Crash检测和结果报告等工作。Smallapple特性:
1) Smallapple致力于以最简单的方式,最小的代价提供给用户使用。
2) 支持非越狱设备
3)不需要依赖源码
4)支持Appstore或者第三方下载的App安装测试
5)完全的命令行模式