登录模块审核
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
# Fonrey 测试规范(TEST_SPEC)
|
||||
|
||||
**版本**: 1.1
|
||||
**版本**: 1.2
|
||||
**项目**: Fonrey 房产经纪管理系统
|
||||
**技术栈**: Django 4.x + django-tenants + PostgreSQL 16 + Redis + Celery + HTMX + Playwright
|
||||
**关联文档**: `TECH_STACK/TECH_STACK.md`、`PRD/TASK.md`、各模块技术方案(登录/权限/房源/客源/楼盘/组织人事/系统管理)
|
||||
**最后更新**: 2026-04-27
|
||||
**关联文档**: `TECH_STACK/TECH_STACK.md`、`PRD/TASK.md`、`TEST_CASES/TEST_CASE_ID_SPEC.md`、`TEST_CASES/TEST_CASE_REGISTRY.md`、各模块技术方案(登录/权限/房源/客源/楼盘/组织人事/系统管理)
|
||||
**最后更新**: 2026-04-30
|
||||
|
||||
---
|
||||
|
||||
@@ -36,13 +36,13 @@ Fonrey 采用 AI 驱动迭代,测试是质量兜底。所有 P0 User Story 必
|
||||
| `apps/*/services/` 业务逻辑层 | ≥ 80% |
|
||||
| `apps/*/views*` 接口与视图层 | ≥ 70% |
|
||||
| `apps/*/tasks.py` 异步任务 | ≥ 70% |
|
||||
| E2E 核心旅程 | 5 条全部通过 |
|
||||
| E2E 核心测试用例 | 覆盖指定核心用例并全部通过 |
|
||||
|
||||
### 2.2 质量门禁
|
||||
|
||||
- 每个 P0 US 对应至少一个集成测试场景集。
|
||||
- PR 合并前:单元 + 集成必须全绿。
|
||||
- `main/develop`:每日自动跑全量(含 E2E 核心旅程)。
|
||||
- `main/develop`:每日自动跑全量(含 E2E 核心测试用例)。
|
||||
|
||||
---
|
||||
|
||||
@@ -50,7 +50,7 @@ Fonrey 采用 AI 驱动迭代,测试是质量兜底。所有 P0 User Story 必
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ E2E 测试(用户旅程) │ ← Playwright
|
||||
│ E2E 测试(测试用例) │ ← Playwright
|
||||
├─────────────────────────────────────────┤
|
||||
│ 集成测试(HTTP / View / Service / DB) │ ← pytest-django + TenantClient
|
||||
├─────────────────────────────────────────┤
|
||||
@@ -71,7 +71,7 @@ Fonrey 采用 AI 驱动迭代,测试是质量兜底。所有 P0 User Story 必
|
||||
### 3.3 E2E 测试
|
||||
|
||||
- 目标:验证真实用户关键路径。
|
||||
- 约束:只覆盖核心旅程,避免把所有细节都堆到 E2E。
|
||||
- 约束:只覆盖核心测试用例,避免把所有细节都堆到 E2E。
|
||||
|
||||
---
|
||||
|
||||
@@ -236,15 +236,12 @@ result = some_task.apply(args=[...])
|
||||
|
||||
## 九、E2E 测试规范
|
||||
|
||||
### 9.1 核心旅程(必须)
|
||||
### 9.1 核心测试用例(必须)
|
||||
|
||||
| 编号 | 旅程 | 对应模块 |
|
||||
|---|---|---|
|
||||
| J-01 | 登录 → 进入首页 | 登录 |
|
||||
| J-02 | 录入房源 → 上传图片 → 查看列表 | 房源 |
|
||||
| J-03 | 录入客源 → 添加跟进 | 客源 |
|
||||
| J-04 | 无权限访问受限页面 | 权限 |
|
||||
| J-05 | 创建员工 → 分配角色 → 新员工登录 | 组织人事 + 权限 |
|
||||
- E2E 覆盖对象采用“测试用例”定义,不使用“旅程编号(J-xx)”。
|
||||
- 每条 E2E 用例必须绑定全局唯一测试用例ID:`TC-FON-XXXXXX`。
|
||||
- 当前登录模块核心用例以 `TEST_CASES/TEST_CASES_LOGIN_MODULE.md` 为准(`TC-FON-000001` ~ `TC-FON-000048`)。
|
||||
- 其他模块(房源/客源/组织/权限等)按 `TEST_CASES/TEST_CASE_REGISTRY.md` 分配编号后补充。
|
||||
|
||||
### 9.2 Playwright 约束
|
||||
|
||||
@@ -264,9 +261,31 @@ page.wait_for_load_state('networkidle')
|
||||
|
||||
---
|
||||
|
||||
## 十、测试配置基线
|
||||
## 十、测试用例编号与注册规范(强制)
|
||||
|
||||
### 10.1 `pytest.ini`
|
||||
### 10.1 编号规范
|
||||
|
||||
- 测试用例ID:`TC-FON-XXXXXX`(全局唯一)
|
||||
- 步骤ID:`TC-FON-XXXXXX-SYY`
|
||||
- 详见:`TEST_CASES/TEST_CASE_ID_SPEC.md`
|
||||
|
||||
### 10.2 注册流程
|
||||
|
||||
1. 新增用例前,先在 `TEST_CASES/TEST_CASE_REGISTRY.md` 查看下一个可用编号。
|
||||
2. 先登记编号段(可先 `reserved`),再编写文档和代码。
|
||||
3. 合并前状态改为 `active`,并更新“当前编号水位”。
|
||||
|
||||
### 10.3 强约束
|
||||
|
||||
- 不允许按模块重置编号。
|
||||
- 不允许复用已废弃编号。
|
||||
- 不允许未登记编号直接入库测试代码。
|
||||
|
||||
---
|
||||
|
||||
## 十一、测试配置基线
|
||||
|
||||
### 11.1 `pytest.ini`
|
||||
|
||||
```ini
|
||||
[pytest]
|
||||
@@ -280,7 +299,7 @@ markers =
|
||||
slow
|
||||
```
|
||||
|
||||
### 10.2 `tests/settings_test.py` 关键项
|
||||
### 11.2 `tests/settings_test.py` 关键项
|
||||
|
||||
- Celery eager 模式开启
|
||||
- Cache 使用测试后端(locmem/fakeredis)
|
||||
@@ -290,26 +309,27 @@ markers =
|
||||
|
||||
---
|
||||
|
||||
## 十一、CI 自动化运行
|
||||
## 十二、CI 自动化运行
|
||||
|
||||
### 11.1 触发策略
|
||||
### 12.1 触发策略
|
||||
|
||||
- 每日定时全量测试
|
||||
- `main/develop` 每次 push 触发
|
||||
|
||||
### 11.2 流水线拆分
|
||||
### 12.2 流水线拆分
|
||||
|
||||
1. `unit-and-integration`
|
||||
2. `e2e`(依赖前者成功后执行)
|
||||
|
||||
### 11.3 最低产物
|
||||
### 12.3 最低产物
|
||||
|
||||
- 覆盖率报告(终端 + 平台上传)
|
||||
- E2E 失败截图 artifact
|
||||
- 测试结果明细(至少含 `run_id`、`test_case_id`、`step_id`、`status`、`error_message`、`expected_result`、`actual_result`)
|
||||
|
||||
---
|
||||
|
||||
## 十二、AI 协作测试要求
|
||||
## 十三、AI 协作测试要求
|
||||
|
||||
每个 User Story 实现后,必须同时补齐:
|
||||
|
||||
@@ -326,7 +346,7 @@ markers =
|
||||
|
||||
---
|
||||
|
||||
## 十三、禁止项(Do NOT)
|
||||
## 十四、禁止项(Do NOT)
|
||||
|
||||
- 禁止 Django 原生 `Client()` 进行租户集成测试
|
||||
- 禁止固定等待(`sleep` / `wait_for_timeout`)
|
||||
@@ -334,12 +354,14 @@ markers =
|
||||
- 禁止测试之间共享可变数据
|
||||
- 禁止无权限/未登录场景缺失
|
||||
- 禁止空测试占位后不补全
|
||||
- 禁止未分配 `TC-FON-XXXXXX` 的匿名测试入库
|
||||
|
||||
---
|
||||
|
||||
## 十四、文档同步规则
|
||||
## 十五、文档同步规则
|
||||
|
||||
- 新增/调整 User Story:同步 `PRD/TASK.md` 与集成测试映射
|
||||
- 模块 API 变更:同步对应模块技术方案
|
||||
- 测试目录变更:同步本文件目录结构与 CI 脚本
|
||||
- 新增测试基建(fixture/工具):同步 `AGENTS.md` 与本文件
|
||||
- 新增测试用例:同步 `TEST_CASES/TEST_CASE_REGISTRY.md`(编号段、水位、状态)
|
||||
|
||||
Reference in New Issue
Block a user