秉着个人意愿打算把python+rf接口自动进行彻底结束再做些其它方面的输出~但事与愿违,但领导目前注重先把专项测试方面完成,借此,先暂停python+rf(主要是与Jenkins集成+导入DB+微信告警)接口自动化,且目前个人觉得前面讲解的python+rf可以说基本完成了接口自动化测试前期和后续的核心工作了,转而介绍下app专项测试方面的指标检查~

介绍app专项自动化具体实现前,先谈一下我的思路(如下图),若有不妥,欢迎斧正~

步骤一:循环执行&指标获取,准确点来说是实现循环启动某个页面(adb shell am start)时指标数据获取

具体实现可以看下核心代码

__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8

import os  
import time
import datetime
import sys
import subprocess

import xlwt
from tempfile import TemporaryFile
from xlwt import Workbook

dir = r'C:\Users\niuzhigang\Desktop\packet\autoScript'
print dir

now_time = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
print now_time

print (os.getcwd())
os.chdir(dir)
print (os.getcwd())

if os.path.exists("TotalTime.log")==True:
    os.remove("TotalTime.log")
if os.path.exists("StartAppDalvikPss.log")==True:
    os.remove("StartAppDalvikPss.log")
if os.path.exists("StartAppNativePss.log")==True:
    os.remove("StartAppNativePss.log")
if os.path.exists("StartAppTOTALPss.log")==True:
    os.remove("StartAppTOTALPss.log")
if os.path.exists("AppCpuThr.log")==True:
    os.remove("AppCpuThr.log")
    
restartAppCrashlog = os.popen("adb logcat | findstr /I XXX | findstr /I Crash >> XXXCrash.log")
restartAppAlllog = os.popen("adb logcat | findstr /I XXX  >> XXXAll.log")
restartAllCrashlog = os.popen("adb logcat | findstr /I Crash >> AllCrash.log")

for i in  range(1000):
    try:
        restartAppTotalTime = os.popen("adb shell am start -W  -S com.XXX.app.ui/.homepage.LaunchActivity | findstr TotalTime >> TotalTime.log")
        time.sleep(5)
        #print restartAppTotalTime.read();
        for x in range(5):
            StartAppTOTALPss = os.popen("adb shell dumpsys meminfo -a com.XXX.app.ui | findstr TOTAL >> StartAppTOTALPss.log")  
            #print StartAppTOTALPss.read();
            StartAppTOTALPss = os.popen("adb shell dumpsys meminfo -a com.XXX.app.ui | findstr Native  | findstr Heap >> StartAppNativePss.log")  
            #print StartAppTOTALPss.read();
            StartAppTOTALPss = os.popen("adb shell dumpsys meminfo -a com.XXX.app.ui | findstr Dalvik  | findstr Heap >> StartAppDalvikPss.log")  
            #print StartAppTOTALPss.read();
            restartAppCpuThr = os.popen("adb shell top  -d 1 -n 2 -m 1 -s cpu | findstr com.XXX.app.ui >> AppCpuThr.log")
            #print restartAppCpuThr.read();
        time.sleep(2)
        #强制杀死进程
        StopApp = os.popen("adb shell am force-stop com.XXX.app.ui")
        time.sleep(1)
        StartApp = os.popen("adb shell am start -W  -n com.XXX.app.ui/.homepage.LaunchActivity")
        time.sleep(5)
        OnceStopApp = os.popen("adb shell am force-stop com.XXX.app.ui")
        time.sleep(1)
    except Exception,e:
        print Exception,":",e
        #print "在没有出现异常的情况下执行的循环次数为:"+i
        #出现异常点击返回键退出APP程序
        BackKeyStart = os.popen("adb shell input keyevent 4")
        time.sleep(1)
        BackKeyEnd = os.popen("adb shell input keyevent 4")
        #出现异常按home键
        HomeKeyStart = os.popen("adb shell input keyevent 3")
        #强制杀死进程
        StopApp = os.popen("adb shell am force-stop com.XXX.app.ui")
        time.sleep(1)
        continue
        
    
    

首先针对这个专项目前我只收集了cpu、Thr、totaltime、jni层和java层的pss、crash

感兴趣的同学可以收集battery,network等~

再说明下第一次force-stop了为什么我又做了app的重启操作之后再force-stop app呢?

原因1:不属于重启的异常导致手机异常没办法再次拉起app(系统异常),原因2:内部异常也可能导致无法下次start正常以至于程序出现假死的情况。

因此在正常start的情况下收集完本次循环中指标数据又做了下面的start和force-stop操作,当然这次启动我是不记录指标的~

最后说明下为什么做了except操作,可能系统导致程序运行出现异常的情况下也是有可能的,所以做了一系列的手机回到home操作后重启app后,跳出本次异常继续执行下一个循环~

当然,上面的except不一定都是出现这个情况,可以根据实际情况来下,当然写的多了异常考虑我觉得会更好~因为不能在设定的循环过程中没执行完就结束本次循环~

步骤二:指标处理&指标导入,准确点来说就是通过adb命令无法把每项具体的指标以一个list方法展现,因此我们要对搜集到的指标数据按照一定格式进行处理,把每个指标进行剥离后导入excel或者DB

说明下,我写的导入DB的脚本不是从txt里面读取的数据~而是excel

首先大家可以看下从txt读入excel(主要包括数据剥离和数据计算)

__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8
import os  
import time
import datetime

import xlwt
from tempfile import TemporaryFile
from xlwt import Workbook

dir = r'C:\Users\niuzhigang\Desktop\packet\autoScript'
print dir

now_time = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
print now_time

print (os.getcwd())
os.chdir(dir)
print (os.getcwd())

#创建文件
file = Workbook(encoding='utf-8')
#创建sleet
tableTotalTime = file.add_sheet('TotalTime')
#每列给出名称
tableTotalTime.write(0,0,'TotalTime')
#写出第二列的平均值名称
tableTotalTime.write(0,1,'AvgTotalTime')



TotalTimefpath = r'C:\Users\niuzhigang\Desktop\packet\autoScript\TotalTime.log'
#打开文件并读取
f = open(TotalTimefpath,'r')
line = f.readlines()
len = 1 
SumTotalTime = 0
for item in line:
    #转为list
    list = item.split( )
    TotalTime = list[1]
    print u"TotalTime耗时为:"+TotalTime+"ms"
    tableTotalTime.write(len,0,float(TotalTime))
    len = len + 1
        #获取totaltime总值
        SumTotalTime += float(TotalTime)
print u"TotalTime总耗时为:"+str(SumTotalTime)
#求平均值
AvgTotalTimeint = SumTotalTime/(len-1)
print  AvgTotalTimeint
#获取TotalTime的平均值且保留2位小数
AvgTotalTime = float('%.2f' % AvgTotalTimeint)
tableTotalTime.write(1,1,AvgTotalTime)
print AvgTotalTime
f.close()
#保存excel并命名
file.save('TotalTime.xlsx')

#创建文件
file = Workbook(encoding='utf-8')
#创建sleet
tableTOTALPss = file.add_sheet('TOTALPss')
#每列给出名称
tableTOTALPss.write(0,0,'TOTALPss')
#写出第二列的平均值名称
tableTOTALPss.write(0,1,'AvgTOTALPss')




TOTALPssfpath = r'C:\Users\niuzhigang\Desktop\packet\autoScript\StartAppTOTALPss.log'
#打开文件并读取
f = open(TOTALPssfpath,'r')
line = f.readlines()
len = 1
SumTOTALPss = 0
for item in line:
    #转为list
    list = item.split( )
    TOTALPss = list[1]
    print u"TOTALPss占用大小为:"+TOTALPss+"Kb"
    # print TOTALPss 并存入excel为整数类型
    tableTOTALPss.write(len,0,float(TOTALPss))
    len = len + 1
         #获取TOTALPss总值
        SumTOTALPss += float(TOTALPss)
    print len
print u"SumTOTALPss总pss为:"+str(SumTOTALPss)
#求平均值
AvgTOTALPssint = SumTOTALPss/(len-1)
print  AvgTOTALPssint
#获取TOTALPss的平均值且保留2位小数
AvgTOTALPss = float('%.2f' % AvgTOTALPssint)
tableTOTALPss.write(1,1,AvgTOTALPss)
print AvgTOTALPss
f.close()
#保存excel并命名
file.save('TOTALPss.xlsx')



#创建文件
file = Workbook(encoding='utf-8')
#创建sleet
tableNativePss= file.add_sheet('NativePss')
#每列给出名称
tableNativePss.write(0,0,'NativePss')
#写出第二列的平均值名称
tableNativePss.write(0,1,'AvgNativePss')


NativePssfpath = r'C:\Users\niuzhigang\Desktop\packet\autoScript\StartAppNativePss.log'
#打开文件并读取
f = open(NativePssfpath,'r')
line = f.readlines()
len = 1
SumNativePss = 0
for item in line:
    #转为list
    list = item.split( )
    NativePss = list[2]
    print u"NativePss占用大小为:"+NativePss+"Kb"
    # print Cpu  并存入excel为整数类型
    tableNativePss.write(len,0,float(NativePss))
    len = len + 1
        #获取TOTALPss总值
        SumNativePss += float(NativePss)
print u"SumNativePss总pss为:"+str(SumNativePss)
#求平均值
AvgNativePssint = SumNativePss/(len-1)
print  AvgNativePssint
#获取TOTALPss的平均值且保留2位小数
AvgNativePss = float('%.2f' % AvgNativePssint)
tableNativePss.write(1,1,AvgNativePss)
print AvgNativePss
f.close()
#保存excel并命名
file.save('NativePss.xlsx')




#创建文件
file = Workbook(encoding='utf-8')
#创建sleet
tableDalvikPss= file.add_sheet('DalvikPss')
#每列给出名称
tableDalvikPss.write(0,0,'DalvikPss')
#写出第二列的平均值名称
tableDalvikPss.write(0,1,'AvgDalvikPss')



DalvikPssfpath = r'C:\Users\niuzhigang\Desktop\packet\autoScript\StartAppDalvikPss.log'
#打开文件并读取
f = open(DalvikPssfpath,'r')
line = f.readlines()
len = 1
SumDalvikPss = 0
for item in line:
    #转为list
    list = item.split( )
    DalvikPss = list[2]
    print u"DalvikPss占用大小为:"+DalvikPss+"Kb"
    # print Cpu  并存入excel为整数类型
    tableDalvikPss.write(len,0,float(DalvikPss))
    len = len + 1
        #获取TOTALPss总值
        SumDalvikPss += float(DalvikPss)
print u"SumDalvikPss总pss为:"+str(SumDalvikPss)
#求平均值
AvgDalvikPssint = SumDalvikPss/(len-1)
print  AvgDalvikPssint
#获取TOTALPss的平均值且保留2位小数
AvgDalvikPss = float('%.2f' % AvgDalvikPssint)
tableDalvikPss.write(1,1,AvgDalvikPss)
print AvgDalvikPss
f.close()
#保存excel并命名
file.save('DalvikPss.xlsx')



#创建文件
file = Workbook(encoding='utf-8')
#创建sleet
tableCpu = file.add_sheet('AppCpuResult')
tableThr = file.add_sheet('AppThrResult')
#每列给出名称
tableCpu.write(0,0,'%Cpu')
tableThr.write(0,0,'Thr')
#写出第二列的平均值名称
tableCpu.write(0,1,'AvgCpu')
tableThr.write(0,1,'AvgThr')

AppCpuThrfpath = r'C:\Users\niuzhigang\Desktop\packet\autoScript\AppCpuThr.log'

#打开文件并读取
f = open(AppCpuThrfpath,'r')
line = f.readlines()
len = 1
SumCpu = 0
SumThr = 0
for item in line:
    #转为list
    list = item.split( )
    cpu = list[2]
    Thr = list[4]
    print u"cpu利用率为:"+cpu+u" 线程数为:"+ Thr
    # 截取字符串%
    Cpu = cpu.rstrip('%')
    # print Cpu  并存入excel为整数类型
    tableCpu.write(len,0,float(Cpu))
    tableThr.write(len,0,float(Thr))
    len = len + 1
        #获取cpu总值
        SumCpu += float(Cpu)
        #获取cpu总值
        SumThr += float(Thr)
print u"SumCpu总cpu为:"+str(SumCpu)
print u"SumThr总thr为:"+str(SumThr)
#求平均值
AvgCpuint = SumCpu/(len-1)
AvgThrint = SumThr/(len-1)
print  AvgCpuint
print  AvgThrint
#获取Cpu和Thr的平均值且保留2位小数
AvgCpu = float('%.2f' % AvgCpuint)
AvgThr = float('%.2f' % AvgThrint)
tableCpu.write(1,1,AvgCpu)
tableThr.write(1,1,AvgThr)
print AvgCpu
print AvgThr
f.close()
#保存excel并命名
file.save('AppCpuThrResult.xlsx')




if os.path.exists("TotalTime.log")==True:
    os.rename("TotalTime.log",now_time+"TotalTime.log")
if os.path.exists("StartAppTOTALPss.log")==True:
    os.rename("StartAppTOTALPss.log",now_time+"StartAppTOTALPss.log")
if os.path.exists("StartAppNativePss.log")==True:
    os.rename("StartAppNativePss.log",now_time+"StartAppNativePss.log")
if os.path.exists("StartAppDalvikPss.log")==True:
    os.rename("StartAppDalvikPss.log",now_time+"StartAppDalvikPss.log")
if os.path.exists("AppCpuThr.log")==True:
    os.rename("AppCpuThr.log",now_time+"AppCpuThr.log")
    


这个脚本我目前一方面主要是完成数据剥离和计算,另一方面进行了保存,保留了历史记录!!!详细的说明都是excel操作,我就不多说了,不懂的可以私信或者留下评论~

好了,数据导入excel,数据从txt转入excel大家可以从下图(拿CPU举例~)视觉上看下变化,数据怎么剥离、怎么导入、怎么计算的~

TXT格式的数据截图:

EXCEL格式的数据截图:

 

一般来说接下来就要考虑根据数据出图~那我们就按照一般的思路来出图,根据excel列表数据画图~

借助matplotlib插件库,这个我就粗略的介绍下根据excel列表数据如何自动化画出伸缩图,就给大家晒下py脚本吧~

不多余介绍,都是简单方法的使用完成图的自动伸缩,因为这个方式感觉很笨拙~为什么笨拙?下面就会讲~

__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8
import numpy as np
import matplotlib.pyplot as plt

#X,Y轴数据
y = [20,59,11,12,16,20,15,12,16,21,34,48,11,15,18,16,17,17,11,25,16,9,10,18,16,18,18]
#计算list y的长度
ylen = len(y)
#print ylen 
#(开始值、终值 、元素个数作为X坐标目的实现X轴自动伸缩)
xArray = np.linspace(0,ylen,ylen,endpoint=False)
#list与array互相转换,转为list
x = xArray.tolist()
print x
    
#创建绘制图像像素大小
#plt.figure(figsize=(15,10))
#在当前绘图对象绘图(XY轴数据,红色实线,线宽度)
plt.plot(x,y,"c",linewidth=1)
#X轴标题
#plt.xlabel("line")
#Y轴标题
plt.ylabel("date")
#图标题
plt.title("Cpu%")
#显示网格
plt.grid(True)
#显示图
plt.show()
#保存图
plt.savefig(r"C:\Users\niuzhigang\Desktop\packet\autoScript\Cpu.png")

说了通过excel画图很笨拙,为什么?原因一:不是UI的方式展现,看起来不方便(想想如果做成报表是不是很好)原因二:死的就是死,没有你想的维度查看、对比等等~

 那么接下来,我就讲下导入DB的操作

步骤三:导入DB,具体脚本如下,目前主要从平均值、具体版本执行过程中抓取的详细数据

平均值的目的暂时是做成不同版本之间比较,详细数据目的是检查本版本此指标的走势~

有个问题说下:为什么设置版本(var)为变量,因为目前没有什么好的办法主动获取版本号~

如果其他上神有思路的话可以提供下~

__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8


import MySQLdb
import xlrd

#版本号
ver = "'9.1.0'"
#页面activity
pageActivity = "'homepage.LaunchActivity'"

#连接数据库
conn= MySQLdb.connect(
        host='10.10.30.200',
        port = 3306,
        user='mobtest',
        passwd='XXX520',
        db ='test',
        )
#创建游标目的操作数据库
cur = conn.cursor()

#通过游标cur 操作execute方法来创建表
cur.execute("create table if NOT EXISTS AutoTest_AvgTotalTime(id int NOT NULL auto_increment primary key ,totalTimeAvgResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")
cur.execute("create table if NOT EXISTS AutoTest_AllTotalTime(id int NOT NULL auto_increment primary key ,totalTimeAllResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")

cur.execute("create table if NOT EXISTS AutoTest_AvgTOTALPss(id int NOT NULL auto_increment primary key ,totalPssAvgResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")
cur.execute("create table if NOT EXISTS AutoTest_AllTOTALPss(id int NOT NULL auto_increment primary key ,totalPssAllResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")

cur.execute("create table if NOT EXISTS AutoTest_AvgNativePss(id int NOT NULL auto_increment primary key ,totalPssAvgResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")
cur.execute("create table if NOT EXISTS AutoTest_AllNativePss(id int NOT NULL auto_increment primary key ,nativePssAllResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")

cur.execute("create table if NOT EXISTS AutoTest_AvgDalvikPss(id int NOT NULL auto_increment primary key ,totalPssAvgResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")
cur.execute("create table if NOT EXISTS AutoTest_AllDalvikPss(id int NOT NULL auto_increment primary key ,dalvikPssAllResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")

cur.execute("create table if NOT EXISTS AutoTest_AvgCpu(id int NOT NULL auto_increment primary key ,cpuAvgResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")
cur.execute("create table if NOT EXISTS AutoTest_AllCpu(id int NOT NULL auto_increment primary key ,cpuAllResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")

cur.execute("create table if NOT EXISTS AutoTest_AvgThr(id int NOT NULL auto_increment primary key ,thrAvgResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")
cur.execute("create table if NOT EXISTS AutoTest_AllThr(id int NOT NULL auto_increment primary key ,thrAllResult varchar(255) ,excVersion varchar(255),excPage varchar(255),excTerminal varchar(255) NOT  NULL DEFAULT 'App',creatTime timestamp  NOT NULL DEFAULT NOW() )")


#读取平均值并插入mysql
path = r'C:\Users\niuzhigang\Desktop\packet\autoScript\TotalTime.xlsx'
wb = xlrd.open_workbook(path)
tableTotalTime = wb.sheets()[0]
TotalTimeValue = tableTotalTime.cell(1, 1).value
TotalTime = str(TotalTimeValue)
print u"启动耗时为:"+ TotalTime
#插入totaltime平均值
cur.execute("insert into AutoTest_AvgTotalTime values(DEFAULT," + TotalTime + "," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
#捕获到有效数据的行数
nrows=tableTotalTime.nrows
line_num = 0
for i in range(nrows):
    #获取一行的所有值,每一列的值以列表项存在
    if i > 0:
        line_num += 1
        allTotalTimeValue=tableTotalTime.cell(line_num,0).value
        allTotalTime = str(allTotalTimeValue)
        print allTotalTime
        #插入本迭代执行所有totaltime
        cur.execute("insert into AutoTest_AllTotalTime values(DEFAULT,"+allTotalTime+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
    else:
        print u"数据为空"



#读取平均值并插入mysql
path = r'C:\Users\niuzhigang\Desktop\packet\autoScript\TOTALPss.xlsx'
wb = xlrd.open_workbook(path)
tableTOTALPss = wb.sheets()[0]
TOTALPssValue = tableTOTALPss.cell(1, 1).value
TOTALPss = str(TOTALPssValue)
print u"TOTALPss为:"+ TOTALPss
#插入TOTALPss平均值
cur.execute("insert into AutoTest_AvgTOTALPss values(DEFAULT," + TOTALPss + "," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
#捕获到有效数据的行数
nrows=tableTOTALPss.nrows
line_num = 0
for i in range(nrows):
    #获取一行的所有值,每一列的值以列表项存在
    if i > 0:
        line_num += 1
        allTOTALPssValue=tableTOTALPss.cell(line_num,0).value
        allTOTALPss = str(allTOTALPssValue)
        print allTOTALPss
        #插入本迭代执行所有TOTALPss
        cur.execute("insert into AutoTest_AllTOTALPss values(DEFAULT,"+allTOTALPss+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
    else:
        print u"数据为空"



#读取平均值并插入mysql
path = r'C:\Users\niuzhigang\Desktop\packet\autoScript\NativePss.xlsx'
wb = xlrd.open_workbook(path)
tableNativePss = wb.sheets()[0]
NativePssValue = tableNativePss.cell(1, 1).value
NativePss = str(NativePssValue)
print u"NativePss为:"+ NativePss
#插入NativePss平均值
cur.execute("insert into AutoTest_AvgNativePss values(DEFAULT," + NativePss + "," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
#捕获到有效数据的行数
nrows=tableNativePss.nrows
line_num = 0
for i in range(nrows):
    #获取一行的所有值,每一列的值以列表项存在
    if i > 0:
        line_num += 1
        allNativePssValue=tableNativePss.cell(line_num,0).value
        allNativePss = str(allNativePssValue)
        print allNativePss
        #插入本迭代执行所有NativePss
        cur.execute("insert into AutoTest_AllNativePss values(DEFAULT,"+allNativePss+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
    else:
        print u"数据为空"



#读取平均值并插入mysql
path = r'C:\Users\niuzhigang\Desktop\packet\autoScript\DalvikPss.xlsx'
wb = xlrd.open_workbook(path)
tableDalvikPss = wb.sheets()[0]
DalvikPssValue = tableDalvikPss.cell(1, 1).value
DalvikPss = str(DalvikPssValue)
print u"DalvikPss为:"+ DalvikPss
#插入DalvikPss平均值
cur.execute("insert into AutoTest_AvgDalvikPss values(DEFAULT," + DalvikPss + "," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
#捕获到有效数据的行数
nrows=tableDalvikPss.nrows
line_num = 0
for i in range(nrows):
    #获取一行的所有值,每一列的值以列表项存在
    if i > 0:
        line_num += 1
        allDalvikPssValue=tableDalvikPss.cell(line_num,0).value
        allDalvikPss = str(allDalvikPssValue)
        print allDalvikPss
        #插入本迭代执行所有DalvikPss
        cur.execute("insert into AutoTest_AllDalvikPss values(DEFAULT,"+allDalvikPss+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
    else:
        print u"数据为空"



#读取平均值并插入mysql
path = r'C:\Users\niuzhigang\Desktop\packet\autoScript\AppCpuThrResult.xlsx'
wb = xlrd.open_workbook(path)
tableCpu = wb.sheets()[0]
cpuValue = tableCpu.cell(1, 1).value
cpu = str(cpuValue)
print u"cpu利用率为:"+ cpu
tableThr = wb.sheets()[1]
thrValue = tableThr.cell(1, 1).value
thr = str(thrValue)
print u"thr数为:"+ thr
#插入Cpu平均值
cur.execute("insert into AutoTest_AvgCpu values(DEFAULT," + cpu + "," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
#插入Thr平均值
cur.execute("insert into AutoTest_AvgThr values(DEFAULT,"+thr+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
#捕获到有效数据的行数
nrows=tableCpu.nrows
line_num = 0
for i in range(nrows):
    #获取一行的所有值,每一列的值以列表项存在
    if i > 0:
        line_num += 1
        allCpuValue=tableCpu.cell(line_num,0).value
        allCpu = str(allCpuValue)
        print allCpu
        #插入本迭代执行所有cpu
        cur.execute("insert into AutoTest_AllCpu values(DEFAULT,"+allCpu+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
    else:
        print u"数据为空"
#捕获到有效数据的行数
nrows=tableThr.nrows
line_num = 0
for i in range(nrows):
    #获取一行的所有值,每一列的值以列表项存在
    if i > 0:
        line_num += 1
        allThrValue=tableThr.cell(line_num,0).value
        allThr = str(allThrValue)
        print allThr
        #插入本迭代执行所有thr
        cur.execute("insert into AutoTest_AllThr values(DEFAULT,"+allThr+"," + ver + "," + pageActivity + ",DEFAULT,DEFAULT)")
    else:
        print u"数据为空"


#关闭游标
cur.close()
#提交
conn.commit()
#关闭数据库连接
conn.close(

好了,导入数据sql的数据如下

平均值方面:

详细数据方面:

后面就是APM读取数据且支持维度查询了~APM暂时不是我来搞,所以~~~……后续截图大家可以看下~

 

补充 截图:平均趋势图如下:

另外指标采集的数据比较多,画出来的详细图,相对来说不易观察,且点与点堆积比较密集,视觉上很不理想,因此对数据做了聚合之后再导入EXCEL以及DB的!

处理方式为每10项数据求和后得出来的平均值导入EXCEL和DB!(不满足10条没在做平均值而是把不满足10条的数据没做处理直接导入)

具体实现如下:

__author__ = 'niuzhigang'
# -*- coding: utf-8 -*-
#encoding=utf-8
import os  
import time
import datetime

import xlwt
from tempfile import TemporaryFile
from xlwt import Workbook

dir = r'C:\Users\niuzhigang\Desktop\packet\autoScript'
print dir

now_time = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
print now_time

print (os.getcwd())
os.chdir(dir)
print (os.getcwd())



#创建文件
file = Workbook(encoding='utf-8')
#创建sleet
tableTotalTime = file.add_sheet('TotalTime')
#每列给出名称
tableTotalTime.write(0,0,'TotalTime')
#写出第二列的平均值名称
tableTotalTime.write(0,1,'AvgTotalTime')



TotalTimefpath = r'C:\Users\niuzhigang\Desktop\packet\autoScript\TotalTime.log'
#打开文件并读取
f = open(TotalTimefpath,'r')
line = f.readlines()
a = 1
SumTotalTime = 0
TotalTimeArry = []
TotalTimeArryNew = []
offset = 0
#每几项聚合求平均值
step = 10
for item in line:
    #转为list
    list = item.split()
    TotalTime = list[1]
        TotalTimeArry.append(int(TotalTime))
    # print u"TotalTime耗时为:"+TotalTime+"ms"
# print TotalTimeArry
length = len(TotalTimeArry)
while offset < length:
    tmp = TotalTimeArry[offset:offset + step]
    # print tmp
    if len(tmp) == step:
            avg = 0
            for t in tmp:
                avg += t
            avg /= float(step)
            TotalTimeArryNew.append(avg)
    else:
        for t in tmp:
            TotalTimeArryNew.append(t)
    offset += step

print TotalTimeArryNew
#计算聚合后的总值
SumTotalTime = 0
for x in TotalTimeArryNew:
    SumTotalTime += x
    tableTotalTime.write(a,0,float(x))
    a += 1
# print a
print  SumTotalTime
#求平均值
AvgTotalTimeint = SumTotalTime/(a-1)
# print  AvgTotalTimeint
#获取TotalTime的平均值且保留2位小数
AvgTotalTime = float('%.2f' % AvgTotalTimeint)
tableTotalTime.write(1,1,AvgTotalTime)
print AvgTotalTime
f.close()
#保存excel并命名
file.save('TotalTime.xlsx')

执行结果前与后的对比:

一:数量对比

聚合前:

聚合后:

二:数值对比:

聚合前:

聚合后:

posted on 2017-04-11 17:50  niuzhigang  阅读(961)  评论(0编辑  收藏  举报