应用CPU、内存、点亮、流量等数据,是应用测试的重要性能指标。本次以UC浏览器为例。

当前app测试中,每个正式版本都会专门做一轮性能测试,测试数据包括:

  • 1小时内存数据
  • 1小时CPU数据
  • 24小时电量数据

1.内存

调用dumpsys命令,获取数据后,再进行数据处理。

1.1 测试前的准备工作:

内存、CPU测试前,手机环境需要为纯净的系统,避免其他干扰,需要删除无关的应用,只安装待测的app。建议手机重置

1.2 获取app信息

#获取包名:执行下一行命令后,进入app
adb shell am monitor
#获取当前应用的进程
adb shell ps|grep com.UCMobile

结果如下:

u0_a227      30023   620 2464956 352744 0                   0 S com.UCMobile
u0_a227 30195 620 1901864 78448 0 0 S com.UCMobile:SearchBackgroundProcess
u0_a227 30258 620 1910232 82752 0 0 S com.UCMobile:MediaPlayerService
u0_a227 30425 620 1909840 86436 0 0 S com.UCMobile:push
u0_a227 30475 620 1894068 77416 0 0 S com.UCMobile:game
u0_a227 30558 620 1878216 70328 0 0 R com.UCMobile:DownloadService
u0_a227 30583 620 1820128 55784 0 0 R com.UCMobile:wificore
u0_a227 30637 620 1820128 55824 0 0 R com.UCMobile:ppappstore

1.3 按进程或包名查看内存占用

adb shell dumpsys meminfo com.UCMobile

原文:https://blog.csdn.net/bigconvience/article/details/35553983

重点关注如下几个字段:

(1) Native/Dalvik 的 Heap 信息

具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。

参数含义:

dalvik : dalvik使用的内存

native : native堆上的内存,指C\C++堆的内存(android 3.0以后bitmap就是放在这儿)

other : 除了dalvik和native的内存,包含C\C++非堆内存······

Pss : 该内存指将共享内存按比例分配到使用了共享内存的进程

allocated : 已使用的内存

free : 空闲的内存

private dirty : 非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使你的进程已经退出,该内存也不会被释放)

share dirty : 共享,但有不能被换页出去的内存

(2) Total 的 PSS 信息

这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大了。

1.4 编写脚本grabMem.sh,每隔一段时间获取应用和进程的占用的内存。

#!/bin/sh
#传入2个参数。第1个参数用于指定文件的前缀,便于区分
#第2个参数用于多设备时,指定设备
for i in `seq 1 5400`;do
if [[ $2 == "" ]];then
adb shell dumpsys meminfo com.UCMobile > $1_mem_package.text
adb shell dumpsys meminfo com.UCMobile:SearchBackgroundProcess > $1_mem_package_SearchBackgroundProcess.text
adb shell dumpsys meminfo com.UCMobile:MediaPlayerService > $1_mem_package_MediaPlayerService.text
adb shell dumpsys meminfo com.UCMobile:push > $1_mem_package_push.text
adb shell dumpsys meminfo com.UCMobile:game > $1_mem_package_game.text
adb shell dumpsys meminfo com.UCMobile:DownloadService > $1_mem_package_DownloadService.text
adb shell dumpsys meminfo com.UCMobile:wificore > $1_mem_package_wificore.text
adb shell dumpsys meminfo com.UCMobile:ppappstore > $1_mem_package_ppappstore.text
else
adb -s $2 shell dumpsys meminfo com.UCMobile > $1_mem_package.text
adb -s $2 shell dumpsys meminfo com.UCMobile:SearchBackgroundProcess > $1_mem_package_SearchBackgroundProcess.text
adb -s $2 shell dumpsys meminfo com.UCMobile:MediaPlayerService > $1_mem_package_MediaPlayerService.text
adb -s $2 shell dumpsys meminfo com.UCMobile:push > $1_mem_package_push.text
adb -s $2 shell dumpsys meminfo com.UCMobile:game > $1_mem_package_game.text
adb -s $2 shell dumpsys meminfo com.UCMobile:DownloadService > $1_mem_package_DownloadService.text
adb -s $2 shell dumpsys meminfo com.UCMobile:wificore > $1_mem_package_wificore.text
adb -s $2 shell dumpsys meminfo com.UCMobile:ppappstore > $1_mem_package_ppappstore.text
fi
sleep 1
done

1.5 步骤要点:

  • 1.设备链接电脑,确保应用已安装
  • 2.电脑上启动原始数据手机脚本./grabMem.sh version

2. cpu

https://blog.csdn.net/houzhizhen/article/details/79474427

pid: 进程ID. √
comm: task_struct结构体的进程名 √
state: 进程状态, 此处为S
ppid: 父进程ID (父进程是指通过fork方式,通过clone并非父进程)
pgrp:进程组ID
session:进程会话组ID
tty_nr:当前进程的tty终点设备号
tpgid:控制进程终端的前台进程号
flags:进程标识位,定义在include/linux/sched.h中的PF_*, 此处等于1077952832
minflt: 次要缺页中断的次数,即无需从磁盘加载内存页. 比如COW和匿名页
cminflt:当前进程等待子进程的minflt
majflt:主要缺页中断的次数,需要从磁盘加载内存页. 比如map文件
majflt:当前进程等待子进程的majflt
utime: 该进程处于用户态的时间,单位jiffies,此处等于166114 √
stime: 该进程处于内核态的时间,单位jiffies,此处等于129684 √
cutime:当前进程等待子进程的utime √
cstime: 当前进程等待子进程的utime √
priority: 进程优先级, 此次等于10.
nice: nice值,取值范围[19, -20],此处等于-10
num_threads: 线程个数, 此处等于221
itrealvalue: 该字段已废弃,恒等于0
starttime:自系统启动后的进程创建时间,单位jiffies,此处等于2284
vsize:进程的虚拟内存大小,单位为bytes
rss: 进程独占内存+共享库,单位pages,此处等于93087
rsslim: rss大小上限
说明: 第10~17行主要是随着时间而改变的量;
内核时间单位,sysconf(_SC_CLK_TCK)一般地定义为jiffies(一般地等于10ms)
starttime: 此值单位为jiffies, 结合/proc/stat的btime,可知道每一个线程启动的时间点
1500827856 + 2284/100 = 1500827856, 转换成北京时间为2017/7/24 0:37:58
第四行数据很少使用,只说一下该行第7至9个数的含义: signal:即将要处理的信号,十进制,此处等于6660
blocked:阻塞的信号,十进制
sigignore:被忽略的信号,十进制,此处等于36088
#进程的cpu,只要关注utime,stime,cutime,cstime4列数值即可
adb shell cat /proc/23183/stat
#总的CPU,除了idle的不获取,其他的全部获取
adb shell cat /proc/stat|head -n 1

cpu.shell

#!/bin/sh
for i in `seq 1 10`;do
echo "pid,process,uesr time,kernel time,cutime,cstime"
for pid in `adb shell ps|grep com.UCMobile|awk '{print $2}'`;do
adb shell cat /proc/${pid}/stat |awk '{print $1,$2,$14,$15,$17,$17}'|sed 's/ /,/g'
done
echo 'proc/stats,user,nice,system,iowait,irq,softirq,steal,guest,guest_nice'
adb shell cat /proc/stat|head -n 1|awk '{print $1,$2,$3,$4,$6,$7.$8,$9,$10,$11}'|sed 's/ /,/g'
sleep 1
done

sh cpu.sh > cpu.csv

将结果导入Excel表格中,应用的CPU差值除以CPU的总值,即可获取CPU的占用率

3.电量

4.应用启动时间

#获取应用启动activity
adb shell dumpsys activity activities |grep intent|grep --color com.UCMobile
#停止应用
adb shell am force-stop com.UCMobile
#观察日志
adb logcat -s ActivityManager
#启动应用
adb shell am start -n com.UCMobile/com.uc.browser.InnerUCMobile
#在手动启动对比下

5.adb采集流量数据

新的安卓系统已经没有uid_stat目录,这个方法过时了

adb shell cat /proc/uid_stat/UID/tcp_rcv
adb shell cat /proc/uid_stat/UID/tcp_snd

6.参考:

https://blog.csdn.net/bigconvience/article/details/35553983

https://blog.csdn.net/houzhizhen/article/details/79474427

https://www.jianshu.com/p/6c0cfc25b038

android基于adb的性能测试的更多相关文章

  1. Android:基于Eclipse编译调试系统级应用源代码

    一.      概要描述 在使用Eclipse导入android工程源代码以后,我们可以使用ddms调试和跟踪源代码. 本文讲述动态调试源代码和静态调试源代码的两种方法,避免build system. ...

  2. 基于ADB框架Robotium跨进程操作

    转自:http://blog.csdn.net/qingchunjun/article/details/42580937 2015年2月3日更新: 有些朋友在用真机尝试本方法时,抛出了InputStr ...

  3. Android 工具-adb

    Android 工具-adb 版权声明:本文为博主原创文章,未经博主允许不得转载. Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的. Android D ...

  4. Android 神兵利器—— Adb 常用命令

    总结的Android工具类文章: Android 神兵利器-- Adb 常用命令 Android 神兵利器-- Git 常用命令 Adb的全称为Android Debug Bridge,是管理andr ...

  5. Android的ADB配置环境和adb指令使用

    adb的全称为Android Debug Bridge,就是起到调试桥的作用,作为一名开发者倒是常用到这个工具.借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作,如安装软件. ...

  6. Android基于XMPP的即时通讯3-表情发送

    这篇博文主要讲表情发送的一些东西. 参考:Android基于XMPP的即时通讯1-基本对话 1.准备好资源文件 采用的是emoji的表情,我打包好了,下载地址:http://files.cnblogs ...

  7. Android基于XMPP的即时通讯2-文件传输

    本文是在上一篇博文Android基于XMPP的即时通讯1-基本对话的基础上,添加新的功能,文件传输 1.初始化文件传输管理类 public static FileTransferManager get ...

  8. Android测试——adb命令

    Adb (Android Debug Bridge)起到调试桥的作用. 通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序.adb采用监听Socket TCP 5554等端口 ...

  9. Android composite adb interface

    我的平板连上电脑后,在eclipse的DDMS中查看不到.很奇怪以前不会,我以为在进程中有其他的adb.exe冲突.查看任务管理器没有看到其他adb.exe进程.然后重启eclipse也不用,重启电脑 ...

随机推荐

  1. Python学习札记(二十七) 函数式编程8 偏函数

    偏函数 NOTE 1.int()函数提供额外的base参数,默认值为10.如果传入base参数,就可以做N进制的转换: #!/usr/bin/env python3 import functools ...

  2. 51Nod 1686 第K大区间(离散化+尺取法)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1686 题意: 思路: 第K大值,所以可以考虑二分法,然后用尺取法去扫描, ...

  3. TCGA三个在线可视化网站

    1.>c-Bioportal: www.cbioportal.org 整合和简化了包括TCGA,ICGC以及GEO等多个癌症基因组数据库的内容,提供友好可视化的界面,可供下载. 主要展示基因的s ...

  4. Docker简单部署Ceph测试集群

    通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的;假设你只有一台机器,装了linux(如Ubuntu)系统和docker环境, ...

  5. Java Spring-Spring框架概述

    2017-11-06 15:55:38 Spring 是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. * 分层:SUN公司提供了EE的三层结构:Web层,业务层,数据访问层 ...

  6. poj2411 轮廓线dp裸题

    题意:用12的骨牌覆盖nm的矩阵的方案数 题解:dp[i][j]表示枚举到了第i行,j状态的方案数,三种转移,向上的,要求不是第一行而且上面的没有覆盖过,向下的,要求不是第一列而且左边没有覆盖过,不放 ...

  7. 剑指 offer面试题22 栈的压入和弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...

  8. HDU 4633 Who's Aunt Zhang ★(Polya定理 + 除法取模)

    题意 用K个颜色给魔方染色,魔方只能整体旋转并且旋转重合的方案算一种,求一共有多少不同的染色方案. 思路 经典的Polya应用,记住正六面体的置换群就可以了,魔方就是每个大面变成9个小面了而已: 本题 ...

  9. 深度学习(七十一)darknet 源码阅读

    深度学习(七十一)darknet 源码阅读

  10. yaf 整理札记

    由于yaf只是一个web框架,只负责处理web请求之类的基本功能,相当简洁,连db库都没有.于是试着把zend 2.2的db库,form库,validator库与yaf结合,写了一个demo.因为ze ...