#!coding=utf-8
import os
import os.path
import re
import json
import xlrd,xlwt
from pyExcelerator import *
_match_ = {
u"Concurrency Level":"并发数",
u"Time per request":"请求响应时间",
u"Complete requests":"完成请求数",
u"Failed requests":"请求失败数",
u"Non-2xx responses":"请求非2**返回数",
u"Requests per second":"服务器QPS值",
u"Transfer rate":"网络流量",
u"Document Path":"url地址",
}
''' 该函数是遍历读取一个文件夹下所有文件,使用到的函数有os.walk。os.walk()可以得到一个三元tupple(dirpath, dirnames, f ilenames),其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
'''
def readfile(path):
File = Workbook()
table = File.add_sheet('result')
table.write(2,2,'请求url'.decode('utf-8'))
table.write(2,3,'并发数'.decode('utf-8'))
table.write(2,4,'请求时间(ms)'.decode('utf-8'))
table.write(2,5,'服务器QPS(笔/秒)'.decode('utf-8'))
table.write(2,6,'完成请求数'.decode('utf-8'))
table.write(2,7,'请求失败数'.decode('utf-8'))
table.write(2,8,'网络流量(Kbytes/sec)'.decode('utf-8'))
for parent,dirnames,filenames in os.walk(path):
data_list =[]
for filename in filenames:
fn = "./log/" + filename
try:
with open(fn) as fd:
i = 0
data =dict()
for line in fd.readlines():
i += 1
if 8 <= i <= 25 and i !=24:
dt = line.strip().split(':',2) #先去掉空行,再将每行值根据冒号分隔2个字段
if len(dt) == 2:
v = dt[1].strip().split(" ") #将value值后面字符串去掉
if len(v)>=2:
val = v[0]
data[dt[0]]=val
else:
data[dt[0]]=dt[1].strip()
else:
pass
else:
pass
#print type(data)
data_list.append(data)
except Exception,e:
print str(e)
#print len(data_list)
#key = map(lambda d:int(d['Concurrency Level']),data_list)
#print key
#result = sorted(data_list,key=lambda d:int(d['Concurrency Level']),reverse=True)
#sort进行按照并发数排序
result = sorted(data_list,key=lambda d:int(d['Concurrency Level']))
#print result
#遍历结果,将需要数据输出
k = 2
j = 2
a = 2
b = 2
c = 2
d = 2
for i in result :
for key,value in i.iteritems():
if key not in _match_.keys():
pass
else:
chinese =_match_[key]
val =value
if key == 'Concurrency Level':
j = j + 1
table.write(j,3,val)
elif key == 'Time per request':
k = k +1
table.write(k,4,val)
elif key == 'Requests per second':
a = a +1
table.write(a,5,val)
elif key == 'Complete requests':
b = b+1
table.write(b,6,val)
elif key == 'Failed requests':
c = c +1
table.write(c,7,val)
elif key == 'Transfer rate':
d = d +1
table.write(d,8,val)
elif key == 'Document Path':
table.write(3,2,val)
else:
pass
File.save('mini.csv')
if __name__=="__main__":
path = "./log"
readfile(path)