androidAPP性能测试及专项测试
androidAPP性能测试及专项测试
⼀、前⾔
1、Android性能测试分为两类:
  1、⼀类为rom版本(系统)的性能测试
  2、⼀类为应⽤app的性能测试
2、Android的app性能测试包括的测试项⽐如:
  1、资源消耗
  2、内存泄露
  3、电量功耗
  4、耗时
  5、⽹络流量消耗
  6、移动终端相关资源利⽤率
  7、帧率
  8、渲染等等....
3、⼯具:
  (⼯具的原理都是基于调⽤android底层的⼀些api来获取到测试所⽤到的值)GT等
4、测试⽅法:
  1、设计场景:⼿⼯或⾃动化场景
  2、获取数据:可获取的数据包括:内存、cpu、电量功耗、hprof(内存泄露分析⽂件)、响应时间等等。。。。配合⼿⼯或⾃动化场景来获取数据(最好多取⼏次⽽且每次配合不同的设备看平均值)作为最后的对⽐分析
  3、结果分析:拿到数据后分析哪些模块的数据异常再去Check code定位问题的原因
5、Android系统的⼏种场景状态:
  1、空闲状态:指打开应⽤后,点击home键让应⽤后台运⾏,此时应⽤处于的状态叫做空闲
  2、中等规格和满规格状态:中等规格和满规格指的是对应⽤的操作时间的间隔长短不⼀,中等规格时间较长,满规格时间较短
⼆、内存
  1、内存测试中的测试⼦项
    1)空闲状态下的应⽤内存消耗情况
    2)中等规格状态下的应⽤内存消耗情况
    3)满规格状态下的应⽤内存消耗情况
    4)应⽤内存峰值情况
    5)应⽤内存泄露情况
    6)应⽤是否常驻内存
    7)压⼒测试后的内存使⽤情况
  2、内存问题现象
    1)内存抖动
    2)⼤内存对象被分配
    3)内存不断增长
    4)频繁GC
  3、内存数据获取
    1)各种Linux命令(free、top、meninfo等等。。。)
    2)通过dumpsys
      adb shell dumpsys meminfo pakagename
  4、android检查内存泄漏步骤
    1)运⾏Monkey运⾏压⼒测试
      adb shell monkey -p [包名] --pct-touch 100 --throttle 1000 -s 100 -v -v 50  //运⾏APP,50次随机点击时间,每次时间间隔
1s,并⽣成种⼦值100
    2)监控内存值,如果出现过⼤等递增异常则保存HPROF⽂件(hprof⽂件是Java 虚拟机的Heap快照)⽤于分析查看应⽤内存的命令:
      adb shell dumpsys meminfo cn.microinvestment.weitou(进程名)
      如果发现内存过⼤,则保存HPROF⽂件:adb shell am dumpheap <;进程名> <;保存路径>
    3)分析hprof⽂件 
      ⽤⼯具MAT来查看,⾸先还要这个HPROF⽂件转换成MAT可读的⽂件
      在Android SDK tool⾥⾯有个hprof-conv命令:
        hprof-conv <;原HPROF⽂件路径> <;转换后的HPROF路径>
        hprof-conv a.hprof b.hprof
    4)⽤MAT⼯具打开转换后的HPROF⽂件
      ⼀般选择Leak Suspects Report(通过SQL语句来查询对象有没有被释放掉,如果有多个相同的对象,则会存在内存泄露的问题)
三、CPU篇
  1、CPU测试中的测试⼦项:
    1)空闲状态下的应⽤CPU消耗情况
    2)中等规格状态下的应⽤CPU消耗情况
    3)满规格状态下的应⽤CPU消耗情况
    4)应⽤CPU峰值情况
  2、CPU数据获取:
    1)adb shell dumpsys cpuinfo | grep packagename
    2)top命令
      adb shell top -m 10 -s cpu #查看占⽤cpu最⾼的前10个程序(-t 显⽰进程名称,-s 按指定⾏排序,-n 在退出前刷新⼏次,-d 刷新间隔,-m 显⽰最⼤数量)
叶贝文
      adb shell top | grep PackageName > /
    说明:
        VSS – Virtual Set Size 虚拟耗⽤内存(包含共享库占⽤的内存)
        RSS – Resident Set Size 实际使⽤物理内存(包含共享库占⽤的内存)
        PSS – Proportional Set Size 实际使⽤的物理内存(⽐例分配共享库占⽤的内存)
        USS – Unique Set Size 进程独⾃占⽤的物理内存(不包含共享库占⽤的内存) USS 是针对某个进程开始有可疑内存泄露的情况,
春天的谚语
        是⼀个程序启动了会产⽣的虚拟内存,⼀旦这个程序进程杀掉就会释放
三、流量篇
  1、概念:
    中等负荷:应⽤正常操作
    ⾼负荷:应⽤极限操作
  2、流量测试中的测试⼦项:
    1)应⽤⾸次启动流量值
    2)应⽤后台连续运⾏ 2 ⼩时的流量值
    3)应⽤⾼负荷运⾏的流量峰值
    4)应⽤中等负荷运⾏时的流量均值
  3、获取流量数据:
    1)tcpdump+wireshark
    2)/proc/net/⽬录下相关⽂件
      cat /proc/net/dev 获取系统的流量信息
    3)查询应⽤的pid: adb shell ps | grep tataufo #如:31002
      通过PID获取该应⽤的流量数据: adb shell cat /proc/31002/net/dev
      (wlan0代表wifi上传下载量标识, 单位是字节可以/1024换算成KB, 打开⼿机飞⾏模式再关掉就可以将wlan0中的值初始化0)    4)查询应⽤的pid: adb shell ps | grep tataufo #如:31002
      通过PID获取UID:adb shell cat /proc//status
      通过UID获取:adb shell cat /proc/net/xt_qtaguid/stats | grep 31002
    5)通过adb shell dumpsys package来获取应⽤的uid信息,然后在未操作应⽤之前,通过查看:
      adb shell cat /proc/uid_stat/uid/tcp_rcv
      adb shell cat /proc/uid_stat/uid/tcp_snd
      获取到应⽤的起始的接收及发送的流量,然后我们再操作应⽤,再次通过上述2条命令可以获取到应⽤的结束的接收及发送的流量,通过相减及得到应⽤的整体流量消耗
    6)Android代码:Android的TrafficStats类
四、功耗篇
  1、功耗测试中的测试⼦项:
    1)⼿机安装⽬标APK前后待机功耗⽆明显差异
    2)常见使⽤场景中能够正常进⼊待机,待机电流在正常范围内
    3)长时间连续使⽤应⽤⽆异常耗电现象
  2、功耗测试⽅法:
    ⽅法⼀:软件
      1)采⽤市场上提供的第三⽅⼯具,如⾦⼭电池管家之类的。
      2)就是⾃写⼯具进⾏,这⾥⼀般会使⽤3种⽅法:
        (1)基于android提供的PowerManager.WakeLock来进⾏
        (2)⽐较复杂⼀点,功耗的计算=CPU消耗+Wake lock消耗+数据传输消耗+GPS消耗+Wi-Fi连接消耗
        (3)通过 adb shell dumpsys battery来获取
      3、battery-historian(google开源⼯具)
    ⽅法⼆:硬件
      ⼀般使⽤万⽤表或者功耗仪安捷伦进⾏测试,使⽤功耗仪测试的时候,需要制作假电池来进⾏的,有些不能拔插电池的⼿机还需要焊接才能进⾏功耗测试
五、GPU篇
  1、概念
    过度绘制:界⾯显⽰的activity套接了多层⽽导致
    帧率:屏幕滑动帧速率
    帧⽅差:屏幕滑动平滑度
    **FPS:**Frames Per Second 每秒显⽰的帧数根据⼈眼的⽣理结构,帧率⾼于24时就被认为是连贯的。对于游戏画⾯30fps是最低能接受的,
    60fps逼真感,如果帧率⾼于屏幕刷新频率就是浪费。要达到30fps,每帧所占⽤的时间要⼩于33毫秒
  2、GPU测试中的测试⼦项:
    1)界⾯过度绘制
    2)屏幕滑动帧速率
    3)屏幕滑动平滑度
  3、过度绘制测试:(⼈⼯进⾏测试)
    打开开发者选项中的显⽰GPU过度绘制(Debug GPU overdraw)
    验收的标准:
    1)不允许出现⿊⾊像素
    2)不允许存在4x过度绘制
    3)不允许存在⾯积超过屏幕1/4区域的3x过度绘制(淡红⾊区域)
  4、屏幕滑动帧速率测试:
    ⽅法⼀:
      1)⼿机端打开开发者选项中的启⽤跟踪后勾选Graphics和View
      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打开⽂件计算得到帧率
    ⽅法⼆:
      硬件的⽅法,打开⾼速相机,开启摄像模式,录制⼿⼯滑动或者扫动被测应⽤的视频,再通过⼈
⼯或者程序数帧的⽅法对结果进⾏计算得到帧率
  5、屏幕滑动平滑度的测试:
    ⽅法如同帧率测试,唯⼀的差异就是最后的结果计算公式的差异
  6、捕获app帧率(android流畅度FPS测试):
    1)打开⼿机开发者选项,勾选GPU显⽰配置⽂件(系统会记录保留每个界⾯最后128帧图像绘制的相关时间信息)
    2)adb shell dumpsys x >
    3)结果数据分析
怎么开通博客
      Profile data in ms部分:
      Draw:创建显⽰列表的时间(DisplayList),所有View对象OnDraw⽅法占⽤的时间
      Process: Android 2D渲染引擎执⾏显⽰列表所花的时间,View越多时间越长
      Execute:将⼀帧图像交给合成器(compsitor)的时间,较⼩
  7、其他⼯具:
    GameBench 测试android app的FPS⼯具
    Gfxinfo 查看app绘制性能⼯具
六、响应时间篇
  1、理解:
2020端午安康祝福语
    1)从单击事件触发到容器启动NativeAPP消耗的时间(埋点)
    2)NativeAPP完整启动消耗的时间(可以通过system.log获取)
    3)Native调⽤RPC请求⽅法的延迟时间(埋点)
    4)RPC请求发出去过程中的具体数据(req_size req_header req_time等,通过埋点获取)
    5)RPC请求返回的具体数据(res_size res_header res_time等,通过埋点获取)昆山电工培训
    6)本地解析返回数据所消耗的时间(埋点或者TraceView⼯具可获取)
    7)界⾯渲染的时间(可以通过慢速摄像机或者埋点获取)
  2、android app启动时间测试
  3、应⽤的启动时间的测试,分为三类:
    1)⾸次启动 --应⽤⾸次启动所花费的时间
    2)⾮⾸次启动 --应⽤⾮⾸次启动所花费的时间
    3)应⽤界⾯切换--应⽤界⾯内切换所花费的时间
  4、应⽤启动时间数据获取:
    1)adb logcat > / #所有activity打印的⽇志
      find “Displayed” / > / #通过⽇志过滤关键字Displayed来过滤
      find “ActivityName” / > / #通过activity名来过滤获取所测应⽤
南瓜饼怎么做      通过计算activity最后剩余的时间之和即可
    2)硬件测试,使⽤⾼速相机或者⼿机采⽤录像的⽅法把应⽤启动过程给录制下来,然后通过⼈⼯数帧或者程序数帧的⽅式计算启动时间
七、弱⽹测试
  1、测试⽅法:
    1)使⽤真实的SIM卡、运营商⽹络来进⾏测试(移动⽆线测试中存在⼀些特别的BUG必须在特定的真实的运营商⽹络下才会发现)
    2)通过代理的⽅式模拟弱⽹环境进⾏测试(charles 硬延迟)
    3)连接模拟弱⽹的热点进⾏测试
  2、热点模拟⽅法:
    1)通过设置iPhone的开发者模式之后共享热点(硬延迟)
    2)FaceBook开源的ATC(可使⽤树莓派来搭建ACT环境)
  3、⽤户体验需要做的:
    1)在应⽤中统⼀弱⽹加载的界⾯样式、动画效果、菊花icon等
    2)统⼀⽹络错误、服务端错误、超时等展现给⽤户的界⾯和提⽰语句
    3)定义清楚在每个中间过程是的⽤户交互⾏为

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。