背景
最近公司在跑自动化case过程中有很多异常case,有的很难依据现有的日志定位问题(日志多且乱,无关联性),时常需要本地debug才能发现问题,很影响写自动化的效率以及自动化运行的通过率。
因此领导下发了一个需求:需要给每一条case绑定一个trace,通过trace关联case执行过程中的日志信息。这样通过查看日志即可快速知道case运行的问题点。经过一番思考与实践,就有了下面的方案。
分析
trace的引入:
- 在自定义的log_tool中添加trace_id的生成与写入
- 使用pytest的钩子函数给每条case添加不同的trace_id
- trace_id 采用uuid 来生成
- 日志推送es(或者写入本地日志文件中)
实现
-
log_tool.py(自定义封装的日志工具)
# log_tool.py 中 import logging import os import time import uuid from functools import wraps from loguru import logger class MyLog: my_logger = logger """ 使用loguru封装日志类 """ path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 判断当前时间的目录在日志目录结构中是否存在,存在就不创建,不存在就创建 dir_time = time.strftime("%Y-%m-%d", time.localtime(time.time())) log_file = os.path.join(os.path.join(os.path.join(path, "Log"), "log"), '{}.log'.format(dir_time)) # 设置loguru写入日志方式 log_handler = my_logger.add(log_file, level="INFO", format="{time:YYYY-MM-DD HH:mm:ss.SSS} {level} {line} {message}", encoding="utf-8", retention="30 days", backtrace=True) trace_id = [] # 定义trace_id,支持多级嵌套 @classmethod def _log(cls, lev: str, log_msg): if cls.trace_id: log_msg = "[" + '|'.join

为解决自动化测试中异常case定位困难的问题,本文介绍如何引入trace_id,通过pytest钩子函数结合uuid生成唯一的trace_id,并将其与测试用例关联。日志信息将被写入或推送到ES,以实现高效的问题排查。同时探讨了使用fixture和装饰器在不同场景下应用trace_id的方法。
最低0.47元/天 解锁文章
1449

被折叠的 条评论
为什么被折叠?



