登录模块审核

This commit is contained in:
Shen Wei
2026-04-30 18:40:55 +08:00
parent 4030a91100
commit 57600598ac
34 changed files with 2544 additions and 2431 deletions

View File

@@ -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`(编号段、水位、状态)