fix(conftest,config_loader): 修复 get_caps 的 Capabilities 加载逻辑
- 新增 pytest_addoption 增加 "--caps_name" 获取配置文件中的设备/平台名称 - 修复 get_caps 的 Capabilities 加载逻辑 - 优化 其他优化 enums.py - 删除 移除部分文档,代码,第三方包(loguru)
This commit is contained in:
@@ -11,10 +11,10 @@
|
||||
"""
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
from typing import Any, List
|
||||
from typing import Any
|
||||
|
||||
|
||||
def load_yaml(file_path: Path | str) -> dict[str, Any] | List[Any]:
|
||||
def load_yaml(file_path: Path | str) -> dict[str, Any] | list[Any]:
|
||||
"""
|
||||
加载 YAML 文件
|
||||
:param file_path: 文件路径
|
||||
|
||||
@@ -15,7 +15,6 @@ import time
|
||||
import inspect
|
||||
from functools import wraps
|
||||
from typing import Union, Callable
|
||||
|
||||
from contextvars import ContextVar
|
||||
from contextlib import ContextDecorator
|
||||
|
||||
@@ -41,14 +40,15 @@ class StepTracer(ContextDecorator):
|
||||
...
|
||||
|
||||
也可作为装饰器的一部分(通过 step_trace 工厂函数)。
|
||||
|
||||
Attributes:
|
||||
step_desc (str): 对当前步骤或操作的描述。
|
||||
source (str): 日志记录器的名称。
|
||||
func_info (str, optional): 关联的函数信息,用于日志输出。
|
||||
"""
|
||||
|
||||
def __init__(self, step_desc, source='wrapper', func_info=None):
|
||||
"""
|
||||
初始化 StepTracer。
|
||||
:param step_desc: 对当前步骤或操作的描述。
|
||||
:param source: 日志记录器的名称。
|
||||
:param func_info: 关联的函数信息,用于日志输出。
|
||||
"""
|
||||
self.step_desc = step_desc
|
||||
self.logger = logging.getLogger(source)
|
||||
self.func_info = func_info
|
||||
@@ -167,6 +167,7 @@ def action_screenshot(func):
|
||||
Returns:
|
||||
Callable: 包装后的函数。
|
||||
"""
|
||||
|
||||
@wraps(func)
|
||||
def wrapper(self, *args, **kwargs):
|
||||
# 1. 正常执行原方法
|
||||
@@ -241,6 +242,7 @@ def step_trace(step_desc="", source='wrapper'):
|
||||
Returns:
|
||||
Callable: 一个可以装饰函数的装饰器。
|
||||
"""
|
||||
|
||||
def decorator(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
@author: CNWei,ChenWei
|
||||
@Software: PyCharm
|
||||
@contact: t6g888@163.com
|
||||
@file: path_manager
|
||||
@file: dirs_manager
|
||||
@date: 2026/2/3 10:52
|
||||
@desc:
|
||||
"""
|
||||
|
||||
@@ -5,11 +5,12 @@
|
||||
@author: CNWei,ChenWei
|
||||
@Software: PyCharm
|
||||
@contact: t6g888@163.com
|
||||
@file: locator_utils
|
||||
@file: finder
|
||||
@date: 2026/1/20 15:40
|
||||
@desc:
|
||||
"""
|
||||
from typing import Literal, Final
|
||||
|
||||
from appium.webdriver.common.appiumby import AppiumBy
|
||||
|
||||
ByType = Literal[
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
日志与执行追踪模块使用指南
|
||||
本模块基于 Loguru 封装,专为自动化测试项目设计,提供工业级的日志记录、多线程安全保障以及业务步骤自动追踪能力。
|
||||
|
||||
🌟 核心特性
|
||||
全局一致性:统一日志格式,控制台带颜色显示,方便快速定位。
|
||||
|
||||
自动执行追踪:使用 @trace_step 装饰器,自动记录方法入参、出参、耗时及执行状态。
|
||||
|
||||
智能参数解析:装饰器自动识别并隐藏 self 和 cls 参数,保护日志整洁。
|
||||
|
||||
上下文透传:支持通过 .bind() 绑定设备 ID 或模块标识,解决多机并行日志混杂问题。
|
||||
|
||||
分层标识:默认区分系统日志 (System) 与业务任务日志 (task)。
|
||||
|
||||
异步安全:支持多进程/多线程安全写入,不影响 Appium 执行性能。
|
||||
|
||||
🚀 快速上手
|
||||
1. 基础日志记录
|
||||
在任何模块中直接导入 logger 即可使用。
|
||||
```python
|
||||
from utils.logger import logger
|
||||
|
||||
logger.info("这是一条普通信息")
|
||||
logger.debug("调试模式下的详细信息")
|
||||
logger.error("记录一个错误")
|
||||
```
|
||||
2. 使用装饰器追踪业务步骤 (@trace_step)
|
||||
在 PageObject 方法或任何业务函数上添加装饰器,即可获得全链路追踪。
|
||||
```python
|
||||
from utils.logger import trace_step
|
||||
|
||||
@trace_step("用户登录")
|
||||
def login(username, password):
|
||||
# 执行逻辑...
|
||||
return True
|
||||
|
||||
# 日志输出:
|
||||
# 🚀 [START] 用户登录 -> login('admin', '****')
|
||||
# ✅ [SUCCESS] 用户登录 | 耗时: 1.25s | 返回: True
|
||||
```
|
||||
3. 多机并行:上下文透传 (.bind)
|
||||
在 Appium 并行测试中,用于区分不同设备的日志流。
|
||||
```python
|
||||
from utils.logger import logger
|
||||
|
||||
class BasePage:
|
||||
def __init__(self, driver, device_id):
|
||||
self.driver = driver
|
||||
# 绑定设备 ID 到当前实例的 logger
|
||||
self.log = logger.bind(source=device_id)
|
||||
|
||||
def click_element(self, loc):
|
||||
self.log.info(f"点击元素: {loc}")
|
||||
|
||||
# 日志输出:
|
||||
# | INFO | Pixel_6 | base_page:click_element:15 - 点击元素: id=login_btn
|
||||
# | INFO | S22 | base_page:click_element:15 - 点击元素: id=login_btn
|
||||
```
|
||||
🛠️ 进阶配置
|
||||
标识符说明 (source 字段)
|
||||
日志格式中包含一个 source 字段(占位符为 magenta 颜色),用于区分日志来源:
|
||||
|
||||
System: (默认) 框架底层日志、驱动初始化等。
|
||||
|
||||
task: (装饰器默认) 具体的业务测试步骤。
|
||||
|
||||
自定义: 通过 @trace_step(source="SQL") 或 logger.bind(source="API") 自定义。
|
||||
|
||||
日志存储
|
||||
路径: 项目根目录 /logs/。
|
||||
|
||||
滚动: 每天午夜 00:00 自动切割。
|
||||
|
||||
保留: 默认保留最近 30 天 的日志。
|
||||
|
||||
⚠️ 注意事项
|
||||
不要在装饰器内手动接收返回值:@trace_step 已经自动处理了函数的返回值记录。
|
||||
|
||||
优先使用 self.log:在 PageObject 类中,请务必使用 self.log.info() 而非全局 logger.info(),以确保 bind 的上下文信息(如设备 ID)能正确显示。
|
||||
|
||||
希望这套日志系统能显著提升您的调试效率和项目质量!如有任何疑问,请随时查阅 utils/logger.py 源码。
|
||||
Reference in New Issue
Block a user