- 替换 loguru 为原生 logging 库(与pytest兼容性更好)。 - 更新 pytest.ini 统一配置日志格式和基础命令。 - 优化 main.py 增加测试后的日志自动备份与定期清理功能。 - 新增 settings.py 实现配置解耦 - 更新 .gitignore
72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
#!/usr/bin/env python
|
||
# coding=utf-8
|
||
|
||
"""
|
||
@author: CNWei,ChenWei
|
||
@Software: PyCharm
|
||
@contact: t6g888@163.com,chenwei@zygj.com
|
||
@file: conftest
|
||
@date: 2026/1/16 10:52
|
||
@desc:
|
||
"""
|
||
import logging
|
||
|
||
import pytest
|
||
from core.run_appium import start_appium_service, stop_appium_service
|
||
from core.driver import AppDriver
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def app_server():
|
||
"""
|
||
第一层:管理 Appium Server 进程。
|
||
利用你原本 start_appium_service 里的 40 次轮询和 sys.exit(1) 逻辑。
|
||
"""
|
||
# 启动服务
|
||
service = start_appium_service()
|
||
yield service
|
||
# 所有测试结束,清理进程
|
||
stop_appium_service(service)
|
||
|
||
|
||
@pytest.fixture(scope="module")
|
||
def driver(app_server):
|
||
"""
|
||
第二层:管理 WebDriver 会话。
|
||
依赖 app_server,确保服务 Ready 后才创建连接。
|
||
"""
|
||
# 实例化你提供的类结构
|
||
app_helper = AppDriver()
|
||
|
||
# 配置Android设备参数
|
||
capabilities = dict(
|
||
platformName='Android',
|
||
automationName='uiautomator2',
|
||
deviceName='Android',
|
||
appPackage='com.android.settings',
|
||
appActivity='.Settings'
|
||
)
|
||
|
||
# 连接并获取原生 driver 实例
|
||
app_helper.connect(platform="android", caps=capabilities)
|
||
|
||
yield app_helper
|
||
|
||
# 用例结束,只关 session,不关 server
|
||
app_helper.quit()
|
||
|
||
|
||
def pytest_exception_interact(node, call, report):
|
||
"""
|
||
当测试用例抛出异常(断言失败或代码报错)时,Pytest 会调用这个钩子。
|
||
我们在这里手动把错误信息喂给 logging。
|
||
"""
|
||
# 获取名为 'Error' 的记录器,它会遵循 pytest.ini 中的 log_file 配置
|
||
logger = logging.getLogger("Error")
|
||
|
||
if report.failed:
|
||
# 获取详细的错误堆栈(包含 assert 的对比信息)
|
||
exc_info = call.excinfo.getrepr(style='no-locals')
|
||
|
||
logger.error(f"TEST FAILED: {node.nodeid}")
|
||
logger.error(f"详细错误信息如下:\n{exc_info}") |