写在前面:

  测试一道,博主接触的也是皮毛而已,没有接触过rom的测试,下边所说的都是博主接触过的app的性能测试。我只谈方法,少提概念。各位大神不喜勿喷。

概述

  除启动时间外,我们应该做的测试,可能需要在几种状态下来验证app的性能情况。具体的业务形态也可能会更加的复杂,请根据具体的业务来决定需要做什么样的测试。

  1、app空闲状态。

  2、app正常使用状态。

  3、app压力状态下(正常快速操作)的状态。

  4、monkey(随机无须)操作状态下的性能情况。

1、启动时间

  启动时间一般我们会测试三种情况。

    ·首次启动

    ·非首次启动

    ·activity 切换所消耗的时间

  测试方法一般使用两种:

  1)、程序内部打点到logcat,手动操作后获取log日志,来获取相应的时间。

  2)、使用adb 命令来操作,在操作的前后分别记录消耗的时间。(由于adb 操作可能会有延时等可能,此方法并不是很准确)

  ps. 还有一种方式是采用告诉摄像机的方式来做,由于本人没有接触过,不做过多说明,感兴趣的可以自己查一查怎么来做。

2、cpu和内存

  1)、获取cpu数据

adb shell dumpsys cpuinfo | grep $package_name

输出格式为;

45% TOTAL: 18% user + 20% kernel + 6.2% iowait + 0.2% softirq

可取total得值作为整体cpu利用率。

 2)、获取内存数据

adb shell dumpsys meminfo | grep $package_name
或者
adb shell dumpsys meminfo $package_name

直接dumpsys meminfo $package_name 可以看到比较完整的堆,线程,java等级别的内存数据,pss 可以作为内存的参考。

  3)、使用top 同时获取cpu和内存,-d 参数指定采样数据的间隔时间。

adb shell top -d 2
输出:
PID PR CPU% S  #THR     VSS     RSS PCY UID      Name

名词解释:

  • VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
  • RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
  • PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
  • USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

  一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

  可以看到,top 命令取出的内存对应是vss 和 rss,其中rss会比pss稍大,如果没有特别严格的要求,只是对比内存是否泄漏上涨等问题,rss也可以作为参考。

3、流量

  1)、通过tcpdump抓包,然后wireshark 解包信息,来获取流量数据。

  2)、通过adb 命令来获取,先获取应用的pid,然后通过/proc/uid_stat/uid/下的文件来读取流量值。此方式会有rom兼容性问题,并不是所有的文件都可以找到这两个文件。

adb shell dumpsys $package_name
adb shell cat /proc/uid_stat/uid/tcp_rcv -- 下载流量
adb shell cat /proc/uid_stat/uid/tcp_snd -- 上传流量

  由于tcp_rcv, tcp_snd 的值是一个累加的值,想要获取两次操作间消耗的流量,可以在操作前和操作后分别获取,差值即为期间消耗的流量。也可以每个一段时间做采样,来获取整个过程中的使用情况。

4、帧率

  帧率一定程度上反应的是app在使用中的流畅程度,理想情况是每秒60帧。

  1)、在开发者选项中有个“ GPU呈现模式分析(Profile GPU rendering,计算adb shell dumpsys gfxinfo中的呈现时间)”功能,在开启这个功能后,系统就会记录保留每个界面最后128帧图像绘制的相关时间信息。在开启这个功能后,重新启动APP,滑动页面然后执行adb命令。

adb shell dumpsys gfxinfo $package_name

输出结果中包含这部分数据

Draw Process Execute
1.30 1.25 0.53
0.63 0.62 1.64
0.24 0.51 0.44
0.25 1.76 0.40
0.25 1.55 0.43
0.25 0.53 0.37
0.49 1.51 2.12

Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧。

  2)、通过SurfaceFlinger, 这种方式还没有研究过,过段时间再来补充

 adb shell dumpsys SurfaceFlinger 

5、电量

  对于电量的测试没有什么特别好的方式,可以选择使用物理设备来测试电池的电量情况。

  对于android 5.0 以上的系统,adb命令可以支持获取电量信息。

adb shell dumpsys battery

  输出内容如下:

  AC powered: false
USB powered: true
Wireless powered: false
status: 1 #电池状态:2:充电状态 ,其他数字为非充电状态
health: 2
present: true
level: 55 #电量: 百分比
scale: 100
voltage: 3977
current now: -335232
temperature: 335 #电池状态
technology: Li-poly

  如果是采用usb连接手机的话,(手机其实一直是处于充电的状态),这样测试出来的数据也不会很准确。

  如果各位有什么好办法的话,大家可以一起探讨一下。

Android 性能测试的更多相关文章

  1. 腾讯优测优分享 | Android性能测试工具化实现

    腾讯优测专业的移动云测试平台,自动化测试提供性能测试数据,云真机实时输出性能数据,让测试更简单! 1.Android性能测试介绍 提到Android性能测试,我们总免不了俗地要首先介绍下Android ...

  2. Android性能测试工具(一)之Emmagee

    Android性能测试工具(一) 之Emmagee Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具. 支持SDK:Android2.2以及以上版本 Emm ...

  3. 《Android 性能测试初探》

    移动测试站点推荐: https://testerhome.com/ 专项相关帖子推荐: <Android 性能测试初探>合集 移动无线应用专项测试浅谈 公开课: [腾讯课堂]Testerh ...

  4. Android性能测试

    FPS和流畅度 FPS 1.dumpsys SurfaceFlinger –latency shell 脚本通过 dumpsys SurfaceFlinger --latency 数据计算 FPS 和 ...

  5. 【腾讯开源】Android性能测试工具APT使用指南

    [腾讯开源]Android性能测试工具APT使用指南 2014-04-23 09:58 CSDN CODE 作者 CSDN CODE 17 7833 腾讯 apt 安卓 性能测试 开源 我们近日对腾讯 ...

  6. 使用traceview进行Android性能测试(转)

    使用traceview进行Android性能测试(转) 使用traceview进行Android性能测试  原文链接:http://www.cnblogs.com/Android-and-androi ...

  7. Android性能测试——Allocation Tracker(Device Monitor)

    Android性能测试--Allocation Tracker(Device Monitor) Allocation Tracker 能做什么? 追踪内存分配信息,按顺序排列,这样我们就能清晰看出来某 ...

  8. Android 性能测试——Heap Viewer 工具

    Android 性能测试--Heap Viewer 工具 Heap Viewer能做什么? 实时查看App分配的内存大小和空闲内存大小 发现Memory Leaks Heap Viewer使用条件 5 ...

  9. Android 性能测试——Memory Monitor 工具

    Android 性能测试--Memory Monitor 工具 Memory Monitor能做什么? 实时查看App的内存分配情况 快速判断App是否由于GC操作造成卡顿 快速判断App的Crash ...

  10. Android 性能测试优质实践汇总

    这两天把testerhome上的关于Android 性能测试的精品文章看了一遍,很有收获,学习到了Android 性能测试该关注的一些细节.我所说的“精品”是指对我自己有启发的文章,可以被自己运用起来 ...

随机推荐

  1. MYSQL数据库忘记密码

    1.忘记密码解决办法 Windows下的实际操作如下 1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysqld --skip-grant-tables回车 ...

  2. Spark机器学习读书笔记-CH04

    [root@demo1 ch04]# spark-shell --master yarn --jars /root/studio/jblas-1.2.3.jar scala> val rawDa ...

  3. VIM神器打造Javascript开发环境

    http://xuyufish.com/vim%E7%A5%9E%E5%99%A8%E6%89%93%E9%80%A0javascript%E5%BC%80%E5%8F%91%E7%8E%AF%E5% ...

  4. 作业七:团队项目——Alpha版本冲刺阶段004

    今日进展:我们的扫雷基本界面已经差不多了,准备开始编写内部代码. 今日安排:做好界面,准备开始代码编写.

  5. oracle 归档日志

    归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档 ...

  6. c++ 之 编译期多态&运行期多态

    编译时多态:程序运行前发生的事件 —— 函数重载.运算符重载 .模板  ——静态绑定 运行时多态:程序运行时发生的事件 —— 虚函数机制——动态绑定 template<typename T> ...

  7. STM32中断管理函数

    CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256 级的可编程中断设置.但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分. STM32 ...

  8. 添加网络打印机的步骤(xp和win2008)

    1.如题,设置好打印机去的ip地址和子网掩码等信息. 2 .xp不像其他新的系统那么好用那么智能...只能慢慢来 如果是xp,注意,请添加网络打印机的时候选  :添加本地打印机,,记得哦 然后如图 然 ...

  9. SharePoint Framework 配置Office 365开发者租户

    博客地址:http://blog.csdn.net/FoxDave 你需要一个Office 365开发者租户来使用预览版SharePoint Framework构建和发布客户端web部件.你的租户 ...

  10. iOS进阶之多线程

    多线程 注意:iOS关于UI的刷新和添加必须在主线程中操作! pthread的创建方法: pthread_t pthread; //第一个参数 线程指针 //第二个参数 线程的一些属性 //第三个参数 ...