【Android测试】【第一节】性能——CPU

 版权声明:本文出自胖喵~的博客,转载必须注明出处。html

    转载请注明出处:http://www.cnblogs.com/by-dream/p/5065083.htmllinux

 

 

前言shell


  原本打算写彻底部的自动化测试以后再写性能测试的东西,可是想了想,以为这两个其实也能够并行的来完成,因而今天打算开个头,开始性能测试的介绍。服务器

  须要强调的是这里介绍的都是终端的性能,也就是Android设备的性能,不是客户端并发以后服务器的性能数据,这一点必定要清楚。在这个系列里面,我会介绍cpu、cpu时间片、电量、内存、FPS、流畅度以及流量和抓包,由于我提到这些指标GT均可以采集,所以在个人讲解里,会配合GT一块儿来说。网络

 

 

GT简介并发


  首先介绍一下什么是GT。工具

  GT是由腾讯无线研发部专项测试组研发的一款性能测试工具,官方网址是:http://gt.qq.com/index.html ,它的宗旨就是:随身调试,仅需一部手机便可以完成性能数据的采集、日志的查看、网络数据包抓取等。Android的版本,除了使用GT的App能够完成性能数据采集外,App自己还支持了广播调用的方法,更加方便咱们调用它来直接取数据了,所以在这里推荐这个工具给你们使用,能够减小咱们不少重复获取数据的工做量。性能

 

 

CPU采集学习


  这里主要介绍GT这个工具的采集方法。测试

  一、选取你的被测应用:  

  若是是测App的性能的话,那么第一步固然是选取你的被测应用(这里咱们仍是以QQ为例)。

  

图1                                                    图2                                                    图3

  经过图3咱们能够看到,咱们要测的应用QQ,已经被咱们选中了,注意QQ图标的右边的“com.tencent.moblieqq”就是QQ的 package name(包名),因此之后若是遇到一个App不知道它的包名,咱们就能够借助GT来获得它的包名了。

  二、勾选你的测试项:

  选择完被测App后,界面的下发就是要测试的几个指标项:

图4

  前两项是内存指标,后面咱们介绍;其余指标中的第一项就是CPU,第二项Jiffes指的是CPU时间片,后面也会介绍。Net指的的流量,后面仍然会介绍,由于本次咱们以采集QQ操做过程当中CPU为例,所以咱们须要勾选 CPU 这项:

  

  三、进入“参数”tab页面:

  点击下方的 “参数” 按钮便可进入该页面。

  位置2的CPU表明的是整个手机当前的CPU使用率占比;位置3表明的是当前应用占整个手机的CPU的百分比(p.s.若是发现你没有位置3的内容,那么须要打开你的QQ便可。);当勾选了位置2或者位置3后面的复选框以后,点击位置1的红色按钮,采集就开始了。注意:这里位置3中包含两条内容,这是由于QQ这个App启动后一共有两个进程,一个是后台进程即PCP0,另外一个是咱们看到的QQ界面,它是一个前台进程,通常咱们关注的就是这个应用的前台进程。

  四、开始采集

  点击上面提到的位置1小红点后,就开始采集了。默认每1秒钟采集一次,采集的总次数能够在界面上看到:

  点击PCP1,能够进入采集的详情页,该页主要观察一个平均值和总体曲线的一个走势:

  五、保存

  在详情页面,咱们点击右上角保存的图标,便可完成保存。固然退到上一页保存的话,保存的就是整个采集的数据。

  保存的的文件 放在 /sdcard/GT/GW/com.tencent.mobileqq/qq/ 的目录下:

  导出来放到电脑上,用excel打开后就是这样的形式:

  这就是GT采集一个App CPU的整个过程。

 

 

shell获取


  因为 Android 系统是基于 linux 内核开发的,所以咱们也可使用shell 中的top命令来获取当前手机的CPU占用和某个App的占用。

  在 shell 中输入 top 便可开始监控当前手机的CPU,咱们看一下效果:

  因为输入了top后,会不断的进行刷新,所以咱们就使用  “ top -n 1 ” 让其只显示一次结果就退出,咱们看一下一次top命令后都生成了些什么:

  第一行分别表明的是:

    User   用户空间占用CPU的百分比
    System  内核空间占用CPU的百分比
    IOW   等待占用CPU的百分比
    IRQ    中断占用CPU的百分比
    因此将这四个值加在一块儿就是当前手机的CPU占用的百分比

  若是咱们想知道某个应用所占的百分比,例如qq,那么能够看com.tencent.map那一行的第三列,就是当前这个应用在这一时刻所占系统的百分比了。 

 

 

一个Bug


  学习了上面的两种方法以后,咱们就能够采集App在指定场景下的CPU占用率了,可是我常常发现CPU的百分比是0%的状况,有的时候是由于App确实在后台,可能消耗的特别少,可是有的时候即便在前台它也是0%的状况。固然最终我知道了这是一个bug,咱们来看看究竟怎么回事。下面是我采集的几组数据:

  图中一共6组数据,用红框框住的分别是第一组和第四组,每组数据两行内容,第一行上面都提到了,再也不解释,下面这一行表明的是各个状态的cpu时间片(一般也用Jiffes这个概念来讲明),咱们系统真正在计算CPU的时候就是:CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jiffies来表示。而这个总的Jiffies就是咱们这里看到的第二行的和。

  咱们能够看到第一组数据的Idle的值很是大,致使最终值很大,所以在1646855作为分母去计算一个数的时候,获得的值就会特别的小,所以就约等于为0了;第四组数据呢,是因为Idle是一个很是大的负值,所以致使最终的和变成了负值,那么最终计算的商确定是负值,可是因为CPU占用不多是负值,所以当出现负值的时候,系统也就默认为0了。而Idle的值之因此这么异常,是由于Android 4.*系统在四核手机上的一个bug,在5.0系统上谷歌修复了这个bug。

  那么就会有一个问题,若是咱们非要在4.*的手机上看CPU的性能呢呢?那么请看下一篇 cpu时间片。