Android App性能测试之二:CPU、流量

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()

原文地址:https://www.cnblogs.com/toudoubao/p/6844777.html