android性能测试常见指标

1、内存

 在android系统中,每个APP进程除了同其他进程共享(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(=私有内存+比例分配共享内存)来衡量一个APP的内存开销

 测试方法:adb shell dumpsys meminfo 应用包名

备注:adb shell dumpsys meminfo列出了所有应用占用的内存大小

 adb shell procrank |grep packagename 也可以查看应用的内存使用情况

2、CPU

adb shell cat "/sys/class/thermal/thermal_zone7/temp"

测试方法:adb shell top命令

 

@echo off 
for  /l  %%a  in  (1,1,10) do adb shell top -m 5 -t>>E:\top.txt

 

 备注:腾讯有个APT工具可以方便的用来测试CPU和内存,用起来很简单,使用教程http://www.csdn.net/article/2014-04-23/2819366-tencent-APT-open-source-tool-guide

 

3、流量

adb shell cat /proc/net/xt_qtaguid/stats中有流量的使用情况

用法:

首先需求获取应用的UID

adb shell dumpsys package com.android.mms |findstr userId=

然后...

adb shell cat /proc/net/xt_qtaguid/stats | findstr userId

 

48 wlan0 0x0 10127 0 316574 2279 472562 3651 316574 2279 0 0 0 0 472562 3651 0 0 0 0
49 wlan0 0x0 10127 1 6172960 4936 415951 5215 6172960 4936 0 0 0 0 415951 5215 0 0 0 0
50 wlan0 0x3792d5b400000000 10127 0 29678 208 32168 296 29678 208 0 0 0 0 32168 296 0 0 0 0
51 wlan0 0x3792d5b400000000 10127 1 226170 222 25745 265 226170 222 0 0 0 0 25745 265 0 0 0 0
56 wlan0 0xfa1dcc4b00000000 10127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
57 wlan0 0xfa1dcc4b00000000 10127 1 3014885 2127 139857 2117 3014885 2127 0 0 0 0 139857 2117 0 0 0 0

其中第6和8列为 rx_bytes(接收数据)和tx_bytes(传输数据)包含tcp,udp等所有网络流量传输的统计。

备注:脚本页http://www.cnblogs.com/penghong2014/p/4530875.html

 

另外一种方法:

流量数据分为接收流量(tcp_rcv)和发送流量(tcp_snd)两部分,这两个状态数值我们可以通过读取/proc/uid_stat/<UID>目录下的两个文件得到。

shell@hammerhead:/ $ cat /proc/uid_stat/10084/tcp_rcv                          
3446837
shell@hammerhead:/ $ cat /proc/uid_stat/10084/tcp_snd                          
134366

通过这种方式,我们就可以读取得到指定apk在当前时刻的累计流量数值。

备注:获取应用的UID root@hammerhead:/ # cat /data/system/packages.list | grep com.UCMobile.trunk

 

另:在/sys/class/net/下可以找到相关类别(如rmnet0)的目录.在其子目录statistics下游rxbytes和txbytes记录收发流量.

关于流量测试的详细帖子http://tmq.qq.com/2016/05/android_traffic_statistics/

 tcpdump抓包

下载 一个tcpdump工具 ,然后push到/data/local/tmp下面,然后进入到此目录下,运行即可:

1|shell@hammerhead:/ $ tcpdump -v -i any -s 0 -c 2000 -w /sdcard/us.pcap
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
2000 packets captured
2024 packets received by filter
0 packets dropped by kernel

参数解释:

tcpdump命令支持许多参数,常见的有:

  • -i指定网卡(interface),any表示不限网卡;
  • -c指定接收的packets数量,接收完成后自动停止抓包;
  • -w指定输出文件,输出文件的格式为pcap;
  • -s(--snapshot-length)指定在每个packet中最多截取的字节数,设置为0时表示截取上限取默认值262144;
  • -v/-vv/-vvv,指定输出的详细程度,针对流量测试,我们不需要非常详尽的输出数据,取-v即可。

再用wireshark打开统计流量值,筛选ip.host=

4、电量

android的很多特性都比较耗电(如屏幕,GPS,sensor传感器,唤醒机制,CPU,连网等的使用)

1)灭屏待机最省电

2)WiFi比蜂窝数据,包括2G(GPRS)、3G更省电

当用户按power键,使得手机进入灭屏休眠状态,Android系统其实是做了前面说的一些工作:关闭屏幕、触摸屏、传感器、dump当前用户态和内核态程序运行上下文到内存或者硬盘、关闭CPU供电

应减小应用对CPU的唤醒,才能省电

测试方法:

把此APK反编译后找到power_profile.xm文件,而系统的 设置->电池->使用情况中,统计的能耗使用情况也是以power_profile.xml的value作为基础参数的

另adb shell dumpsys batteryinfo\batterystat 查看各部件耗时

备注:电量测试工具itest http://soft.shouji.com.cn/down/29068.html

                        GT:http://gt.tencent.com/download.html

                        GSam Battery Monitor Pro APP测试实战上推荐的工具

       

5、启动速度

 

备注:还可以通过adb logcat |findstr Displayed来获取activity的启动时间

这个还是不太准,原因:

冷启和热启的性能数据可不是这么来获取的,精确程度和适用性很弱。以下几点原因:
1、启动方式并不是am,而是点击。这就涉及从按下屏幕响应,硬件上报,软件层响应到指定页面显示整个流程。
2、APP的形式并不只有独立存在的方式,还有组件形式集成,由其他app的指定操作唤起
3、对用户而言完整的启动流程是:点击到显示app首屏画面,至于之后的加载等处理就是app的流程了。

实际性能测试中是严格录像计时的,按下到首帧响应时间。而冷启和热启在这里的区别是首次无数据启动,和完成过初始化流程后的再次启动。
冷启动:无数据的首次启动。
热启动:非首测启动情况,无初始化欢迎界面和首次初始化过程。

从脚本来模拟最好还是实际流程模拟,发送touch事件响应后到指定activity显示。即:
1、在发送touch事件后记录起始时间,精度到ms
2、当SurfaceFlinger的数据中有指定activity,记录结束时间精度ms (dumpsys SurfaceFlinger|grep -c "指定activity";非零则存在)
3、两者做差就是所需时间。

6、滑动速度、界面切换速度

动画帧率

        图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染。高的帧率可以得到更流畅,更逼真的动画,不过帧率达到60fps以上,人眼主观感受到的差别就不大了。所以以60fps作为衡量标准,即要求每一帧刷新的时间小于16ms,这样才能保证滑动中平滑的流畅度。

FPS测试方法:

Android4.1引入gfxinfo,用于监控分析GPU profiling信息,Draw+Process+Execute是一帧的绘制渲染时间,如果持续超过16ms,用户会明显感知卡顿:

       a: "Draw" : 创建显示列表(display lists,记录所有view对象的绘制指令)的时间开销。

       b: "Process" : 执行显示列表中绘制指令的时间。UI视窗中的View数量越多,需要执行的绘画命令就越多。

       c: "Execute" : 将一帧图像交给合成器compostior的时间。这部分占用的时间通常比较少

      1) 打开android手机 “设置->开发者选项->GPU呈现模式分析"

      启用该选项后,系统会保留每个界面最后128帧绘制的时间信息。目前在使用该工具前,您需要先干掉要分析的应用

      2) 执行测试场景(比如滑动页面)后,执行adb shell dumpsys gfxinfo packageName

      在显示的结果中,会看到一个标题为 “ Profile data in ms ”的区域,下面包含了3列数字。 为了图形化显示,您可以把这些数据复制到Excel表格中,来显示一个累积柱状图

      Draw 是在Java中创建显示列表所需要的时间。这个值显示了运行绘图函数用了多长时间,比如View.onDraw(Canvas)。

      Process 是Android 2D引擎渲染显示列表所需要的时间。在界面中View数目越多,则有越多的绘制命令需要执行。

      Execute 是把一帧数据送到屏幕上排版显示的时间,这个时间通常比较小。

     备注:详细的文章介绍http://www.tuicool.com/articles/ZzmYFf

      3) 找到"Profile data in ms"的Draw Process Exceute这三列数据,Excel做出表格,sum出每列的总GPU时间

      4) 针对时间大不幅度>16ms,可以使用systrace进行分析定位瓶颈

7、与服务器交互的网络速度

8.弱网络

转载于:https://www.cnblogs.com/penghong2014/p/4882169.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值