# 测试框架搭建 — 设计说明

> 2026-07-15 | 状态: 已批准

## 目标

基于 `ui_automation_best_practices.md` v1.0 的最佳实践，搭建可落地的 Web + App UI 自动化测试框架骨架。后续所有测试用例都留存在 `tests/` 目录下。

## 交付物

### 文件清单

```
tests/
├── conftest.py                     # 根级 fixture
├── pytest.ini                      # pytest 配置
├── config/
│   ├── test_config.yaml            # 环境配置
│   └── test_config.py              # 配置加载器
├── web/                            # Web UI (Playwright)
│   ├── conftest.py                 # browser/page fixture
│   ├── pages/
│   │   ├── base_page.py            # Page Object 基类
│   │   ├── login_page.py           # 登录页
│   │   └── components/
│   │       └── navbar.py           # 导航栏组件
│   └── test_login/
│       └── test_login.py           # 登录用例（含参数化）
├── app/                            # App UI (Appium)
│   ├── conftest.py                 # driver fixture
│   ├── pages/
│   │   ├── base_page.py            # Page Object 基类
│   │   └── driver_home_page.py     # 司机端首页
│   └── test_login/
│       └── test_login.py           # 登录用例
└── utils/
    ├── __init__.py
    ├── logger.py                   # 日志工具
    └── data_helper.py              # 测试数据生成/清理
```

### 与最佳实践的对应

| 最佳实践章节 | 框架落地位置 |
| :--- | :--- |
| §3.3 Page Object 模式 | `web/pages/base_page.py` + `login_page.py` |
| §3.1 定位策略 | `base_page.py` 中的封装方法优先使用 getByTestId |
| §3.4 / §4.5 截图策略 | `conftest.py` 中 fixture 的失败自动截图 |
| §5.1 用例独立性 | `conftest.py` 中 setup/teardown fixture |
| §5.2 数据驱动 | `test_login.py` 中的 `@pytest.mark.parametrize` |
| §5.3 环境配置管理 | `config/test_config.yaml` + `test_config.py` |
| §5.4 报告与日志 | `utils/logger.py` |
| §3.6 多浏览器 | `web/conftest.py` 中 `browser_name` fixture 参数化 |

## 配置数据来源

从 `project_profile.md` 提取：
- BASE_URL: `https://ybxcx.ynyun8.com:8000/admin`
- 测试账号: super_admin / 13113113113 / 15188888888
- 注意：密码已在 profile 中声明，config 中以占位符标注

## 范围边界

- ✅ 包含: 框架骨架、基类、conftest、配置、示例用例
- ❌ 不包含: 运八完整业务用例（后续按需求逐步添加）
