一、实现原理

通过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),最下面的数值是去掉最大值和最小值之后的平均值。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐