以下运行环境为windows10系统,python3
1.监控启动时间
adb logcat | findstr START 启动监控 ,启动后启动对应app可以获取包名
冷启动
adb shell am start -W -n (上一条命令获取的包名) 启动app
adb shell am force-stop 包名 停止app
热启动
adb shell am start -W -n (上一条命令获取的包名) 启动app
adb shell input keyevent 3 将APP退到后台
1 import os 2 import time 3 import csv 4 5 class App(object): 6 def __init__(self): 7 self.content = "" 8 self.startTime = 0 9 10 #启动App 11 def LaunchApp(self): 12 cmd = 'adb shell am start -W -n com.android.browser/.BrowserActivity' 13 self.content = os.popen(cmd) 14 15 #停止app(冷启动) 16 def StopApp(self): 17 cmd = 'adb shell am force-stop com.android.browser' 18 os.popen(cmd) 19 20 #停止app(热启动) 21 def StopApp2(self): 22 cmd = 'adb shell input keyevent 3' 23 os.popen(cmd) 24 25 #获取启动时间 26 def GetLaunchedTime(self): 27 for line in self.content.readlines(): 28 if "ThisTime" in line: 29 self.startTime = line.split(":")[1] 30 break 31 return self.startTime 32 33 #控制类 34 class Controller(object): 35 def __init__(self,count): 36 self.app = App() 37 self.counter = count 38 self.alldata = [("timestamp","elapsedtime")] 39 40 #单次测试过程 41 def testprocess(self): 42 self.app.LaunchApp() 43 elapsedtime = self.app.GetLaunchedTime() 44 self.app.StopApp() 45 currenttime = self.getCurrentTime() 46 self.alldata.append((currenttime,elapsedtime)) 47 48 #多次执行测试过程 49 def run(self): 50 while self.counter > 0: 51 self.testprocess() 52 self.counter = self.counter - 1 53 54 #获取当前时间戳 55 def getCurrentTime(self): 56 currentTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) 57 return currentTime 58 59 #数据的存储 60 def SaveDataToCSV(self): 61 csvfile = open('startTime.csv','w') 62 writer = csv.writer(csvfile) 63 writer.writerows(self.alldata) 64 csvfile.close() 65 66 if __name__ == "__main__": 67 controller = Controller(10) 68 controller.run() 69 controller.SaveDataToCSV()
2.CPU利用率数据监控
adb shell dumpsys cpuinfo | findstr packagename
1 import time 2 import os 3 import csv 4 5 class Controller(object): 6 def __init__(self,count): 7 self.counter = count 8 self.alldata = [("timestamp","cpustatus")] 9 10 #单次测试过程 11 def testprocess(self): 12 result = os.popen("adb shell dumpsys cpuinfo | findstr com.android.browser") 13 for line in result.readlines(): 14 cpuvalue = line.split("%")[0] 15 break 16 currenttime = self.getCurrentTime() 17 self.alldata.append((currenttime,cpuvalue)) 18 19 #多次执行过程 20 def run(self): 21 while self.counter > 0: 22 self.testprocess() 23 self.counter = self.counter - 1 24 time.sleep(5) 25 26 #获取当前时间戳 27 def getCurrentTime(self): 28 currentTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) 29 return currentTime 30 31 #数据的存储 32 def SavaDataToCSV(self): 33 csvfile = open('cpustatus.csv','w') 34 writer = csv.writer(csvfile) 35 writer.writerows(self.alldata) 36 csvfile.close() 37 38 if __name__ == '__main__': 39 controller = Controller(10) 40 controller.run() 41 controller.SavaDataToCSV()
3.流量监控
获取进程id
adb shell ps | findstr packagename
获取进程id流量
adb shell cat /proc/pid/net/dev
1 import csv 2 import os 3 import string 4 import time 5 6 #控制类 7 class Controller(object): 8 def __init__(self,count): 9 #定义测试的次数 10 self.counter = count 11 #定义收集数据的数组 12 self.alldata = [("timestamp","traffic")] 13 14 #单次测试过程 15 def testprocess(self): 16 #执行获取进程命令 17 result = os.popen("adb shell ps | findstr com.android.browser ") 18 #获取进程id 19 pid = result.readlines()[0].split(" ")[5] 20 21 #获取进程id使用的流量 22 traffic = os.popen("adb shell cat /proc/"+pid+"/net/dev") 23 receive = 0 24 transmit = 0 25 receive2 = 0 26 transmit2 = 0 27 for line in traffic: 28 if "eth0" in line: 29 #将所有空行换成# 30 line = "#".join(line.split()) 31 #按#号拆分,获取收到和发出的流量 32 receive = line.split("#")[1] 33 transmit = line.split("#")[9] 34 elif "eth1" in line: 35 #将所有空行换成# 36 line = "#".join(line.split()) 37 #按#号拆分,获取收到和发出的流量 38 receive2 = line.split("#")[1] 39 transmit2 = line.split("#")[9] 40 41 #计算所有流量的之和 42 alltraffic = int(receive) + int(transmit) + int(receive2) + int(transmit2) 43 #按KB计算流量值 44 alltraffic = alltraffic/1024 45 #获取当前时间 46 currenttime = self.getCurrentTime() 47 #将获取到的数据存到数组中 48 self.alldata.append((currenttime,alltraffic)) 49 50 #多次测试过程控制 51 def run(self): 52 while self.counter >0: 53 self.testprocess() 54 self.counter = self.counter - 1 55 #每5秒钟采集一次数据 56 time.sleep(5) 57 58 #获取当前时间戳 59 def getCurrentTime(self): 60 currentTime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) 61 return currentTime 62 63 #数据的存储 64 def SaveDataToCSV(self): 65 csvfile = open('traffic.csv','w') 66 writer = csv.writer(csvfile) 67 writer.writerows(self.alldata) 68 csvfile.close() 69 70 if __name__ == "__main__": 71 controller = Controller(5) 72 controller.run() 73 controller.SaveDataToCSV()
4.电量测试
获取电量
adb shell dumpsys battery
切换非充电状态
adb shell dumpsys battery set status 1
1 import csv 2 import os 3 import time 4 5 #控制类 6 class Controller(object): 7 def __init__(self,count): 8 # 定义测试的次数 9 self.counter = count 10 # 定义收集数据的数组 11 self.alldata = [("timestamp", "power")] 12 13 def testprocess(self): 14 #执行获取电量的命令 15 result = os.popen("adb shell dumpsys battery") 16 #获取电量的level 17 for line in result: 18 if "level" in line: 19 power = line.split(":")[1] 20 21 #获取当前时间 22 currenttime = self.getCurrentTime() 23 #将获取到的数据存到数组中 24 self.alldata.append((currenttime,power)) 25 26 def run(self): 27 #设置手机进入非充电状态 28 os.popen("adb shell dumpsys battery set status 1") 29 while self.counter > 0: 30 self.testprocess() 31 self.counter = self.counter - 1 32 #每5秒钟采集一次数据 33 time.sleep(5) 34 35 def getCurrentTime(self): 36 currentTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 37 return currentTime 38 39 #数据的存储 40 def SaveDataToCSV(self): 41 csvfile = open('power.csv','w') 42 writer = csv.writer(csvfile) 43 writer.writerows(self.alldata) 44 csvfile.close() 45 46 if __name__ == "__main__": 47 controller = Controller(5) 48 controller.run() 49 controller.SaveDataToCSV()
5.内存监控
获取内存数据采集(1秒钟刷新1次)
adb shell top -d 1 > meminfo
type meminfo | findstr packagename
1 import csv 2 import os 3 import time 4 5 class Controller(object): 6 def __init__(self): 7 self.alldata = [("id", "vss","rss")] 8 9 #分析数据 10 def analyzedata(self): 11 content = self.readfile() 12 i = 0 13 for line in content: 14 if "com.android.browser" in line: 15 print(line) 16 line = "#".join(line.split()) 17 vss = line.split("#")[5].strip("K") 18 rss = line.split("#")[6].strip("K") 19 20 #将获取到的数据存到数组中 21 self.alldata.append((i,vss,rss)) 22 i = i+1 23 #数据的存储 24 def SaveDataToCSV(self): 25 csvfile = open('meminfo.csv','w') 26 writer = csv.writer(csvfile) 27 writer.writerows(self.alldata) 28 csv.close() 29 30 #读取数据文件 31 def readfile(self): 32 mfile = open("meminfo","r") 33 content = mfile.readlines() 34 mfile.close() 35 return content 36 37 if __name__ == "__main__": 38 controller = Controller() 39 controller.analyzedata() 40 controller.SaveDataToCSV()
6.
FPS:每秒的帧数 通过设置-系统-开发人员选项-GPU呈现模式分析进行查看
过渡渲染:描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次
通过设置-系统-开发人员选项-调试GPU过渡绘制