CPU---监控值的获取方法、脚本实现和数据分析

1、获取CPU状态数据

adb shell dumpsys cpuinfo | findstr packagename

自动化测试脚本见cpustatus.py

数据分析:做曲线图,可看出随着用户使用,CPU使用率逐渐增高,达到40%多,40%多是否是合理的值呢?

需要取经验值,再测20-30分钟,看CPU使用率是不是恒定的,如果是恒定的,并且这个值又在当前系统支持下的一个合理的范围,那么就是合理的。如果CPU使用率一直上升不下降到80%多,那么这个软件就有问题,应该去找开发人员解决。

流量--监控值的获取方法、脚本实现和数据分析

1、获取当前进程ID 指令

adb shell ps | findstr packagename

2、获取进程ID 流量数据

adb shell cat/proc/id/net/dev

Receive  代表APP接受的数据  Transmit 代表App发出的请求的数据

流量 = Receive + Transmit

lo:代表本地(localhost),不用统计

eth0, eth1:代表有两个网卡,都会有流量的输出,需要统计流量值。

滑动页面,使它有流量消耗,前后流量的差值(两次获取流量数据)就是流量消耗值。

3、代码见traffic.py ,代码有问题,还没解决

电量--监控值的获取方法

获取电量

adb shell dumpsys battery   (看level值)

首先保证手机是非充电状态

切换非充电状态

adb shell dumpsys battery set status 1

代码power.py

内存--监控值的获取方法

获取内存

adb shell top

VSS - Virtual Set Size  虚拟耗用内存

RSS - Resident Set Size 实际使用物理内存

数据的采集:

adb shell top -d 1  #数据每一秒刷新一次

把数据重定向到meminfo

adb shell top -d 1 > meminfo

#/usr/bin/python#encoding:utf-8import csvimport osimport time
#控制类class Controller(object):    def __init__(self, count):        #定义测试的次数        self.counter = count        #定义收集数据的数组        self.alldata = [("timestamp", "power")]
    #单次测试过程    def testprocess(self):        #执行获取电量的命令        result = os.popen("adb shell dumpsys battery")        #获取电量的level        for line in result:            if "level" in line:                power = line.split(":")[1]
        #获取当前时间        currenttime = self.getCurrentTime()        #将获取到的数据存到数组中        self.alldata.append((currenttime, power))
    #多次测试过程控制    def run(self):        #设置手机进入非充电状态        os.popen("adb shell dumpsys battery set status 1")        while self.counter >0:            self.testprocess()            self.counter = self.counter - 1            #每5秒钟采集一次数据            time.sleep(5)
    #获取当前的时间戳    def getCurrentTime(self):        currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())        return currentTime
    #数据的存储    def SaveDataToCSV(self):        csvfile = file('meminfo.csv', 'wb')        writer = csv.writer(csvfile)        writer.writerows(self.alldata)        csvfile.close()
if __name__ == "__main__":    controller = Controller(5)    controller.run()    controller.SaveDataToCSV()

Android App性能测试之二:CPU、流量的更多相关文章

  1. Android App性能测试之adb命令

    本篇文章总结了Android App性能测试过程中常用的adb命令.通过这些adb命令,可以查看App的性能数据,为评判性能好坏作参考. CPU相关 显示占用CPU最大的5个应用 adb shell ...

  2. Android APP 性能测试之 GT 工具

    一.介绍: GT(随身调)是 APP 的随身调测平台,它是直接运行在手机上的"集成调测环境"(IDTE, Integrated Debug Environment).利用 GT,仅 ...

  3. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  4. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  5. 包建强的培训课程(9):Android App性能优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  6. android app性能优化大汇总

    这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度:  图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...

  7. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  8. 十大技巧优化Android App性能

    无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的. 那么,如何能开发出更高性能的Android App?相信是软 ...

  9. 优化Android App性能?十大技巧必知!

    无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件 ...

随机推荐

  1. Zabbix 3.4.7针对一些主机设置期间维护

    场景说明: 由于公司有些主机设置了定时开机关机,每次开机关机得时候都会发邮件告警,每次都需要值班人员提醒,为了处理这种无效告警,可以在zabbix中设置维护 zabbix中的维护---维护期间:用来设 ...

  2. php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】

    本文实例总结了php常用数组array函数.分享给大家供大家参考,具体如下: array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 案例: <?php ...

  3. day21(1)---python的内存管理

    垃圾回收机制: 不能被程序访问到的数据,就称之为垃圾. 引用计数:引用计数是用来记录值的内存地址被记录的次数的 每一次对值地址的引用都可以使得该值的引用计数+1 每一次对值地址的释放都可以使得该值的引 ...

  4. i春秋 百度杯”CTF比赛 十月场 login

    出现敏感的信息,然后进行登录 登录成功发现奇怪的show 然后把show放到发包里面试一下 出现了源码,审计代码开始 出flag的条件要user 等于春秋 然后进行login来源于反序列化后的logi ...

  5. 前端——HTML

    HTML HTML叫做超文本标记语言,是一种制作万维网页面标准语言.相当于定义一套规则,大家都来遵守它,这样浏览器就可以去解释它. 浏览器负责将标签翻译成用户看得懂的格式,呈现给用户. 作为开发者需要 ...

  6. go笔记-值传递、引用传递

    eg: func sliceModify(slice []int) { // slice[0] = 88 slice = append(slice, ) } func main() { slice : ...

  7. CF618F Double Knapsack 构造、抽屉原理

    传送门 首先,选取子集的限制太宽了,子集似乎只能枚举,不是很好做.考虑加强限制条件:将"选取子集"的限制变为"选取子序列"的限制.在接下来的讨论中我们将会知道: ...

  8. Python dict和set的实现原理

    在python的dict中间进行查找某个key操作时,查找所需时间不会随着dict中键值对数量增多而变长,(时间复杂度为O(1))但是list中就会(时间复杂度为O(N)),这是因为list查询实现的 ...

  9. openstack搭建之-neutron配置(11)

    一.base节点设置 mysql -u root -proot CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutr ...

  10. C#中的IntPtr

    IntPtr是一个类,用于包装调用WindowsAPI函数的指针,根据平台的不同,底层指针可以是32位或64位:它用以表示指针或句柄的平台特定类型,C#中主要用它调用C++\C封装的DLl库:下面主要 ...