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 条命令可以获取到应用的结束的接收及发送的流量,通过相减及得到应用的整体流量消耗

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

时间: 2024-08-23 09:07:57

Android性能测试初探,合集粘贴版,转自Testerhome,卡斯著的相关文章

《Android 性能测试初探》

移动测试站点推荐: https://testerhome.com/ 专项相关帖子推荐: <Android 性能测试初探>合集 移动无线应用专项测试浅谈 公开课: [腾讯课堂]Testerhome 公开课 测试工具 : 场次工具: GT http://gt.tencent.com/download.html Emmagee

Android 性能测试初探(五)

书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标APK前后待机功耗无明显差异 常见使用场景中能够正常进入待机,待机电流在正常范围内. 长时间连续使用应用无异常耗电现象 功耗测试的方法分为两类,一类为软件测试,一类为硬件测试 我们先说说软件测试,这里我们会聊聊一些DIY的思路,软件测试一般分为2类, 第一种采用市场上提供的第三方工具,如金山电池管家

计算机视觉与模式识别代码合集第二版two

Topic Name Reference code Image Segmentation Segmentation by Minimum Code Length AY Yang, J. Wright, S. Shankar Sastry, Y. Ma , Unsupervised Segmentation of Natural Images via Lossy Data Compression, CVIU, 2007 code Image Segmentation Normalized Cut

计算机视觉与模式识别代码合集第二版three

计算机视觉与模式识别代码合集第二版three     Topic Name Reference code Optical Flow Horn and Schunck's Optical Flow   code Optical Flow Black and Anandan's Optical Flow   code Pose Estimation Training Deformable Models for Localization Ramanan, D. "Learning to Parse I

Android 性能测试初探(六)

书接前文 Android 性能测试初探之功耗(五) 本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速.弱网之类的测试,但本系列文章都不去一一探讨了 流量测试,同样需要引入几个名词 中等负荷:应用正常操作 高负荷:应用极限操作 流量测试包括以下测试项: 应用首次启动流量提示 应用后台连续运行 2 小时的流量值 应用高负荷运行的流量峰值 应用中等负荷运行时的流量均值 流量测试一般都是用软件来进行的,这里我们一般分为2类: 采用市场提供的第三方

android 图像处理系列合集

为了便于大家对滤镜算法的学习,以后发布的图像处理滤镜系列帖子会在这里汇总,本人第一次写合集,写得不好的地方大家请见谅,手头上虽然有一些滤镜的算法,但是大多不是android版的,教程里的代码大多是我借鉴其他语言的算法转换而成的,效率上还存在优化的空间,大家可以自行优化.有些网友说代码能看懂,但是里面的某些数值不知道是怎么计算出来的,说实话有些数值我不查资料我也不是很清楚,但是当我需要知道的时候我也会慢慢查阅算法的核心思想,很多参数由此而来.同时也希望大家养成不懂就查的习惯. android 图像

最新最全的 Android 开源项目合集

原文链接:https://github.com/opendigg/awesome-github-android-ui 在 Github 上做了一个很新的 Android 开发相关开源项目汇总,涉及到 Android 开发的方方面面,基本很全了.对 Android 开发感兴趣的欢迎 Star ,后续也会定期维护更新这个列表.当然,你也可以去 opendigg 上查看. -- 由欧戈分享 awesome-github-android-ui 是由OpenDigg整理并维护的安卓UI相关开源项目库集合.

Android 自定义View合集

自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/Mr-XiaoLiang 自定义控件三部曲 http://blog.csdn.net/harvic880925?viewmode=contents Android 从0开始自定义控件之View基础知识与概念 http://blog.csdn.net/airsaid/article/details/5

Android游戏源代码合集(主要是AndEngine和Libgdx的)

近期在网络上看到有网友抱怨Android游戏源代码找不到,所以小弟收集了一些AndEngine和Libgdx的游戏源代码,以Eclipseproject的形式配置好环境,再陆续发出(某引擎避嫌,不在此列). 虽说这些游戏,主要是由Libgdx与AndEngine开发的源代码组成.但其实,能算游戏的,开源的,举凡有点价值的Android游戏源代码,小弟也会陆续收集(比方Replicaisland没用不论什么引擎,可代码有价值,所以这次也放进来了),更会在博客中一一给出. 只是,有两类游戏不在此列,