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

时间:2021-07-11 04:09:39

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

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

前言


  本来打算写完全部的自动化测试之后再写性能测试的东西,但是想了想,觉得这两个其实也可以并行的来完成,于是今天打算开个头,开始性能测试的介绍。

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

GT简介


  首先介绍一下什么是GT。

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

CPU采集


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

  1、选取你的被测应用:  

  如果是测App的性能的话,那么第一步当然是选取你的被测应用(这里我们还是以QQ为例)。

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

图1                                                    图2                                                    图3

  通过图3我们可以看到,我们要测的应用QQ,已经被我们选中了,注意QQ图标的右边的“com.tencent.moblieqq”就是QQ的 package name(包名),所以以后如果遇到一个App不知道它的包名,我们就可以借助GT来得到它的包名了。

  2、勾选你的测试项:

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

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

图4

  前两项是内存指标,后面我们介绍;其他指标中的第一项就是CPU,第二项Jiffes指的是CPU时间片,后面也会介绍。Net指的的流量,后面仍然会介绍,因为本次我们以采集QQ操作过程中CPU为例,因此我们需要勾选 CPU 这项:

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

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

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

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

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

  4、开始采集

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

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

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

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

  5、保存

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

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

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

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

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

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

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

shell获取


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

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

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

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

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

  第一行分别代表的是:

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

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

一个Bug


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

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

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

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

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

【Android测试】【第一节】性能——CPU的更多相关文章

  1. Android事件处理第一节(View对Touch事件的处理)

    http://ipjmc.iteye.com/blog/1694146 在Android里Touch是很常用的事件,尤其实在自定义控件中,要实现一些动态的效果,往往要对Touch进行处理.Androi ...

  2. android课程第一节(TextView控件使用)

    TextView控件使用 一.TextView基本使用(创建方式) 1.在程序中创建TextView对象 如下代码: @Override protected void onCreate(Bundle ...

  3. Python3 Selenium自动化web测试 ==> 第一节 起始点之Python单元测试框架 unittest

    前置步骤 Python版本:3.6.4 selenium版本:3.11.0 >>> import selenium >>> help(selenium) IDE:P ...

  4. 【Android测试】【第二节】性能——CPU时间片

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5143192.html 前言 第一节讲CPU的时候留下了一个 ...

  5. 【Android测试】【第一节】ADB——初识和用法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/4630046.html 写在前面的话 感觉自己进入Andr ...

  6. android内部培训视频_第一节

    声明:本视频为公司内部做android培训时录制的,无任何商业目的.同时鉴于水平有限,可能不符合您的需求,放在这里的目的是提供给公司同事下载,作为培训的一个记录,也作为一个系列教程的自我督促完成的理由 ...

  7. 我的第一节Android课

    我的第一节安卓课程,今天非比寻常的一天,我开始了我程序猿之路的第一节安卓课程,安卓课程只是我的一个兴趣班,我的本专业是java开发,因为喜欢做一个属于自己的一个手机APP,就选多个一样技能,毕竟十八般 ...

  8. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

  9. 【Android测试】【第九节】MonkeyRunner—— 初识

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html 不得不说两句,过了这么久才再次更新博 ...

随机推荐

  1. from collections import OrderedDict

    在python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的是, collections模块为我们提供了OrderdDict,当你要获取一个有序的字典对象 ...

  2. 转载《Android Handler、Message》

    之前也是由于周末通宵看TI3比赛,一直没找到时间写博客,导致已经有好久没更新了.惭愧!后面还会恢复进度,尽量保证每周都写吧.这里也是先恭喜一下来自瑞典的Alliance战队夺得了TI3的冠军,希望明年 ...

  3. 月考(cogs 1176)

    [题目描述] 在上次的月考中Bugall同学违反了考场纪律还吃了处分,更可气的是在第二天的校会时 间学校就此事做了全校通报. 现已知在当天校会时间有总共N个同学听到了有关Bugall的处分决定.  B ...

  4. input 字符限制

    1,文本框只能输入数字代码(小数点也不能输入): onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste=&q ...

  5. 2014 年10个最佳的PHP图像操作库--留着有用

    Thomas Boutell 以及众多的开发者创造了以GD图形库闻名的一个图形软件库,用于动态的图形计算. GD提供了对于诸如C, Perl, Python, PHP, OCaml等等诸多编程语言的支 ...

  6. OA学习笔记-010-Struts部分源码分析、Intercepter、ModelDriver、OGNL、EL

    一.分析 二. 1.OGNL 在访问action前,要经过各种intercepter,其中ParameterFilterInterceptor会把各咱参数放到ValueStack里,从而使OGNL可以 ...

  7. 洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  8. go goroutine

    进程和线程 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的 一个独立单位. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更 小的能独立运行的基本单位. 一个进程可 ...

  9. java类加载器 Bootstrap、ExtClassLoader、AppClassLoader的关系

    1.Bootstrap. ExtClassLoader. AppClassLoader是java最根正苗红的类加载器.2.Bootstrap是本地代码编写的(例如C), ExtClassLoader. ...

  10. gtest简介及简单使用

    本文摘自 gtest简介及简单使用 ,在此感谢作者的分享. 具体使用教程 _______________________________________________________________ ...