环境搭建没什么说的,我用的是python3+pycharm,jdk和sdk的android环境,总体就是用python写一个脚本来对app执行指定的冷热启动,并且记录下启动时间的数据,并对数据进行一个汇总分析
所以在思路上,分为启动app脚本和操作app脚本
启动脚本分为启动app,关闭app,获取启动耗时命令,也就是三个方法
操作脚本分为单词操作,多次操作和写入csv操作
# -*- coding: utf-8 -*-
# @Time : 2020/4/6 12:11
# @Author : Willam.zja
# @FileName: time_monitor.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/enemy_sprites
import os
import sys
sys.path.append(os.getcwd())
import time
import csv
#app类--启动app方法
class App(object):
def __init__(self):
self.content = ''
self.startTime = 0
def launchApp(self):
"""
启动app方法
:return:
"""
cmd = 'adb shell am start -W -n com.android.browser/.BrowserActivity'
self.content = os.popen(cmd).readlines()
return self.content
def stopApp(self,flag=True):
"""
停止app
:return:
"""
if flag == True:
cmd = 'adb shell am force-stop com.android.browser'
else:
cmd = 'adb shell input keyevent 3'
os.system(cmd)
def getLaunchedTime(self):
"""
获取启动时间
:return:
"""
for i in self.content:
if 'ThisTime' in i:
self.startTime = i.split(':')[1].strip()
break
return self.startTime
class Controller(object):
def __init__(self,count=1,flag=True):
self.flag = flag
self.counter = count
self.app = App()
self.all_data = [('timestamp','elapsedtime')]
#单次测试过程
def testProcess(self):
self.app.launchApp()
time.sleep(3)
elapsed_time = self.app.getLaunchedTime()
self.app.stopApp(flag=self.flag)
time.sleep(2)
current_time = self.getCurrentTime()
self.all_data.append((current_time,elapsed_time))
print(self.all_data)
#多次测试过程
def run(self):
x = self.counter+1
while self.counter > 0:
print('第{}次执行'.format(x - self.counter))
self.testProcess()
self.counter -= 1
#获取格式化的时间戳
def getCurrentTime(self):
current_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
return current_time
def saveDataToCsv(self):
if self.flag == True:
fn = 'coldStartTime.csv'
else:
fn = 'hotStartTime.csv'
with open(fn,'w') as f:
writer = csv.writer(f)
writer.writerows(self.all_data)
if __name__ == '__main__':
controller = Controller(count=10,flag=False)
controller.run()
controller.saveDataToCsv()
冷启动和热启动的响应时间就会记录在csv中,去除第一次数据,会后边的数据平均值分析,绘制图表即可