需求 jmeter 通过BeanShell 保存的日志,提取出错误的种类
2022-03-16 13:43:36,465 INFO o.a.j.u.BeanShellTestElement: 503
2022-03-16 13:43:36,465 ERROR o.a.j.u.BeanShellTestElement: Error <html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>
2022-03-16 13:42:46,270 INFO o.a.j.u.BeanShellTestElement: succes {"Item":[{"CustomerOrderNumber":"C0690122751342451327525329","Success":1,"TrackType":"1","Code":"0000","Message":"提交成功!","TimeStamp":"2022-03-16T05:42:44.5296005+00:00"}
从目前你给出来的日志上看,它打印的日志是有对应格式的
年-月-日 时:分:秒,毫秒 日志的级别 o.a.j.u.BeanShellTestElement: 具体的日志信息
你可以用正则去提取错误正文来分类
jmeter 日志解析后文件存入Mongodb
import pymongo
from pandas import DataFrame
# 建立mongodb 数据库连接
mongo_connect = pymongo.MongoClient("mongodb://127.0.0.1:27017")
db = mongo_connect['jmeter_log'] # 指定库
c_info = db['jmeter_info'] # 成功消息集合
c_error = db['jmeter_error'] # 成功消息集合
def load_log(path, label: str):
"""解析日志,根据字段切割"""
jmeter_connect = []
with open(path, mode='r', encoding="utf-8") as f:
for line in f:
line.replace("\n", "") # 处理换行符
line = line.split(" o.a.j.u.BeanShellTestElement:") # 按照对应的字段切割
# TODO 处理 日期,时间,类型
if len(line) > 1:
data = line[0].split(" ")
day, time, t_type = data[0], data[1].split(",")[0], data[2]
# TODO 处理响应内容
connect = line[1].replace("\n", "").replace(" ", "").replace("succes", "").replace("Error", "")
if len(connect) > 3: # 日志文件中会有 o.a.j.u.BeanShellTestElement: 200 过滤
jmeter_set = {
"date_time": f"{day} {time}",
"time": time,
"label": label,
"jmeter_type": t_type,
"connect": connect
}
jmeter_connect.append(jmeter_set)
else:
pass
return jmeter_connect
def connect_mg_data(data):
"""解析数据存储到mongodb中"""
excel_list = []
for i in data:
if i.get("jmeter_type") == "INFO":
result = c_info.insert_one(i)
# print(result)
if i.get("jmeter_type") == "ERROR":
result = c_error.insert_one(i)
excel_list.append(i)
# 存入到Excel中
import time
t = time.time()
df = DataFrame(excel_list)
df.to_excel(f'{int(t)}.xlsx', index=False, sheet_name="jmeter_error")
if __name__ == "__main__":
# 传入文件,传入标识
d = load_log('0324-1.log', 'test')
connect_mg_data(d)