• Android性能测试初探,合集粘贴版,转自Testerhome,卡斯著


    Android 性能测试,跟 pc 性能测试一样分为客户端及服务器,但在客户端上的性能测试分为 2 类:

    • 一类为 rom 版本的性能测试
    • 一类为应用的性能测试

    对于应用性能测试,包括很多测试项,如启动时间、内存、CPU、GPU、功耗、流量等。 但针对 rom 版本的性能测试,一般关注功耗。

    先说说应用的性能测试,对于启动时间、内存、cpu 测试大家一般都使用外部提供的第三方工具来辅助测试,如GT、安测试等、这些工具的原理都是基于调用 android 底层的一些 api 来获取到测试所用到的值,当然我们也可以采用其他方法,如使用 android 本身提供的一套 adb 即可完成上述测试。

    对于 GPU、功耗、等测试来说,用第三方工具测试得到的数值一般都不是很准确,这个时候我们需要引入硬件来进行测试了,GPU 可以采用高速相机来进行测试,功耗可以使用万用表或安捷伦电源仪来进行测试(ps:有硬件动手能力的可以DIY一个小板进行)

    再说说 rom 版本的性能测试,rom 版本一般就关注功耗测试,不过 rom 版本的功耗测试跟应用的功耗测试会有所差异,当然只是用例设计方面的差异,工具仍然采用安捷伦电源仪进行

    看到这里,大家应该对于移动客户端方面的性能测试有了一个大概的印象了,后续我会继续探讨如何自己创建工具进行性能测试,预知下文,请听下文分解

    ---------------------------------------------------------------------------------------

    首先我们来说说启动时间。关于应用的启动时间的测试,分为三类:

    1. 首次启动 --应用首次启动所花费的时间
    2. 非首次启动 --应用非首次启动所花费的时间
    3. 应用界面切换--应用界面内切换所花费的时间

    那么如何来做启动时间的测试呢,一般我们分为2类,一类为使用软件来测试,一类为使用硬件来测试,首先我们说说软件测试的方法,可能大部分人都比较 通晓使用 android 提供的 DisplayManager 来获取 activity 的启动时间吧,在这里我简单说下如何通过批处理来 DIY

    • 通过日志过滤关键字 Displayed 来过滤所有 activity 所打印的,记录日志通过 adb logcat>/address/logcat.txt 然后使用 find “Displayed” /address/logcat.txt>/newaddress/fl.txt
    • 通过 activity 名来过滤获取所测应用 find “ActivityName” /newaddress/fl.txt>/newaddress/last.txt
    • 通过计算 activity 最后剩余的时间之和即可(这里可以使用 excel 表格自动相加也可以使用算法,我就不详细介绍了)

    除了 DisplayManager 的打印时间方法后,还有通过关注 am 的启动时间及 DisplayManager 打印的结束时间,通过两者时间之间想减也能得到应用的启动时间,还有可以通过 PowerManager 来计算打印时间,在应用启动的时候,我们可以关注 ActivityManager-Launch 的变化来计算应用的启动时间,还有可以通过截图统计启动时间,对于自研应用,最效率的莫过于直接在程序中插入打印时间的节点了

    说完了软件测试的方法,接下来我们聊聊硬件测试,这里我们可以使用高速相机或者手机,采用录像的方法把应用启动过程给录制下来,然后通过人工数帧或者程序数帧的方式计算启动时间

    好了,今天就说到这里,下回继续说其他测试项

    ---------------------------------------------------------------------------------------

    今天主聊 CPU内存

    看到这两个名词,做过PC性能测试的就比较熟悉了,同样的性能测试关注点 :)

    首先说说内存,移动端关注的是内存消耗,这个测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性,当然关于内存测试,在这里我们需要引入几个概念,

    • 空闲状态
    • 中等规格
    • 满规格,

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

    接下来我们说说在内存测试中,存在很多测试子项,如下清单所示

    1.空闲状态下的应用内存消耗情况
    2.中等规格状态下的应用内存消耗情况
    3.满规格状态下的应用内存消耗情况
    4.应用内存峰值情况
    5.应用内存泄露情况
    6.应用是否常驻内存
    7.压力测试后的内存使用情况

    说了一些关于内存测试方面的设定,接下来我们聊聊测试方法DIY,现在关于android内存测试的方法基本分为几类,

    1.使用 android 本身提供的 ActivityManager.MemoryInfo() 方法获得(此方法请百度或google)此类第三方工具有如网易的Emmagee、安测试、腾讯的GT等
    2.使用 android 提供的 adb shell dumpsys meminfo |grep packagename >/address/mem.txt 来获取
    3.使用 android 提供的 procrank

    这里我们详解一下 procrank 方法(批处理)

    首先去google获取procrank、procmem、libpagemap.so 三个文件 .

    然后push文件,执行 adb push procrank /system/xbin adb push procmem /system/xbin adb push libpagemap.so /system/lib

    赋权 adb shell chmod 6755 /system/xbin/procrank adb shell chmod 6755 /system/xbin/procmem adb shell chmod 6755 /system/lib/libpagemap.so ,

    在开启工具记录 adb shell procrank |grep packagename >/address/procrank.txt

    剩下的就是整理测试数据了

    关于内存泄露方面的测试,可以通过几个方面来测试

    1.通过monkey压力测试记录内存使用情况,分析数据曲线图及日志情况
    2.通过eclipse上的mat+heap来分析存在内存泄露方面的节点

    说了这么多内存的,我们再来说说CPU方面的,CPU跟内存一样,存在一些测试子项,如下清单所示

    1.空闲状态下的应用CPU消耗情况
    2.中等规格状态下的应用CPU消耗情况
    3.满规格状态下的应用CPU消耗情况
    4.应用CPU峰值情况

    CPU的测试方法分为几类
    1.使用android提供的adb shell dumpsys cpuinfo |grep packagename >/address/cpu.txt来获取
    2.使用top命令 adb shell top |grep packagename>/address/cpu.txt 来获取
    恩,说了大半章了,cpu及内存的测试相信各位应该有所了解了,下回继续聊其他测试项

    -------------------------------------------------------------------------------------------------

    自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对于应用的 GPU 该如何来测试呢,我们先引入几个名词:

    • 过度绘制
    • 帧率
    • 帧方差

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

    对于 GPU 的测试主要包括以下几个测试子项

    1. 界面过度绘制
    2. 屏幕滑动帧速率
    3. 屏幕滑动平滑度

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

    1. 不允许出现黑色像素
    2. 不允许存在4x过度绘制
    3. 不允许存在面积超过屏幕1/4区域的3x过度绘制(淡红色区域)

    对于屏幕滑动帧速率主要有 2 种方法。

    先说说软件测试的方法:

    1.手机端需打开开发者选项中的 启用跟踪 后勾选 GraphicsView
    2.启动 SDK 工具 Systrace 插件,勾选被测应用,点击 Systrace 插件,在弹出的对话框中设置持续抓取时间,在trace taps下面勾选 gfx 及 view 选项,
    3.人滑动界面可以通过节拍来进行滑动或者扫动,帧率数据会保存到默认路径下,默认名称为 trace.html

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

    grep 'postFramebuffer' trace.html   | sed -e 's/.*]W*//g' -e 's/:.*$//g' -e 's/.//g' > trace.csv 
    

    5.用excel打开文件计算得到帧率

    接下来我们说说硬件的方法,这里需要引入高速相机,打开高速相机,开启摄像模式,录制人滑动或者扫动被测应用的视频,再通过人工或者程序数帧的方法对结果进行计算得到帧率

    对于屏幕滑动平滑度的测试,方法如同帧率测试,唯一的差异就是最后的结果计算公式的差异

    GPU的测试目前业界使用的均为硬件来进行,软件测试的数据相较硬件差异较大,对于帧率及帧方差的测试标准而言,需对待不同机型设定不同的标准

    好了,对于GPU方面的测试介绍到此,相信大家对于这块不会陌生了:)

    预知下文,请听下回分解

    ------------------------------------------------------------------------------------------

    前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗

    功耗测试主要从以下几个方面入手进行测试

    • 测试手机安装目标APK前后待机功耗无明显差异
    • 常见使用场景中能够正常进入待机,待机电流在正常范围内.
    • 长时间连续使用应用无异常耗电现象

    功耗测试的方法分为两类,一类为软件测试,一类为硬件测试

    我们先说说软件测试,这里我们会聊聊一些DIY的思路,软件测试一般分为2类,

    • 第一种采用市场上提供的第三方工具,如金山电池管家之类的。

    • 第二种就是自写工具进行,这里一般会使用3种方法

      • 第一种基于android提供的PowerManager.WakeLock来进行,
      • 第二种比较复杂一点,功耗的计算=CPU消耗+Wake lock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗
      • 第三种通过 adb shell dumpsys battery来获取

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

    功耗测试大体就说到这里,大家应该对功耗测试有一些了解了,下文将讲解流量,尽请期待

    -------------------------------------------------------------------------------------------------------

    本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试,但本系列文章都不去一一探讨了

    流量测试,同样需要引入几个名词

    • 中等负荷:应用正常操作
    • 高负荷:应用极限操作

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

    • 应用首次启动流量提示
    • 应用后台连续运行 2 小时的流量值
    • 应用高负荷运行的流量峰值
    • 应用中等负荷运行时的流量均值

    流量测试一般都是用软件来进行的,这里我们一般分为2类:

    1. 采用市场提供的第三方工具来进行测试,如流量宝之类的
    2. 自研工具进行测试

    自研工具进行测试一般包含 2 类方法,

    1. 通过 tcodump 抓包,再通过 wireshake 直接读取包信息来获得流量
    2. 首先获得被测应用的 uid 信息,可以通过 adb shell dumpsys package 来获取 然后在未操作应用之前,我们可以通过查看 adb shell cat /proc/uid_stat/uid/tcp_rcv adb shell cat /proc/uid_stat/uid/tcp_snd 获取到应用的起始的接收及发送的流量,然后我们再操作应用,再次通过上述 2 条命令可以获取到应用的结束的接收及发送的流量,通过相减及得到应用的整体流量消耗

    ----------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    线程中常见的方法
    停止线程方式
    线程间的通信_多生产者多消费者问题_JDK1.5新特性_Lock
    1-为什么java的main方法必须是静态的
    45-机器设计问题(深搜)
    44-最大差值三角形
    23-吝啬的国度(vector+深搜)
    43-八数码
    41-安排车辆
    41-邮差送信(dfs)
  • 原文地址:https://www.cnblogs.com/cologne/p/4102995.html
Copyright © 2020-2023  润新知