一、实现原理
通过adb获取到想要测试页面的activity,通过adb命令(adb shell am force-stop 包名)退出app、再使用(adb shell am start -W activity名称)命令启动app到指定页面并获取每次冷启动数值(单位:ms),重复10次退出和开启获取到10个数值,每次获取到数值存入列表,最后排序并去除最大值和最小值取8个值的平均数(降低偶然性)。
二、环境
python3 + adb
三、代码
# coding:utf-8
import os
import time
import xlwt
value = ""
NUMBER = 10
app_name = ""
time_value = ""
flag = 0
values = []
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('My Worksheet')
flag1 = 0
#获取activit
def get_activity():
global value, app_name, flag
cmd = 'adb shell dumpsys window | grep mCurrentFocus > info.csv' #info.csv文件中是当前activity概括信息
d = os.system(cmd)
with open("info.csv", encoding="utf-8", mode="r") as f: #筛选出进程包名和activity
lines = f.readlines()
for line in lines:
if "mCurrentFocus" in line:
if "null" in line:
continue
value1 = line.split('{')[1]
value2 = value1.split(' ')[2]
if "\n" in value2:
value = value2.strip("}\n")
app_name = value.split('/')[0]
else:
value = value2.strip("}")
app_name = value.split('/')[0]
# print(value)
else: #未获取到activity信息则停止脚本
flag = 1
print("未获取到activity信息!脚本终止执行!")
#取出WaitTime数值
def cool_time():
global time_value, values, flag1, NUMBER
for i in range(NUMBER): #控制执行次数
cmd1 = f"adb shell am force-stop {app_name}"
d1 = os.system(cmd1)
time.sleep(5)
cmd = f"adb shell am start -W {value} > time.csv"
d = os.system(cmd)
with open("time.csv", encoding="utf-8", mode="r") as f:
lines = f.readlines()
for line in lines:
if "WaitTime" in line and "\n" in line:
x = line.split(' ')[1]
time_value = x.strip('\n')
elif "WaitTime" in line:
time_value = line.split(' ')[1]
values.append(time_value)
print(time_value)
worksheet.write(i, 0, time_value)
flag1 = i
#计算平均值
def average():
global values, flag1
values.sort()
values_p = values[1:len(values) - 1]
x = 0
for i in values_p:
x += int(i)
y = round(x / len(values_p), 1) #平均值保留一位小数
print(y)
worksheet.write(flag1+2, 0, y)
if __name__ == '__main__':
get_activity()
if flag == 0:
time.sleep(2)
cool_time()
average()
workbook.save('values.xls')
else:
pass
四、使用方式
1.通过adb链接手机
2.打开需要测试的app(页面是需要测试的页面,后续的测试数据都是跳转到该页面的时间)
3.运行代码(等待至完全运行完毕)
4.打开py文件同级目录生成的values.xls文件,如下图上面的10个数值是每次冷启动的响应时间(单位:ms),最下面的数值是去掉最大值和最小值之后的平均值。