Android性能测试 | 启动时间篇

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

背景介绍
   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头的数据报文大小。
   下面就介绍两种流量的测试方法:
  一、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一栏。
   二、使用安卓自身提供的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)Charles、Fiddler这样的软件只支持短链接,也就是说只有走短链接的接口才生效,长链接的不能使用。
  缺点:不支持长链接
  2)Atc工具和 苹果自带的ios developer (开发者选项)的使用方法是同样的,须要在手机端操做,atc工具须要搭建一系列环境后,手机访问一个ip地址就能看见控制页面,而后修改相应的参数便可。
  缺点:不宜操做,每次修改网络场景须要把被测app置于后台,切换到网络模拟界面改参数,而后再切回被测app。影响被测app的操做连贯性。
  3) clumsy、netlimite等这类软件易安装,安装在电脑端,手机经过共享网络链接电脑,实时的将系统接收和发出的网络数据包拦截下来,人工的形成延迟,掉包和篡改操做后再进行发送。
  4)购买一些仪器,在全公司范围搭建一个弱网环境。
  缺点:搭建成本高,须要有专门的 技术人员支持。
  综合比较以上四类工具,第三类推荐在平常测试过程当中使用。下面就拿clumsy举例,介绍一下环境的搭建及使用。
   二、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
  至此手机就会搜索到电脑共享的网络,而后链接便可。
 
三、clumsy参数说明及使用
  界面以下:
  clumsy
  首先根据用户选择的?filter?来拦截指定的网络数据。在 filter
  中能够设定你感兴趣的协议(tcp/udp),端口号,是接收仍是发出的端口。你也能够经过简单的逻辑语句来进一步缩小范围。当 clumsy
  被激活时,只有符合这些标准的网络数据会被进行处理,而你不感兴趣的数据仍然会由系统正常传输。
  当被 filter 的网络数据包被拦截后,你能够选择 clumsy 提供的功能来有目的性的调整网络状况:
  1.延迟(Lag),把数据包缓存一段时间后再发出,这样可以模拟网络延迟的情况。
  2.掉包(Drop),随机丢弃一些数据。
  3.节流(Throttle),把一小段时间内的数据拦截下来后再在以后的同一时间一同发出去。
  4.重发(Duplicate),随机复制一些数据并与其自己一同发送。
  5.乱序(Out of order),打乱数据包发送的顺序。
  6.篡改(Tamper),随机修改小部分的包裹内容。
  相似模拟网络环境的软件不少,你们能够针对本身的状况选择,不要找环境搭建过于繁琐的工具,简单易用就好。
  定位经常使用软件
  在发现问题后,定位分析时,能够借助如下经常使用软件。
   一、traceview使用简介
  TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot,能够方便的查看线程的执行状况,某个方法执行时间、调用次数、在整体中的占比等,从而定位性能点。
  使用方法:
  使用Android studio->Android Device Monitor->进入DDMS->点击开始按钮
   Case:在微粉首页上下滑动,滑动过程当中等待图片、视频加载完成?。
  点击结束按钮出现结果以下(划分为上下两个面板,即Timeline Panel(时间线面板)和Profile Panel(分析面板):
  Timeline Panel又可细分为左右两个部分:
  (1)左边显示的是测试数据中所采集的线程信息。
  (2)右边所示为时间线,时间线上是每一个线程测试时间段内所涉及的函数调用信息。
  (3)能够在时间线中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。
  Profile Panel(分析面板)
  按调用次数由高到低排列结果以下图
  按照占用CPU时间从高到低排列结果以下图:
   二、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毫秒的时间去运算。
相关文章
相关标签/搜索