zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    SQLServer数据库中开启CDC导致“事务日志空间被占满,原因为REPLICATION”的原因分析和解决办法
    译:SQL Server的Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息
    SQLServer中间接实现函数索引或者Hash索引
    MySQL缓存分类和配置
    MySQL系统变量配置基础
    MySQL索引统计信息更新相关的参数
    Sql Server优化---统计信息维护策略
    SQL Server 用角色(Role)管理数据库权限
    sp_executesql 或者 EXECUTE 执行动态sql的权限问题
    关于T-SQL重编译那点事,内联函数和表值函数在编译生成执行计划的区别
  • 原文地址:https://www.cnblogs.com/toudoubao/p/6844777.html
Copyright © 2011-2022 走看看