jmeter 分析BeanShell保存的日志文件,提取错错误的种类

需求 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)