fix(conftest,config_loader): 修复 get_caps 的 Capabilities 加载逻辑

- 新增 pytest_addoption 增加 "--caps_name" 获取配置文件中的设备/平台名称
- 修复 get_caps 的 Capabilities 加载逻辑
- 优化 其他优化 enums.py
- 删除 移除部分文档,代码,第三方包(loguru)
This commit is contained in:
2026-02-28 16:08:14 +08:00
parent 332deb3666
commit 6ad6b7ff84
20 changed files with 175 additions and 328 deletions

View File

@@ -9,59 +9,54 @@
@date: 2026/1/16 10:52
@desc: Pytest 核心配置与 Fixture 管理
"""
from typing import Any
import logging
from typing import Any, Optional
from utils.data_loader import load_yaml
from core.settings import CAPS_CONFIG_PATH, ENV_CONFIG, CURRENT_ENV
from core.modules import AppPlatform
logger = logging.getLogger(__name__)
def get_env_config() -> dict[str, str]:
def get_env_config(env_name: Optional[str] = None) -> dict[str, str]:
"""
根据当前环境 (CURRENT_ENV) 获取对应的业务配置
获取当前运行环境的业务配置信息。
逻辑:
1. 优先使用传入的 `env_name`。
2. 若未传入,使用全局设置 `CURRENT_ENV`。
3. 若都为空,默认为 "test"
4. 如果目标环境在配置中不存在,强制回退到 "test" 环境并记录警告。
:param env_name: 指定的环境名称 (e.g., "dev", "prod"),可选。
:return: 对应环境的配置字典。
"""
return ENV_CONFIG.get(CURRENT_ENV, ENV_CONFIG["test"])
target_env = env_name or CURRENT_ENV or "test"
if target_env not in ENV_CONFIG:
logger.warning(f"环境 '{target_env}' 未在配置中定义,将回退到 'test' 环境。")
return ENV_CONFIG.get("test", {})
return ENV_CONFIG[target_env]
def get_caps(platform: str) -> dict[str, Any]:
def get_caps(caps_name: str) -> dict[str, Any]:
"""
从 YAML 文件加载 Capabilities 配置
从 YAML 配置文件加载指定的 Appium Capabilities
:param caps_name: 配置文件中的设备/平台名称 (不区分大小写),例如 "android_pixel"
:return: 该设备对应的 Capabilities 字典。
:raises ValueError: 当指定的 caps_name 在配置文件中不存在时。
:raises RuntimeError: 当配置文件加载失败或格式错误时。
"""
try:
all_caps = load_yaml(CAPS_CONFIG_PATH)
all_caps = {k.lower(): v for k, v in all_caps.items()}
platform_key = platform.lower()
caps_key = caps_name.lower()
if platform_key not in all_caps:
if caps_key not in all_caps:
raise ValueError(f"{CAPS_CONFIG_PATH} 中找不到平台 '{caps_key}' 的配置")
base_caps: dict[str, Any] = {
"noReset": False,
"newCommandTimeout": 60,
}
match platform_key:
case AppPlatform.ANDROID:
android_caps = {
"platformName": "Android",
"automationName": "uiautomator2",
"deviceName": "Android",
"appPackage": "com.manu.wanandroid",
"appActivity": "com.manu.wanandroid.ui.main.activity.MainActivity",
}
return base_caps | android_caps
case AppPlatform.IOS:
ios_caps = {
"platformName": "iOS",
"automationName": "XCUITest",
"deviceName": "iPhone 14",
"bundleId": "com.example.app",
"autoAcceptAlerts": True,
"waitForQuiescence": False,
}
return base_caps | ios_caps
return all_caps[platform_key]
return all_caps[caps_key]
except Exception as e:
raise RuntimeError(f"无法加载“caps”内容 {CAPS_CONFIG_PATH}: {e}")
raise RuntimeError(f"加载 Capabilities 失败 ({CAPS_CONFIG_PATH}): {e}")