一、APP性能维度分析 
  APP类型众多,根据具体类型划分,性能指标的维度和优先级各不相同。视频类APP归属于娱乐游戏型的APP,因此性能测试维度优先级排序为:流畅度、crash、内存、流量、响应时长、功耗、CPU。
       因为Android平台底层是由linux系统改良而来,不同维度的指标绝大部分都可以通过命令获取不同的指标(具体方法可以考加后面工具)。

  在iOS平台上,性能的获取必须使用Xcode里面instruments下的相应组件,不像开源的Android那样灵活,但技术上是可以做到各平台的性能指标获取测试。
 
     二、APP性能测试平台 
  从2012年后,测试平台化、服务化的思路推广到全国各地。各大公司都开发了不同的性能测试平台。比较有代表性的性能测试平台包括:
  ●百度的慕斯(又名移动APP测试业务支撑平台(外部名称MTC:http://mtc.baidu.com));
  ●腾讯的bita;
  ●GT(http://gt.qq.com);
  ●itestin(最老的一个性能和兼容性测试平台http://i.testin.cn/)。
  由于IOS性能测试首先要涉及到签名的破解,所以所有平台一般都是从Android的APP进行切入点先行开发。
 
    三、APP性能测试落地 
  性能测试开展主要分线下性能测试和线上监控测试两大类。
  线下APP性能测试主要依靠传统测试手段和方法,比如PM和QA发起一个性能和竞品对比性能测试,此外,版本大改动、框架迁移,都需要重新进行APP性能测试。线下测试我们用一些比较稳定的平台和工具就足以应付,产品接入即可收集性能指标。百度内部产品线一般都接入了MTC平台;腾讯产品一般都用他们内部开发的GT工具,GT工具不但线下测试比较方便,线上测试性能也不错。
  线上监控测试主要是针对一些动态变化的情况,因为APP测试中关键的一点是场景化测试,即APP必须在特定场合,特别条件才触发某类问题。这时候比较E2E场景case指标功能,才能更精准衡量产品核心性能的能力。
  如我们在二、三线城市特定的网络下,观看某一部特定片源(爱奇艺视频源),并且离线缓存,这时候用到了不同地域网络和调用了爱奇艺在那个城市的server。这是在北京没法做到的场景,虽然可以借助vpn模拟异地场景测试。实际上效果并不良好,因为模拟取决于北京的网络情况,还有vpn不能模拟动态变化网络切换的场景。
  针对线上性能的监控,某公司深圳研究所做了个场测助手,这是一款方便收集性能,定位bug一体化的工具。
 
  四、性能测试工具
        Emmagee、itest、gt
     五、APP性能指标获取手段 
  下面是几个简单方便的方法,可以让你自己写脚本来获取各种性能指标。
  
      ● 4.1 Android系统指标获取
  CPU 测试方法分为几类: 
  使用Android提供的view plaincopy在CODE上查看代码片派生到我的代码片
  adb shell dumpsys CPUinfo |grep packagename >/address/CPU.txt来获取;
  使用top命令view plaincopy在CODE上查看代码片派生到我的代码片
  adbshell top |grep packagename>/address/CPU.txt来获取。
       评判标准:
       一 般情况下,用主流手机玩游戏 20% -40% 的 CPU占用率算是合理的,当然这个数 值随着近年来手机硬件配置的提高,会略微下降如果CPU占用率超过 非常值得我 们去关注了。 
 
  内存
  内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性。当然关于内存测试,在这里我们需要引入几个概念:空闲状态、中等规格、满规格。
  空闲状态指打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲;中等规格和满规格指的是对应用的操作时间的间隔长短不一,中等规格时间较长,满规格时间较短。
       除了第一种情况其它两的主观性很强不是容易区分。正常产品测试时 候,只要验证后台运行( 5~10分钟为宜)和用户持续频繁大量操作(10~15分钟为宜)这两 种情况下就可以了。
       测试方法:
       1.adb shell dumpsys meminfo |grep packagename >/address/CPU.txt来获取;
       adb shell getprop | grep heapgrowthlimit 获取单个 应用程序最大内存  如果 应用内存 值超 过这个值 将会出现 OOM即内存溢出 ,
        2.使用procrank工具:(使用procrank命令必须先获取root权限)
         通过 procrank命令会从左到右依次列出  Vss、Rss 、Pss、Uss,并且对于同一个 app 进程而言,数值依次变小。
  内存测试中存在很多测试子项,清单如下:
  空闲状态下的应用内存消耗;
  中等规格状态下的应用内存消耗;
  满规格状态下的应用内存消耗;
  应用内存峰值;
  应用内存泄露;
  应用是否常驻内存;
  压力测试后的内存使用。
 
  电量      GSam Battery Monitor Pro
  电量测试主要从以下几个方面入手进行测试:
  测试手机安装目标APK前后待机功耗无明显差异;
  常见使用场景中能够正常进入待机,待机电流在正常范围内;
  长时间连续使用应用无异常耗电现象。
  电量测试的方法分为软件测试和硬件测试两类。
  软件测试又分为两类:第一类采用市场上提供的第三方工具,如金山电池管家之类的;第二类就是自写工具进行,这里一般会使用3种方法:
  第一种基于Android提供的PowerManager.WakeLock来进行;
  第二种比较复杂一点采用公式:功耗的计算=CPU消耗+Wakelock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗;
  第三种通过adbshell dumpsys battery来获取。获取到 的是整个系统耗电情况,一 部分是系统本身的耗电 ,一部分是应用耗电。但是通过adb 命令获取电量信息后, 分析 进行困难。
  硬件测试,一般使用万用表或者功耗仪进行测试,使用功耗仪测试的时候,需要制作假电池来进行的,有些不能拔插电池的手机还需要焊接才能进行。
       
  启动时长
 
  关于应用的启动时间的测试分为三类:adb shell am start  –W –n <package>/<activity>获取 启动时间
  第一类:首次启动 --应用首次启动所花费的时间;
  第二类:非首次启动 --应用非首次启动所花费的时间;
  第三类:应用界面切换--应用界面内切换所花费的时间。
  那么如何来做启动时间的测试呢,一般我们分为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。

APP性能的更多相关文章

  1. fir.im Weekly - 如何进行 Android App 性能优化

    关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...

  2. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  3. 25条提高iOS App性能的建议和技巧

    这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or fol ...

  4. 十大技巧优化Android App性能

    无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的. 那么,如何能开发出更高性能的Android App?相信是软 ...

  5. android app性能优化大汇总(google官方Android性能优化典范 - 第1季)

    大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Android系统很有可能无法及时完成那些复杂的界 ...

  6. App性能提升方法

    总体思路:精简请求数 1.css sprit 图像拼合,将所有可拼接的所有图像拼接为一整张图像,然后再利用css中的position定位来处理,降低图片的请求数 2.懒加载:只渲染客户端用户可见区域[ ...

  7. iOS App 性能优化总结

    今天简单总结一些clientapp 优化的方案和方向. 我相信开发一个app大部分团队都能够完毕,可是性能久不一样啦,和我们都写一个冒泡算法一样,我相信每一个人写的冒泡算法都不一样,这些区别就带来了性 ...

  8. 优化Android App性能?十大技巧必知!

    无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件 ...

  9. 极光开发者沙龙 之 移动应用性能优化实践 【一】旧酒新瓶——换个角度提升 App 性能与质量

    旧酒新瓶--换个角度提升 App 性能与质量 主讲人:高亮亮 ---   饿了么移动技术部高级iOS工程师,负责饿了么商家版iOS APP开发,对架构和系统底层有深入研究,擅长移动性能分析,troub ...

  10. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

随机推荐

  1. C#与.NET Framework c#编程语言,和java是一样的。(c#,java) -->javaweb,asp.net

  2. node的cropto加密

    本文转自https://blog.csdn.net/sinat_35670989/article/details/78224214 'use strict' //crypto(kri:pto)意为加密 ...

  3. 软件安装——internal error2503/2502

    安装新的软件后先报internal error 2503,随后报internal error 2502.就是不让我装新的软件,提示说发生严重错误,然后安装失败. Solution for intern ...

  4. Java——常用类(String)

    [常用类]   <1>字符串相关类(String.StringBuffer)   <2>基本数据类型包装类   <3>Math类   <4>File类 ...

  5. input 禁止删除部分文字

    用label和所需的input链接,label部分就是禁止删除的部分.<input type="text" name="city" value=" ...

  6. Leetcode 3. Longest Substring Without Repeating Characters(string 用法 水题)

    3. Longest Substring Without Repeating Characters Medium Given a string, find the length of the long ...

  7. Vim 编辑器学习笔记

    参考资料: 世界上最牛的编辑器: Vim 1

  8. 原生javascript兼容性总结

    1.addEventListener() :方法用于向指定元素添加事件句柄.// Internet Explorer 8 及更早IE版本不支持,Opera 7.0 及 Opera 更早版本也不支持. ...

  9. Maps.newHashMap 和 new HashMap的区别

    区别: (1)Map<String, Object> result = new HashMap<String,Object>(); 这种是java原生API写法,需要你手动加泛 ...

  10. Window7系统安装Ubuntu16双系统

    在电脑上插入ubuntu系统启动盘,之前做好的u盘启动盘,重启计算机,进入BIOS设置界面,设置系统启动为u盘启动,保存后退出.之后进入ubuntu系统安装界面. 在安装界面中选择系统语言,选择安装u ...