Android应用性能测试

Android用户也许会经常碰到以下的问题:

1)应用后台开着,手机很快没电了——应用耗电大

2)首次/非首次启动应用,进入应用特别慢——应用启动慢

3)应用使用过程中,越来越卡——CPU能力不足/内存泄露

4)应用页面卡顿——帧率较低、页面卡顿

因此,对开发的Android应用,必须对其进行性能测试,不然将会直接影响用户体验。

一.启动时间

启动时间同样也遵循2-5-8原则,所谓2-5-8原则就是当用户能够在2秒以内启动应用进入第一帧,会感觉系统的响应很快;当用户在2-5秒之间 得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得 到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择退出这个app或者卸载该app。因此启动时间对用户的使用行为起到至关重要的作用。

这里启动时间分两种情况:首次启动(冷启动)和非首次启动(热启动)应用所花费的时间。

在测试app启动时间之前,我们先来看看这张经典的Activity生命周期图,如图1。

图1 Activity的生命周期

流程简介:

1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

2.当前Activity被其他Activity覆盖或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

从Activity的生命周期流程图,我们可以看出启动时间即onCreate()方法开始执行到onResume()方法执行结束的时间,也就是activity完全启动的时间。

那么怎么获取该时间?

方法一:通过logcat中ActivityManager的相关数据获取。

1)ddms设置过滤条件“by Log Tag”为:ActivityManager;

2)启动app,查看通过DDMS抓取到的log。

以2345王牌浏览器app为例,可查看获得log如下:

除了通过DDMS抓取外,还可以通过adb logcat命令来获取。

>adb logcat -d -s ActivityManager|findstr "Displayed">D:\log.txt

其实两者获取到的信息是一样的(这里演示时非同一次启动,因此启动时间有点差异)。只是DDMS抓的通常是main缓存中的,也就是应用程序打印的日志文件,可以实时查看。而通过命令抓取的话,只能重定向到文件,抓完之后才能查看。

方法二:adb命令获取,在前面的博文常用的adb命令中对adb shell也有些许介绍。

1)获取app包名和类名

>adb shell dumpsys activity|findstr mFocusedActivity

2)获取启动时间

>adb shell am start -W –n <packageName>/<activityName>

通过比较,可以发现这两种方法获取到的时间是一样的。(注意:这两种方法都是同一次启动,非同一次启动,会有差异)

对于这几个时间,这里引用知乎作者Gracker答案中的结论:“如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。”

二.性能测试工具——Emmagee

Emmagee是一款简单易用的Android性能检测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化。

1)通过官方网站安装(个别机型目前不支持),设置“应用退出后台后仍可监听”便于自动化测试。

2)通过adb命令在sdcard目录下pull出测试结果csv文档(也可通过app配置邮箱,发送到自己的邮箱)。

3)查看测试结果csv文档,这里以百度浏览器app为例,测试结果如下。

注释:

已知部分不支持的机型可在此查阅:https://github.com/NetEase/Emmagee/wiki/Some-devices-are-not-supported

电流: 小于0是放电大于0是充电

启动时间: 为空是应用已启动或者未搜集到启动时间

N/A: 不支持或者数据异常

4)利用excel的功能生成统计图,方便分析。

该工具测试的结果可作为测试参考,另外对于帧率还可以用FPS Meter工具进行测试。

三.利用adb命令 监测app相关性能信 息

在这里就不一一演示了。

  1. //内存使用率
  2. 1.adb shell dumpsys meminfo <pakagename>
  3. 2. 通过android提供的API来测试(ActivityManager.MemoryInfo())
  4.  
  5. //CPU占有率
  6. 1.adb shell top
  7. 2.adb shell dumpsys cpuinfo
  8.  
  9. //功耗
  10. 1.adb shell dumpsys battery
  11. 2.通过android本身的API来测试(ProwerManager.WakeLock
  12.  
  13. //查看总体的CPU占用
  14. # cat /proc/stat
  15.  
  16. //查看进程的CPU占用
  17. # cat /proc/<PID>/stat
  18.  
  19. //查看总体的RAM
  20. # cat /proc/meminfo | head -n 4
  21.  
  22. //查看进程的RAM
  23. # dumpsys meminfo <packagename>
  24. # dumpsys meminfo <PID>
  25.  
  26. //查看进程的当前RAM
  27. # procrank
  28.  
  29. //开机后的总流量(字节数)
  30. # cat proc/self/net/dev
  31.  
  32. //上传流量/上行流量
  33. # cat /proc/uid_stat/2000/tcp_snd
  34.  
  35. //下载流量/下行流量
  36. # cat /proc/uid_stat/2000/tcp_rcv

四.稳定性测试/压 力测 试

在前面的博客常用的adb命令中介绍过adb shell monkey来对app进行压力测试,请参考。

五.其他

在这里推荐两个云测平台:

1.itestin

2.腾讯优测

参考文献:

1.Android Activity生命周期:http://kb.cnblogs.com/page/70125/

2.Emmagee官网:https://github.com/NetEase/Emmagee/releases

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

  1. Android app性能测试小结(7个性能指标)

    1.性能测试的几个指标:       2.性能测试环境准备: 3.启动时间 3.1,监控值的获取方法 启动分为冷启动和热启动,冷启动:应用程序首次启动,进程首次创建并加载资源的过程:热启动:应用程序启 ...

  2. Android APP性能测试笔记(一)

    Android APP性能测试笔记(一) (1)工具使用   Android Studio  GT, root的真机 (2)记录apk大小(对比竞品)   使用Android Studio导入需要测试 ...

  3. 转:Android应用性能测试

    Android用户也许会经常碰到以下的问题: 1)应用后台开着,手机很快没电了——应用耗电大 2)首次/非首次启动应用,进入应用特别慢——应用启动慢 3)应用使用过程中,越来越卡——CPU能力不足/内 ...

  4. Android App性能测试之一:简介

    1.性能测试 启动时间,主要测试App在启动过程中的耗时情况 CPU, 主要测试App在使用过程中的CPU占比率 流量,主要测试App在使用过程中对流量的消耗情况 电量,主要测试App在使用过程中对电 ...

  5. 移动端 - Android客户端性能测试常见指标

    rom版本的性能测试 一般关注功耗(不过 rom 版本的功耗测试跟应用的功耗测试会有所差异,当然只是用例设计方面的差异,工具仍然采用安捷伦电源仪进行) 应用的性能测试 包括很多测试项,如启动时间.内存 ...

  6. Android移动客户端性能测试浅谈——电量

    本文由作者张迎贞授权网易云社区发布. APP性能测试除了需要监控PCU.内存占用.流量等,还需要获取APP的电量数据,测试在可接受范围内,避免APP出现过度消耗电量的现象.手机有很多硬件模块:CPU, ...

  7. Android UI性能测试——使用 Gfxinfo 衡量性能

    Android官方文档翻译 原文地址:https://developer.android.com/training/testing/performance参考:https://www.jianshu. ...

  8. Android客户端性能测试(一):使用APT测试Android应用性能

    一.APT介绍: APT:Android Performance Testing Tools,适用于开发自测和定位性能瓶颈,帮助测试人员完成[性能基准测试.竞品测试]. APT提供了CPU利用率实时曲 ...

  9. Android APP性能测试笔记(二)

    (5)FPS   每秒传输帧数(Frames Per Second),每秒钟帧数愈多,所显示的动作就会愈流畅,标准的fps是60 帧数就是在1秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够 ...

随机推荐

  1. 解决IIS进程回收后第一次访问慢的问题

    IIS 有一种机制,默认会在IIS空闲一定时间段后,将应用程序池进行回收,这个时间段在IIS6中默认是20分钟,在IIS7中默认是1740分钟.两个配置都不合理,都会导致当应用程序池被回收后,第一次访 ...

  2. ViewPager的使用小技巧

    1.在ViewPager中默认加载当前屏幕上的界面和左右相邻界面的数据从而实现页面滑动的快速切换.可以通过调用setOffscreenPageLimit(int)方法,定制预加载相邻页面的数目. 2. ...

  3. JavaBean的作用域

    JavaBean的作用域 scope属性决定了JavaBean对象存在的范围. scope的可选值包括四种: page(默认值) request session application 这四个值对应的 ...

  4. 浏览器判断是否安装APP

    浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...

  5. Android 隐式意图激活另外一个Actitity

    上篇文章<Android 显示意图激活另外一个Actitity>最后谈到显示意图激活另外一个Actitity会有一些局限性和弊端 本文介绍另一种方法:隐式意图激活另外一个Actitity ...

  6. 你真的了解UIControl吗?

    一:首先查看一下关于UIControl的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIControl : UIView //控件默认是启用的YES.是否要禁用 ...

  7. 高仿精仿手机版QQ空间应用源码

    说明:本次QQ空间更新了以前非常基础的代码 更新内容一 更新了登陆界面二  增加了输入时密码时和登陆成功后播放音频的效果三 增加了导航条渐隐的效果(和真实QQ空间的导航条一样,首先透明,当tablev ...

  8. 学习Coding-iOS开源项目日志(四)

    Hello,大家好,好久没写博客了,今天再次来研究研究Coding源码,久违了. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目.本篇开始会陆续更新本人对git ...

  9. linux 中的 tar 解压

    Type at the command prompt tar xvzf file-1.0.tar.gz - tgfo uncompress a gzip tar file (.tgz or .tar. ...

  10. Spring为某个属性注入值或为某个方法的返回值

    项目中用到需要初始化一些数据,Spring提供了filed的值注入和method的返回值注入. 一.Field值的注入 filed值注入需要使用org.springframework.beans.fa ...