python实现循环获取app冷启动时间以及绘制曲线图

一、实现代码

import os
from check_package import check_package
import time
from openpyxl import Workbook
from openpyxl.chart import LineChart,Reference

class StartAppTime(object):
    def __init__(self,packagename,activity,adress,n):
        self.packagename = packagename
        self.activity = activity
        self.adress = adress
        self.num = n
        # 创建一个新的工作薄
        self.wb = Workbook()
        # 获取默认sheet
        self.ws = self.wb.active
        self.ws.title = 'App启动时间'
        self.ws['A1'] = '序号'
        self.ws['B1'] = 'WaitTime'
        self.ws['C1'] = 'TotalTime'
        self.ws['D1'] = 'AvgWaitTime'
        self.ws['E1'] = 'AvgTotalTime'

    # 将数据插入excel
    def InsertExcel(self,waittime,totaltime,i):
        # for i in range(0,self.num):
        # 为X轴添加序列号
        self.ws['A' + str(i + 2)] =i+1
        self.ws['B' + str(i + 2)] =waittime
        self.ws['C' + str(i + 2)] = totaltime

    # 添加折线图
    def linechart(self,count):
        lineimage = LineChart()
        lineimage.title = 'App启动时间'
        lineimage.y_axis.title = '时间/ms'
        # 折线图原始数据显示,min_col:起始列,min_row:起始行,max_col:结束列,max_row:结束行
        data = Reference(self.ws,min_col=2,max_col=3,min_row=1,max_row=count+1)
        lineimage.add_data(data,titles_from_data=True)
        # x轴显示数据
        x_data = Reference(self.ws,min_col=1,max_col=1,min_row=2,max_row=count+1)
        lineimage.set_categories(x_data)
        # 折线图添加的位置
        self.ws.add_chart(lineimage,'G2')

    # 获取启动时间
    def geStarTime(self):
        totaltime_list = []
        waittime_list =[]
        # 循环多次获取
        for i in  range(0,self.num):
            # -S每次启动前强行停止
            command = 'adb shell am start -S -W -n {}/{}'.format(self.packagename,self.activity)
            content = os.popen(command)
            data_list = content.readlines()
            totaltime = data_list[-3].split(':')[1].strip(' \n')
            totaltime_list.append(totaltime)
            waittime = data_list[-2].split(':')[1].strip(' \n')
            waittime_list.append(waittime)
            self.InsertExcel(int(waittime),int(totaltime),i)
            time.sleep(1)
        totaltime_sum = 0
        waittime_sum = 0
        for t in totaltime_list:
            totaltime_sum +=int(t)
        for t in waittime_list:
            waittime_sum +=int(t)
        avgtotaltime = round(totaltime_sum/len(totaltime_list),2)
        avgwaittime = round(waittime_sum/len(waittime_list),2)
        self.ws['D2'] = avgwaittime
        self.ws['E2'] = avgtotaltime
        self.linechart(self.num)
        self.wb.save('AppStartTime.xlsx')
    


if __name__ == '__main__':
    adress = 'app'
    packagename,activity = check_package(adress)
    num = int(input('请输入需要测试的次数:'))
    s = StartAppTime(packagename,activity,adress,num)
    s.geStarTime()

二、运行结果

 

 

posted @ 2022-11-17 10:42  梅梅不想踩坑  阅读(240)  评论(4编辑  收藏  举报