1.启动(注意:获取app启动包名和启动名(手机需要先打开对应app))
测试标准:冷启动时间不超过1.5s, 热启动不超过1s
获取软件包名:adb shell "dumpsys window | grep mCurrentFocus"
①冷启动(杀掉软件进程,使用首个activity启动命令)
1.首先获取软件包以及首个activity
通过adb shell monkey
来获取,如下命令
adb shell monkey -p com.citiccard.mobilebank -vvv 1
获取得到首个Activity:com.zhd.maxsurvey/.SplashActivity
2.获取首个activity启动时间
首个activity启动时间(如已经启动软件则需要杀掉进程重新使用该命令启动)
adb shell am start -W com.zhd.maxsurvey/.SplashActivity
在第①个时间段内,AMS 创建 ActivityRecord 记录块和选择合理的 Task、将当前Resume 的 Activity 进行 pause
在第②个时间段内,启动进程、调用无界面 Activity 的 onCreate() 等、 pause/finish 无界面的 Activity
在第③个时间段内,调用有界面 Activity 的 onCreate、onResume
参考文档:https://blog.51cto.com/u_14496797/5360305
后续总结该段落
ThisTime : ThisTime 表示一连串启动 Activity 的最后一个 Activity 的启动耗时
TotalTime : 启动一连串的 Activity 总耗时.(有几个Activity 就统计几个),表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用 Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时
WaitTime : 应用进程的创建过程 + TotalTime,就是总的耗时,包括前一个应用 Activity pause 的时间和新应用启动的时间
(如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime)
重复测试冷启动需要杀掉进程
停止APP进程,并且清除这个APP进程产生的所有数据
adb shell pm clear package
强制停止APP进程,不会清除APP进程在系统中产生的数据
adb shell am force-stop package
②热启动(命令与冷启动命令一致,App退到后台,不杀进程,命令同冷启动)
adb shell am start -W com.zhd.maxsurvey/.SplashActivity
冷启动app类
class App():
def __init__(self,packagename,firstActivity):
"""构造方法"""
#包名
self.packagename = packagename
#首个Activity
self.firstActivty= firstActivity
self.content="" #执行命令的文本
self.startTime="" #启动的时间
def startApp(self):
"""开启app"""
cmd = "adb shell am start -W -n "+self.packagename+self.firstActivty
self.content = os.popen(cmd)
print(type(self.content))
def stopApp(self):
"""停止app"""
cmd = "adb shell am force-stop"+self.packagename
os.popen(cmd)
def getStartTime(self):
"""获取启动时间"""
for line in self.content.readlines():
if "ThisTime" in line:
self.startTime = line.split(":")[1]
break
return self.startTime
冷启动管理运行类(运行次数,运行时间,文件保存)
class Manager():
def __init__(self,count,App):
self.count= count
self.app =App
self.file = open("starttime.txt","w")
def run(self):
while self.count>0:
self.app.startApp()
time.sleep(2)
#获取时间
self.file.write(self.app.getStartTime())
self.app.stopApp()
time.sleep(2)
self.count=self.count-1
#关闭资源
self.file.close()
调用例子:
app = App(packagename, firstActivity)
m = Manager(6, app)#运行6次
m.run()