【转载】原文地址:http://www.51testing.com/html/93/n-3724593.html

背景介绍
  Android用户也许会经常碰到以下的问题:
  1)应用后台开着,手机很快没电了——应用耗电大;
  2)首次/非首次启动应用,进入应用特别慢——应用启动慢;
  3)应用使用过程中,越来越卡——CPU能力不足/内存泄露;
  4)应用页面卡顿——帧率较低、页面卡顿。
  因此,对开发的Android应用,必须对其进行性能测试,不然将会直接影响用户体验。
  Android应用性能测试通常包括:启动时间、内存、CPU、耗电量、流量、流畅度等。我们将在这个月陆续为大家简单介绍一下每个测试点的常见测试方法及简单的定位思路,仅供参考。之前两周内,我们为大家介绍了启动时间、内存&CPU、内存泄漏&卡顿"测试方法,本期我们介绍Android性能测试白皮书的最后一章——流量、电量、弱网环境的测试方法。
  耗电
  耗电操作主要包含CPU、WIFI、流量、传感器(GPS NFC),以及应用屏幕wakelock等操作。我们更多的是关注应用本身是否劫持了系统的屏幕wakelock操作,没有及时释放屏幕wakelock,导致耗电。
  电量测试监控方法可以简单的从设置->电池->使用情况中查看,手机中的每个部件运行时对应的能耗值都放在power_profile.xml文件中,而系统的设置->电池->使用情况中,统计的能耗使用情况也是以power_profile.xml的value作为基础参数的。通过命令监控app个部件的使用时长,然后结合设备耗电的基础参数进行加权计算,即可得到app使用的耗电量。至于更详细的耗电量测试,可以专门把耗电这一性能指标拿出来,专项测试。
  流量
  针对流量测试,首先要搞明白什么是流量?我们的收集通过运营商的网络访问Internet,运营商替我们的手机转发数据报文,数据报文的总大小(字节数)即流量,这里的数据报文包含手机上下行的报文。由于数据报文采用IP协议传输,运营商计算的流量一般是包含IP头的数据报文大小。
  下面就介绍两种流量的测试方法:
  1、tcpdump+Wireshark抓包测试法
  流量测试最直接的方法就是抓包。在App运行期间,把手机收发的所有报文度抓取下来,再计算收发报文总大小,即App消耗的流量。但是如果我们需要测试某一个App消耗的流量需要禁用其他APP的连网权限。
  1)限制其他app的联网权限,因为有些App的进程是常驻后台的,即使不运行,也会有网络报文。可以借助一些手机管家软件禁用网络。
  2)手机上抓包,下载tcpdump,手机连接电脑,获得root权限。
  3)将tcpdump(forAndroid)上传至Android手机上,在命令提示符窗口中输入命令:adbpush   /data/local/tcpdump
  4)给tcpdump增加可执行权限
  adb shell
  su
  chmod 6755 /data/local/tcpdump
  5)启动抓包,使用命令/data/local/tcpdump-v -i any -s 0 -w /sdcard/zhangyu.pcap
  Got后面的数字表示当前抓到的包的数量。如果有变化,表示有网络流量。
  6)导出抓包结果adb pull /sdcard/zhangyu.pcap
  7)用Wireshark打开刚才的抓包结果,点击StatisticsàSummary,流量的数值为Bytes一行的Displayed一栏。
  2、使用安卓自身提供的TCP收发长度统计功能
  一般APP和后台服务器之间的通信都是基于TCP的,所以我们可以利用此统计来测试我们APP的流量,而且安卓提供的该统计功能是按照APP纬度来统计的,不需要禁止其他app的连网权限。
  操作步骤如下:
  1)使用ps命令查看所测app的uid,例如贴吧的uid为10000+191=10191
  adbshell
  su
  ps |grep com.baidu.tieba
  2)进入/proc/uid_stat/1191目录,cat获取当前tcp_snd和tcp_tcv的初始值
  3)此时可以开始测试了,测试完成后再次获取tcp_snd和tcp_tcv的值
  4)所测时间内的流量计算
  发送流量:tcp_snd_new-tcp_snd_old=2032150-893233=1128917bytes
  接收流量:tcp_rcv_new-tcp_rcv_old=18648825-1350829=17297996bytes
  弱网环境
  在进行手机应用测试时,经常需要模拟网络不稳定的状态下对测试执行的影响。调研了几款工具,可以通过手动设置数据丢包率,以及网络时延等参数,模拟弱网环境。如Charles、clumsy、netlimite、atc等。
  1、几款工具的比较
  1)Charles、Fiddler这样的软件只支持短连接,也就是说只有走短连接的接口才生效,长连接的不能使用。
  缺点:不支持长连接
  2)Atc工具和苹果自带的ios developer (开发者选项)的使用方法是一样的,需要在手机端操作,atc工具需要搭建一系列环境后,手机访问一个ip地址就能看见控制页面,然后修改相应的参数即可。
  缺点:不宜操作,每次修改网络场景需要把被测app置于后台,切换到网络模拟界面改参数,然后再切回被测app。影响被测app的操作连贯性。
  3) clumsy、netlimite等这类软件易安装,安装在电脑端,手机通过共享网络连接电脑,实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。
  4)购买一些仪器,在全公司范围搭建一个弱网环境。
  缺点:搭建成本高,需要有专门的技术人员支持。
  综合比较以上四类工具,第三类推荐在日常测试过程中使用。下面就拿clumsy举例,介绍一下环境的搭建及使用。
  2、clumsy环境搭建及使用
  1)环境准备
  windows笔记本,clumsy安装文件,共享网络
  2)安装clumsy
  clumsy免安装程序,下载完成后,直接点击exe可执行文件即可。
  下载地址:https://pan.baidu.com/s/1pLAjm2J密码: mk8i
  3)创建共享网络
  a、电脑连接网线,打开网络和共享中心
  b、点击本地连接---属性---共享---勾选第一个,并选择一个家庭网络连接(此时本地连接会显示共享的字样)
  c、cmd--输入命令(启动cmd,最好用管理者身份启动)
  netshwlan set hostednetwork mode=allow ssid=zhangyu1 key=123456789(ssid和key对应共享网络的名称和密码,key不能低于8位)
  netshwlan start hostednetwork
  至此手机就会搜索到电脑共享的网络,然后连接即可。
 
3、clumsy参数说明及使用
  界面如下:
  clumsy
  首先根据用户选择的?filter?来拦截指定的网络数据。在 filter
  中可以设定你感兴趣的协议(tcp/udp),端口号,是接收还是发出的端口。你也可以通过简单的逻辑语句来进一步缩小范围。当 clumsy
  被激活时,只有符合这些标准的网络数据会被进行处理,而你不感兴趣的数据仍然会由系统正常传输。
  当被 filter 的网络数据包被拦截后,你可以选择 clumsy 提供的功能来有目的性的调整网络情况:
  1.延迟(Lag),把数据包缓存一段时间后再发出,这样能够模拟网络延迟的状况。
  2.掉包(Drop),随机丢弃一些数据。
  3.节流(Throttle),把一小段时间内的数据拦截下来后再在之后的同一时间一同发出去。
  4.重发(Duplicate),随机复制一些数据并与其本身一同发送。
  5.乱序(Out of order),打乱数据包发送的顺序。
  6.篡改(Tamper),随机修改小部分的包裹内容。
  类似模拟网络环境的软件很多,大家可以针对自己的情况选择,不要找环境搭建过于繁琐的工具,简单易用就好。
  定位常用软件
  在发现问题后,定位分析时,可以借助以下常用软件。
  1、traceview使用简介
  TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot,可以方便的查看线程的执行情况,某个方法执行时间、调用次数、在总体中的占比等,从而定位性能点。
  使用方法:
  使用Android studio->Android Device Monitor->进入DDMS->点击开始按钮
  Case:在微粉首页上下滑动,滑动过程中等待图片、视频加载完成?。
  点击结束按钮出现结果如下(划分为上下两个面板,即Timeline Panel(时间线面板)和Profile Panel(分析面板):
  Timeline Panel又可细分为左右两个部分:
  (1)左边显示的是测试数据中所采集的线程信息。
  (2)右边所示为时间线,时间线上是每个线程测试时间段内所涉及的函数调用信息。
  (3)可以在时间线中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。
  Profile Panel(分析面板)
  按调用次数由高到低排列结果如下图
  按照占用CPU时间从高到低排列结果如下图:
  2、Systrace使用简介
  Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如surfaceflinger、WindowManagerService等Framework部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。
  使用方法:
  使用Android studio->Android Device Monitor
  进入DDMS->打开微粉APP->点击开始systrace
  设置参数->点击OK
  case:在微粉首页滑动列表,滑动过程中需等待图片视频加载完成
  在chrome地址栏中输入chrome://tracing 点击load打开trace.html文件
  通过工具抓取的数据用浏览器打开后显示如下:
  查看Frames这一行,可以看到这里展示了被绘制出来的每一帧,并且用绿、黄、红三颜色来区分它们在绘制时的性能
  选一个红色帧在底部给出Alter信息:
  展开“Inflation during ListViewrecycling”这条警告(警告部分的总耗时155毫秒,远高于了我们对保障60fps所需的16毫秒绘制时间):
  选择这一帧中最长的一块,对其进行进一步分析整个区块耗时98毫秒,而在这之中CPU只消耗了65毫秒的时间去运算。

Android性能测试 | 启动时间篇的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Android性能测试摘入(TestHome)

    Android性能测试:      客户端性能测试      服务端性能测试   客户端性能测试:      1.ROM版本的性能测试(即手机的不同操作系统):关注功耗测试      2.应用的性能测 ...

  7. android性能测试工具

    Android性能测试工具Emmagee介绍   Emmagee介绍 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具.该工具的优势在于如同windows系 ...

  8. Android 性能测试初探(六)

    书接前文 Android 性能测试初探之功耗(五) 本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速.弱网之类的测试,但本系列文章都不去一一探 ...

  9. Android 性能测试初探(四)

    书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...

随机推荐

  1. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

    1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 ...

  2. 【转】java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener

    http://www.cnblogs.com/softidea/p/6064091.html Caused by: java.lang.NoClassDefFoundError: org/spring ...

  3. 安装jdk1.7

    1.压缩文件放到/usr文件夹里 2.解压到 /usr里,tar -zxvf jdk-7u71-linux-i586.tar.gz 3.配置jdk环境变量,打开/etc/profile配置文件,将下面 ...

  4. [转]Asp.Net url中文乱码

    一般有3种方法: 1.设置web.config文件 2.传递中文之前,将要传递的中文参数进行编码,在接收时再进行解码.  传递 string Name = "中文参数"; Resp ...

  5. SimpleProfile_GetParameter && SimpleProfile_SetParameter

    /********************************************************************* * @fn SimpleProfile_GetParame ...

  6. Gradle Goodness: Running Java Applications from External Dependency

    With Gradle we can execute Java applications using the JavaExec task or the javaexec() method. If we ...

  7. mysql事务隔离

    一.事务的特性 原子性.一致性.隔离性.持久性 二.事务的隔离级别 1.未提交读 (Read Uncommitpeatableted) 臭名昭著的脏读 ,事务A读到事务B未提交的数据 2.提交读RC( ...

  8. Spring注解配置(1)——@Autowired

    @Autowired 注释,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方法.在使用@Autowired之前,我们对一个b ...

  9. Codeforces Round #487 (Div. 2)

    A. A Blend of Springtime(暴力/模拟) 题目大意 给出$n$个花,每个点都有自己的颜色,问是否存在连续大于等于三个花颜色均不相同 sol 直接模拟判断即可 #include&l ...

  10. js扩展String.prototype.format字符串拼接的功能

    1.题外话,有关概念理解:String.prototype 属性表示 String原型对象.所有 String 的实例都继承自 String.prototype. 任何String.prototype ...