cover_image

APP性能测试的6项关键指标及测试获取手段

王劲松 壹佰案例
2017年07月10日 00:31

图片

导读  ID:TOP100case 

     导语:如何把rom测试和手机预装APP测试得更好,用户体验、流畅度、功耗、启动时长等指标是中兴努比亚手机产品线最关注的层面。本文将从APP性能维度、性能测试平台等维度全面讲解中兴努比亚APP专项性能测试和监控的案例实践。

图片

(全文共3131字   预计阅读时长:4分钟)

图片

 APP性能维度分析 


APP类型众多,根据具体类型划分,性能指标的维度和优先级各不相同。视频类APP归属于娱乐游戏型的APP,因此性能测试维度优先级排序为:流畅度、crash、内存、流量、响应时长、功耗、CPU。


表征不同维度指标的量化单位如图1所示。比如流畅度是FPS(帧率),内存是兆比等等。


图片

图1  不同维度指标的量化单位


因为Android平台底层是由linux系统改良而来,不同维度的指标绝大部分都可以通过命令获取不同的指标(具体方法可以考加后面工具)。


在iOS平台上,性能的获取必须使用Xcode里面instruments下的相应组件,不像开源的Android那样灵活,但技术上是可以做到各平台的性能指标获取测试。


图片

 APP性能测试平台 


从2012年后,测试平台化、服务化的思路推广到全国各地。各大公司都开发了不同的性能测试平台,如图2所示。比较有代表性的性能测试平台包括:


  • 百度的慕斯(又名移动APP测试业务支撑平台(外部名称MTC:http://mtc.baidu.com));

  • 腾讯的bita;

  • GT(http://gt.qq.com);

  • itestin(最老的一个性能和兼容性测试平台http://i.testin.cn/)。


由于IOS性能测试首先要涉及到签名的破解,所以所有平台一般都是从Android的APP进行切入点先行开发。


图片

图2  三大性能测试平台


图片

 APP性能测试落地 


性能测试开展主要分线下性能测试和线上监控测试两大类。


线下APP性能测试主要依靠传统测试手段和方法,比如PM和QA发起一个性能和竞品对比性能测试,此外,版本大改动、框架迁移,都需要重新进行APP性能测试。线下测试我们用一些比较稳定的平台和工具就足以应付,产品接入即可收集性能指标。百度内部产品线一般都接入了MTC平台;腾讯产品一般都用他们内部开发的GT工具,GT工具不但线下测试比较方便,线上测试性能也不错。


线上监控测试主要是针对一些动态变化的情况,因为APP测试中关键的一点是场景化测试,即APP必须在特定场合,特别条件才触发某类问题。这时候比较E2E场景case指标功能,才能更精准衡量产品核心性能的能力。


如我们在二、三线城市特定的网络下,观看某一部特定片源(爱奇艺视频源),并且离线缓存,这时候用到了不同地域网络和调用了爱奇艺在那个城市的server。这是在北京没法做到的场景,虽然可以借助vpn模拟异地场景测试。实际上效果并不良好,因为模拟取决于北京的网络情况,还有vpn不能模拟动态变化网络切换的场景。


针对线上性能的监控,某公司深圳研究所做了个场测助手,这是一款方便收集性能,定位bug一体化的工具。


图片

 APP性能指标获取手段 


下面是几个简单方便的方法,可以让你自己写脚本来获取各种性能指标。


4.1 Android系统指标获取


CPU


CPU的测试方法分为几类


  • 使用Android提供的view plaincopy在CODE上查看代码片派生到我的代码片

  • adbshell dumpsys CPUinfo |grep packagename >/address/CPU.txt来获取;

  • 使用top命令view plaincopy在CODE上查看代码片派生到我的代码片

  • adbshell top |grep packagename>/address/CPU.txt来获取。


内存


内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性。当然关于内存测试,在这里我们需要引入几个概念:空闲状态、中等规格、满规格。


空闲状态指打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲;中等规格和满规格指的是对应用的操作时间的间隔长短不一,中等规格时间较长,满规格时间较短。


内存测试中存在很多测试子项,清单如下:


  • 空闲状态下的应用内存消耗;

  • 中等规格状态下的应用内存消耗;

  • 满规格状态下的应用内存消耗;

  • 应用内存峰值;

  • 应用内存泄露;

  • 应用是否常驻内存;

  • 压力测试后的内存使用。


电量


电量测试主要从以下几个方面入手进行测试:


  • 测试手机安装目标APK前后待机功耗无明显差异;

  • 常见使用场景中能够正常进入待机,待机电流在正常范围内;

  • 长时间连续使用应用无异常耗电现象。


电量测试的方法分为软件测试和硬件测试两类。


软件测试又分为两类:第一类采用市场上提供的第三方工具,如金山电池管家之类的;第二类就是自写工具进行,这里一般会使用3种方法:

第一种基于Android提供的PowerManager.WakeLock来进行;

第二种比较复杂一点采用公式:功耗的计算=CPU消耗+Wakelock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗;

第三种通过adbshell dumpsys battery来获取。


硬件测试,一般使用万用表或者功耗仪进行测试,使用功耗仪测试的时候,需要制作假电池来进行的,有些不能拔插电池的手机还需要焊接才能进行。


启动时长


关于应用的启动时间的测试分为三类:


  • 第一类:首次启动 --应用首次启动所花费的时间;

  • 第二类:非首次启动 --应用非首次启动所花费的时间;

  • 第三类:应用界面切换--应用界面内切换所花费的时间。


那么如何来做启动时间的测试呢,一般我们分为2类:一类为使用软件来测试,一类为使用硬件来测试。


首先我们说说软件测试的方法,可能大部分人都比较通晓使用Android 提供的DisplayManager来获取activity的启动时间。通过日志过滤关键字 Displayed来过滤所有activity所打印的,记录日志通过。


帧率


GPU这个词对于PC性能测试者来说并不陌生,而今3Dmax,安兔兔之类的第三方软件让GPU在移动端性能测试领域家喻户晓,但对于APP内的GPU该如何来测试呢?首先我们引入几个名词:过度绘制、帧率、帧方差。


过度绘制是指界面显示的activity套接了多层导致的结果。帧率是指屏幕刷新率。帧方差是指屏幕刷新帧间隔方差。


对于GPU的测试主要包括以下几个测试子项:界面过度绘制、屏幕滑动帧速率、屏幕滑动平滑度。


对于过度绘制的测试主要通过人工进行测试,打开开发者选项中的显示GPU过度绘制来进行测试(PS:只有Android4.2及以上的版本才具备此功能),验收的标准为:

  • 不允许出现黑色像素;

  • 不允许存在4x过度绘制;

  • 不允许存在面积超过屏幕1/4区域的3x过度绘制(淡红色区域)。


对于屏幕滑动帧速率的测试主要有两种方法。以软件测试为例:


  • 手机端需打开开发者选项中的启用跟踪后,勾选 Graphics 和 View;

  • 启动SDK工具Systrace插件,勾选被测应用,点击Systrace插件,在弹出的对话框中设置持续抓取时间,在tracetaps下面勾选gfx及view选项;

  • 通过节拍来进行滑动或者扫动滑动界面,帧率数据会保存到默认路径下,默认名称为 trace.html;

  • 将trace.html文件拷贝到linux系统下,通过命令进行转换,生成trace.csv文件。


网络流量


这里所指的网络流量测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试。流量测试,同样需要引入几个名词:

  • 中等负荷:应用正常操作;

  • 高负荷:应用极限操作。


流量测试包括以下测试项:

  • 应用首次启动流量提示;

  • 应用后台连续运行2小时的流量值;

  • 应用高负荷运行的流量峰值。


应用中等负荷运行时的流量均值测试一般都是应用软件来进行的,这里我们一般分为2类:

一类是采用市场提供的第三方工具来进行测试,如流量宝之类的,第二类是自行研发工具进行测试。


自行研发工具进行测试一般包含通过tcodump抓包,或通过wireshake直接读取包信息来获得流量。


通过adbshell dumpsys package来获取被测应用的uid信息,在未操作应用之前,通过查看adbshell cat /proc/uid_stat/uid/tcp_rcv

adbshell cat /proc/uid_stat/uid/tcp_snd


获取到应用的起始的接收及发送的流量;再操作应用后,再次通过上述命令获取到应用的结束时接收及发送的流量,通过相减即得到应用的整体流量消耗.


4.2  IOS系统指标获取


对于iOS系统,只需要一个装有xcode的mac电脑,便可相对容易地获取上述指标。xcode的最新版本是7.0。


这里推荐三个性能测试工具。

Instruments。这是mac苹果自带的工具,里面有很多模板,选择不同的系列模板就可以监听手机APP性能了。但是要注意,没越狱的机器必须注册开发者证书,或者拿到APP企业证书,这样xcode才能启动APP进行性能监控,也就是说被测的APP必须有源代码才行。

GT。这是腾讯开发的一款APP,但是也得在源码层面嵌入GT的SDK。

SmallAPPle是百度测试部推出的IOS自动化测试工具,已经开源,网址是https://github.com/hyxbiao/smallAPPle


旨在提供一套完整的IOS自动化测试解决方案,提供针对IOS APP的功能和性能测试,同时提供类似Android adb、重签名、instruments结果解析、录制回放等工具集。


SmallAPPle通过一键式的执行方式,自动完成APP重签名、安装、测试、性能采集(包括CPU、内存、流量等)、Crash检测和结果报告等工作。其特点包括:


  • SmallAPPle致力于以最简单的方式,最小的代价为用户提供服务;

  • 支持非越狱设备;

  • 不依赖源代码;

  • 支持APPstore或者第三方下载的APP安装测试;

  • 完全的命令行模式。

 

图片

扩展阅读:案例榜单|1号店用户画像系统偏好算法和Storm优化实践

案例榜单|Hadoop生态系统在广告大数据技术的应用及选型

效率翻倍!百度外卖物流智能调度系统优化实践

架构升级:组件化可扩展平台架构迭代演进方式

缺人缺钱缺资源的小团队,如何搭建电商智能推荐机器学习系统

APP运行流畅到让大象跳舞!微软是怎么做性能优化的?

敏捷典范!1号店自动化发布系统部署流程(附流程图)

10万台服务器怎么实现自动化运维?腾讯梁定安解密织云系统!(附架构图)

完全云化的电商平台!美团云网络架构演进流程

让加载条消失!使用STF测试页面打开速度的方法

靠外包和借调搭建的新团队,效率却比成熟团队高2倍!

万字干货|淘宝性能自动化测试平台搭建过程

互联网下半场,产品创新要遵循的“望闻问切”之法

以银行系统为例,解析开放式云平台如何保障数据安全?

蚂蚁金服从0-1-100构建高效异地互联网研发团队的3大观点5大原则

猿题库基于MVVM和MVC搭建架构的7点创新策略(附代码)

你还在过度测试吗?一个模型和两张checklist教你用测试策略做刚刚好的测试!

TO B产品的用户需求,该如何发现和满足?

社交产品从0到300万日活,Linkedin China技术主管分享架构迭代全过程

腾讯专项性能测试用动态检查告别重复劳动

如果开放运营商的数据宝藏,大数据江湖谁称霸主?

必须O宕机!超过500G数据的财务系统云化转型全过程

百度第三方舆情系统,发现用户需求的老中医!

中兴敏捷转型的2个核心3个阶段和4个故事

耦合多/版本多/不灵活,当当网架构(17万行代码)优化实践!

从架构细节到实施过程,如何基于Ceph做云存储设计

DFSS理论:新产品开发前,用“概念工程”验证能否成为爆款!

学会“面向对象”做需求分析,再也不怕临时改需求

从组建团队开始,LinkedIn如何在3个月内开发出一款成熟产品

从软件设计的7次发展看如何通过设计降低代码维护成本

用12年数据建模经验告诉你如何3步走解决建模问题

从微软Azure SQL云服务说起,大数据在运维中如何应用

在2英寸屏幕里如何做好用户体验设计?

Thought Works的10个案例教你打造团队文化

千亿成交额背后,京东技术团队的敏捷转型模式

当当分布式作业框架elastic-job解密(已开源)

我们该怎么给DevOps下个定义?

用友钱勇:TO B的软件服务创新的5点启示

范冰:增长黑客在小型创业团队中的成功案例复盘

从腾讯游戏的成功看产品经理如何尊重用户反馈

Docker在云平台搭建中的实践应用

从Hulu架构看短视频平台如何解决用户终端适配

魅族应用商店服务器端架构实践

架构师必须知道的架构发展过程及趋势

征稿


寻找100个年度最具价值的实践案例

我们只要案例干货,拒绝广告


成为特约作者,你将:

◆ 连接100名年度经验与增长值TOP100的研发精英

◆ 提前入围「壹佰案例」年度最优案例榜单

◆ 案例整理成册,出版发行图书

◆ 成为msup客座教练

◆ 以观察员身份受邀出席TOP100全球软件案例研究峰会

◆ 所在公司享有msup活动优惠


有意者联系壹佰案例主编Cynthia

电话:18822091835

微信:EF0815

邮箱:fang.cheng@msup.com.cn

图片

更多“壹佰案例”详情请移步官网查看↓↓↓



继续滑动看下一个
壹佰案例
向上滑动看下一个