app性能测试,获取CPU和内存数据并生成折线图

一、实现逻辑:先编写一个shell脚本,然后给脚本推送到设备的:/sdcard/test 目录下 在执行shell脚本来循环获取CPU和内存的数据,获取完数据之后,在使用adb pull给数据文件推出来,然后使用python读取文件,读取的条件是根军包名进行检索的

shell脚本:

#!/system/bin/sh

#

declare n=0

while ((n<=300))

do

echo count=$n

let n++

#himm 0xf840e530 0x1

date >> /sdcard/test/meminfo_carplay.log

echo

dumpsys meminfo com.thunder.carplay >> //sdcard/test/meminfo_carplay.log

date >> /sdcard/test/meminfo_meida.log

echo

dumpsys meminfo com.thunder.carplay:media >> //sdcard/test/meminfo_meida.log

date >> /sdcard/test/top.log

echo

top -b -d 1 -n 1 >> //sdcard/test/top.log

done

获取CPU的命令是通过:top -b -d 1 -n 1

获取内存的命令是通过:dumpsys meminfo com.thunder.carplay:media

二、下边是python脚本获取数据生成折线图

from multiprocessing import Process

from threading import Thread

import xlwt

import xlsxwriter

import os

# from fpsTestOne import parseFPS

path1 = os.path.dirname(__file__)

print(path1)

def cpu_mem_02():

workbook = xlwt.Workbook()

worksheet = workbook.add_sheet('MyWorksheet', cell_overwrite_ok=True)

path_top_file = path1 + "\\test\\top.log"

path_meminfo_carplay_file = path1 + "\\test\\meminfo_carplay.log"

path_meminfo_meida_file = path1 + "\\test\\meminfo_meida.log"

file0 = open(path_top_file) # 打开top.log文件

file1 = open(path_meminfo_carplay_file) # 打开meminfo_carplay.log

file2 = open(path_meminfo_meida_file) # 打开meminfo_meida.log

carplay_cpu_value_list = [] # 定义列表用于存储从文件中获取的特定数据

carplayMedia_cpu_value_list = [] # carplayMedia_cpu_value

carplay_meminfo_list = [] # carplay_meminfo

carplayMedia_meminfo_list = [] # carplayMedia_meminfo

cpu_str_time = [] # cpu 时间

carplay_mem_str_time = [] # 内存时间

carplaymedia_mem_str_time = []

for line in file0.readlines():

# 如果此行不为空

if line.split():

line_split = line.split()

if len(line_split) > 5:

if line_split[4] == "SST":

cpu_str_time.append(line_split[3]) # 获取文件中top值存入的时间

if len(line_split) > 11:

if line_split[11] == 'com.thunder.carplay':

carplay_cpu_value_list.append(float(line_split[8])) # 获取文件中top中carplay进程的cpu

if line_split[11] == 'com.thunder.carplay:media':

carplayMedia_cpu_value_list.append(float(line_split[8])) # 获取文件中top中carplay:media进程的cpu

file0.close()

for line in file1.readlines():

# 如果此行不为空

if line.split():

line_split = line.split()

if len(line_split) > 5:

if line_split[4] == "SST":

carplay_mem_str_time.append(line_split[3]) # 获取文件中meminfo中carplay进程的时间

if len(line_split) == 9:

carplay_meminfo_list.append(round(float(line_split[1]) / 1024, 2)) # 获取文件中memnifo中carplay:media进程的内存信息

file1.close()

for line in file2.readlines():

# 如果此行不为空

if line.split():

line_split = line.split()

if len(line_split) > 5:

if line_split[4] == "SST":

carplaymedia_mem_str_time.append(line_split[3])

if len(line_split) == 9:

carplayMedia_meminfo_list.append(

round(float(line_split[1]) / 1024, 2)) # 获取文件中memnifo中carplay:media进程的内存信息

file2.close()

worksheet.write(0, 0, "carpaly_cpu") # 写入列名

worksheet.write(0, 1, "carpaly_max_cpu")

worksheet.write(0, 2, "carpaly_min_cpu")

worksheet.write(0, 3, "carpaly_avg_cpu")

worksheet.write(0, 4, "carpaly_cpu_time")

worksheet.write(0, 5, "carpalymedia_cpu")

worksheet.write(0, 6, "carpalymedia_max_cpu")

worksheet.write(0, 7, "carpalymedia_min_cpu")

worksheet.write(0, 8, "carpalymedia_avg_cpu")

worksheet.write(0, 9, "carpalymedia_cpu_time")

worksheet.write(0, 10, "carpaly_meminfo")

worksheet.write(0, 11, "carpaly_max_meminfo")

worksheet.write(0, 12, "carpaly_min_meminfo")

worksheet.write(0, 13, "carpaly_avg_meminfo")

worksheet.write(0, 14, "carpaly_mem_time")

worksheet.write(0, 15, "carpalyMedia_meminfo")

worksheet.write(0, 16, "carpalyMedia_max_meminfo")

worksheet.write(0, 17, "carpalyMedia_min_meminfo")

worksheet.write(0, 18, "carpalyMedia_avg_meminfo")

worksheet.write(0, 19, "carpalyMedia_mem_time")

for i in range(len(carplay_cpu_value_list)):

worksheet.write(i + 1, 0, label=float(carplay_cpu_value_list[i]))

worksheet.write(i + 1, 4, label=cpu_str_time[i]) # 往excel中写入cpu数据

print("..........", carplay_cpu_value_list)

max_value = max(carplay_cpu_value_list) # 求cpu 最大值

min_value = min(carplay_cpu_value_list) # 求cpu 最小值

avg = (sum(carplay_cpu_value_list)) / len(carplay_cpu_value_list) # 求cpu平均值

worksheet.write(1, 1, max_value)

worksheet.write(1, 2, min_value)

worksheet.write(1, 3, round(avg, 2))

if len(carplayMedia_cpu_value_list) > 0:

for x in range(len(carplayMedia_cpu_value_list)):

worksheet.write(x + 1, 5, label=float(carplayMedia_cpu_value_list[x]))

worksheet.write(x + 1, 9, label=cpu_str_time[x])

max_value = max(carplayMedia_cpu_value_list)

min_value = min(carplayMedia_cpu_value_list)

avg = (sum(carplayMedia_cpu_value_list)) / len(carplayMedia_cpu_value_list)

worksheet.write(1, 6, max_value)

worksheet.write(1, 7, min_value)

worksheet.write(1, 8, round(avg, 2))

for m in range(len(carplay_meminfo_list)):

worksheet.write(m + 1, 10, label=round((carplay_meminfo_list[m]), 2))

worksheet.write(m + 1, 14, label=carplay_mem_str_time[m])

file1.close()

max_value = max(carplay_meminfo_list)

min_value = min(carplay_meminfo_list)

avg = (sum(carplay_meminfo_list)) / len(carplay_meminfo_list)

worksheet.write(1, 11, round(max_value, 2))

worksheet.write(1, 12, round(min_value, 2))

worksheet.write(1, 13, round(avg, 2))

for j in range(len(carplayMedia_meminfo_list)):

worksheet.write(j + 1, 15, label=round((carplayMedia_meminfo_list[j]), 2))

worksheet.write(j + 1, 19, label=carplaymedia_mem_str_time[j])

file2.close()

max_value = max(carplayMedia_meminfo_list)

min_value = min(carplayMedia_meminfo_list)

avg = (sum(carplayMedia_meminfo_list)) / len(carplayMedia_meminfo_list)

worksheet.write(1, 16, round(max_value, 2))

worksheet.write(1, 17, round(min_value, 2))

worksheet.write(1, 18, round(avg, 2))

# 保存

workbook.save('carplay_Excel_test内存cpu统计.xls') # 保存至excel文件

shengczxt(carplay_cpu_value_list, cpu_str_time, carplayMedia_cpu_value_list, carplay_meminfo_list,

carplay_mem_str_time, carplayMedia_meminfo_list) # 生成折线图

def exe_data():

# 默认统计25次,如需更改需要修改top_count_car.sh中的循环次数n<=24

path_top_count_car = path1 + "/top_count_car.sh"

# 将top_count_car.sh传到指定目录并执行

command1 = "adb shell mkdir /sdcard/test & adb push %s /sdcard/test & adb shell chmod 777 /sdcard/test/top_count_car.sh & adb shell sh /sdcard/test/top_count_car.sh" % path_top_count_car

os.system(command1)

# pull文件至本地对应目录下

command2 = "adb pull /sdcard/test %s & adb shell rm -rf /sdcard/test/*" % path1

os.system(command2)

cpu_mem_02()

def shengczxt(list1, list2, list3, list4, list5, list6=None):

workbook = xlsxwriter.Workbook('new_excel_内存cpu折线图.xlsx') # 创建新的excel

worksheet = workbook.add_worksheet('carpaly') # 创建新的sheet

headings1 = ['carplaycpu占比', 'com.thunder.carplay的cpu'] # 创建表头

headings2 = ['carplay_media占比', 'com.thunder.carplay:media的CPU'] # 创建表头

headings3 = ['carplaymeminfo', 'com.thunder.carplay的meminfo'] # 创建表头

headings4 = ['carplay_media_meminfo', 'com.thunder.carplay:media的meminfo'] # 创建表头

# 将列表放置在data

data = [list1,

list2,

list3,

list4,

list5,

list6]

print(data)

print("**********************************")

# 统计到第几行数据,根据所传的列表长度决定

row_num1 = str(len(list1) + 1)

row_num2 = str(len(list2) + 1)

row_num3 = str(len(list3) + 1)

row_num4 = str(len(list4) + 1)

row_num5 = str(len(list5) + 1)

row_num6 = str(len(list6) + 1)

# 添加表头

worksheet.write_row('A1', headings1)

worksheet.write_row('P1', headings2)

worksheet.write_row('S1', headings3)

worksheet.write_row('U1', headings4)

# 将数据插入到表格中

worksheet.write_column('A2', data[0])

worksheet.write_column('B2', data[1])

worksheet.write_column('P2', data[2])

worksheet.write_column('Q2', data[1])

worksheet.write_column('S2', data[3])

worksheet.write_column('T2', data[4])

worksheet.write_column('U2', data[5])

worksheet.write_column('V2', data[4])

chart_col1 = workbook.add_chart({'type': 'line'}) # 新建图表格式 line为折线图

chart_col2 = workbook.add_chart({'type': 'line'}) # 新建图表格式 line为折线图

chart_col1.add_series( # 给图表设置格式,填充内容

{

'name': '=carpaly!$B$1',

'categories': "carpaly!$B$2:$B$" + row_num1,

'values': '=carpaly!$A$2:$A$' + row_num2,

'line': {'color': 'red'},

}

)

chart_col1.add_series( # 给图表设置格式,填充内容

{

'name': '=carpaly!$Q$1',

'categories': "carpaly!$Q$2:$Q$" + row_num3,

'values': '=carpaly!$P$2:$P$' + row_num2,

'line': {'color': 'blue'},

}

)

chart_col2.add_series( # 给图表设置格式,填充内容

{

'name': '=carpaly!$T$1',

'categories': "carpaly!$T$2:$T$" + row_num4,

'values': '=carpaly!$S$2:$S$' + row_num5,

'line': {'color': 'red'},

}

)

chart_col2.add_series( # 给图表设置格式,填充内容

{

'name': '=carpaly!$V$1',

'categories': "carpaly!$V$2:$V$" + row_num4,

'values': '=carpaly!$U$2:$U$' + row_num6,

'line': {'color': 'blue'},

}

)

chart_col1.set_title({'name': 'Cpu'}) # 设置标题

chart_col1.set_x_axis({'name': "运行时间"})

chart_col1.set_y_axis({'name': '%'}) # 设置图表表头及坐标轴

chart_col2.set_title({'name': 'Meminfo'}) # 设置标题

chart_col2.set_x_axis({'name': "运行时间"})

chart_col2.set_y_axis({'name': 'MB'}) # 设置图表表头及坐标轴

chart_col1.set_style(1) ##设置样式

chart_col2.set_style(1)

worksheet.insert_chart('D10', chart_col1, {'x_offset': 25, 'y_offset': 10}) # 放置图表位置

worksheet.insert_chart('X10', chart_col2, {'x_offset': 25, 'y_offset': 10}) # 放置图表位置

workbook.close()

if __name__ == '__main__':

# 多线程执行,即收集cpu\内存数据又收集fps

# Thread(target=exe_data).start() #收集数据并生成cpu折线图

# Thread(target=parseFPS("com.thunder.carplay",count=10)).start()#生成fps折线图

exe_data()

三、具体的样式见附件

app性能测试,获取CPU和内存数据并生成折线图_第1张图片

你可能感兴趣的:(python)