提交 6b4c6322 authored 作者: 陈泽健's avatar 陈泽健

docs(ui-test): 更新UI自动化交接文档-模块筛选器修复完成+批量执行进度

- 模块筛选器case_type参数已验证生效(ui=16模块, security=12模块)
- 记录旧后端进程未关闭的踩坑经验(netstat PID与实际不一致)
- 更新批量执行验证状态(233用例执行中)
- 新增踩坑记录#23-#25
Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
上级 5669460a
# HANDOFF — UI自动化测试交接文档
> **生成时间**: 2026-07-23
> **生成时间**: 2026-07-23 11:52
> **当前分支**: `platform-auto-test`
> **最近提交**: `13a044a6` feat(ui-test): 前端适配模块父子层级结构-树形选择器
> **状态**: ✅ P2深层用例补充完成 + P0验证完成 + 模块筛选器修复
> **最近提交**: `5669460a` feat(ui-test): 新增73个深层交互用例+模块筛选器case_type过滤
> **状态**: ✅ P0模块筛选器修复完成 + P1批量执行验证进行
>
> **本次会话完成**:
> - ✅ P2: 编写PRD+计划文档,创建73个深层交互用例(202→275)
> - ✅ P0: 修复失败用例,7个代表性用例全部通过(通过率100%)
> - ⏳ 模块筛选器修复: 后端API+前端已改,待后端reload验证生效
> - ✅ P0: 模块筛选器修复并验证生效(case_type=ui 返回16个模块)
> - ✅ Git提交并推送到远程仓库
> - ⏳ P1: 批量执行验证进行中(exec_ed72e45c44ad47d584f62089fe665bf8,233用例)
---
......@@ -26,24 +28,32 @@
---
## ⚠️ 当前卡点 — 模块筛选器修复未生效
## ✅ 模块筛选器修复已完成(原卡点已解决)
**问题**:用例管理页面"选择模块"筛选器仍显示安全测试模块
**原问题**:用例管理页面"选择模块"筛选器显示安全测试模块(如"API1 - 对象级别授权失效"),与UI测试模块混在一起
**已完成**
**修复方案**:后端API新增 `case_type` 参数,通过模块ID前缀 `sec_` 区分 UI测试和安全测试模块。
**已完成并验证生效**
- ✅ 后端 `module_service.py``list()` 方法新增 `case_type` 参数(通过 `sec_` 前缀过滤)
- ✅ 后端 `routers/modules.py``list_modules` 新增 `case_type` 查询参数
- ✅ 前端 `api/modules.ts``list()` 新增 `case_type` 参数
- ✅ 前端 `Cases.vue``loadModules` 传递 `case_type='ui'`
- ✅ 前端 `Recorder.vue``loadModules` 传递 `case_type='ui'`
-**后端重启加载新代码**(杀掉旧Python进程,重新以 `--reload` 模式启动)
-**API验证通过**`case_type=ui` 返回16个模块,`case_type=security` 返回12个模块
### 关键修复过程踩坑(重要)
**卡点**:后端以非 `--reload` 模式运行,代码修改未生效。已 kill 旧进程(PID 468)并重启后端,但 `curl http://localhost:8001/api/modules?case_type=ui` 仍返回28个模块(未过滤)。
1. **旧后端进程未真正关闭**`netstat` 显示端口被占用,但 `Stop-Process -Id <PID>` 报"找不到进程"。实际是 `netstat` 显示的 PID 与 PowerShell 看到的不一致。
- **正确做法**:用 `powershell Get-Process -Name python` 找到所有 Python 进程,逐一杀掉
- 本次找到 PID 15676 和 31772,杀掉后端口才真正释放
**下一步需做**
1. 确认后端是否正确加载新代码(检查 `backend.log`
2. 确认 SQLAlchemy 的 `Module.id.startswith("sec_")` 在 SQLite 中生效
3. 验证 `curl "http://localhost:8001/api/modules?case_type=ui"` 只返回16个UI模块
4. 验证前端用例管理页面模块筛选器不显示安全测试模块
2. **SQLAlchemy startswith 在 SQLite 中正常工作**`Module.id.startswith("sec_")` 生成 `LIKE 'sec_' || '%'`,在 SQLite 中能正确过滤。验证通过
- `case_type=ui`(非 sec_ 前缀)→ 16 个模块
- `case_type=security`(sec_ 前缀)→ 12 个模块
3. **Service 层逻辑正确,问题在旧进程**:直接调用 `ModuleService.list(case_type='ui')` 返回正确结果,但 API 仍返回 28 个,确认是旧后端进程在响应。
---
......@@ -206,28 +216,24 @@ platform-auto-test/
## 四、待解决问题
### 4.1 ⚠️ 模块筛选器修复未生效(最高优先级)
**状态**:后端API和前端代码已修改,但后端未重新加载新代码,`case_type` 参数未生效。
**已完成验证**
- SQL过滤逻辑正确:`SELECT * FROM modules WHERE id NOT LIKE 'sec_%'` 返回16个UI模块
- 后端 openapi.json 仍未显示 `case_type` 参数(说明代码未加载)
### 4.1 ⚠️ 批量执行验证进行中
**下一步**
1. 检查后端启动方式(需 `--reload` 或重启)
2. 确认 `curl "http://localhost:8001/api/modules?case_type=ui"` 返回16个模块
3. 前端验证用例管理页面模块筛选器
**执行ID**: `exec_ed72e45c44ad47d584f62089fe665bf8`
**用例数**: 233 个 UI 测试用例
**当前状态**: 执行中(约 22/233 时用户中断,晚上继续)
**预计时间**: 约 1-2 小时
详见顶部"当前卡点"章节。
**执行进度**
- 已执行约 22 个用例
- 发现 1 个失败:告警工单-Tab切换验证(`.el-tabs__item:nth-child(2)` 选择器超时)
- 其余用例通过
### 4.2 新增73个用例完整批量执行验证
**后续操作**
1. 查看执行结果:`curl http://localhost:8001/api/executions/exec_ed72e45c44ad47d584f62089fe665bf8`
2. 查看失败用例:`curl "http://localhost:8001/api/executions/exec_ed72e45c44ad47d584f62089fe665bf8/results?limit=233" | python -c "import sys,json; items=json.load(sys.stdin)['items']; failed=[i for i in items if i['status']=='failed']; print(f'失败: {len(failed)}'); [print(f' - {f[\"case_name\"]}') for f in failed]"`
3. 或在前端执行中心查看结果
**状态**:7个代表性用例已验证全部通过(通过率100%),剩余66个用例未批量执行验证。
**验证方式**:在前端执行中心按模块筛选批量执行,或使用API逐个执行。
### 4.3 功能中心抽屉批量执行状态隔离 ⚠️ 已知限制
### 4.2 功能中心抽屉批量执行状态隔离 ⚠️ 已知限制
**现象**:批量执行时,功能中心抽屉可能残留,导致下一个用例打开抽屉时状态异常。
......@@ -241,12 +247,28 @@ platform-auto-test/
| 优先级 | 待办 | 说明 |
|--------|------|------|
| **P0** | 修复模块筛选器生效问题 | 后端重启加载新代码,验证case_type过滤生效 |
| **P1** | 完整批量执行验证剩余66个用例 | 7个代表性用例已通过,剩余用例需批量验证 |
| **P1** | 提交本次变更到Git | PRD文档+脚本+数据库变更+模块筛选器修复 |
| **P1** | 完整批量执行验证233个用例 | 执行已创建,晚上查看结果或重新执行 |
| **P2** | 清理临时脚本和探索文件 | 根目录有大量临时探索脚本待清理 |
| **P3** | 批量执行状态隔离优化 | 解决功能中心抽屉批量执行时状态残留问题 |
### 晚上批量执行验证步骤
1. 确保后端运行:`cd backend && uvicorn app.main:app --reload --port 8001`
2. 查看上次执行结果:
```bash
curl http://localhost:8001/api/executions/exec_ed72e45c44ad47d584f62089fe665bf8
```
3. 如果需要重新执行,在前端用例管理页面全选执行,或用 API:
```bash
# 获取所有 UI 用例 ID
curl -s "http://localhost:8001/api/cases?limit=500" | python -c "
import sys,json
d=json.load(sys.stdin)
ids=[c['id'] for c in d['items'] if not c['moduleId'].startswith('sec_')]
print(f'UI用例: {len(ids)} 个')
"
```
---
## 六、关键踩坑记录(绝对不要重复踩)
......@@ -275,6 +297,9 @@ platform-auto-test/
| 20 | **API返回201而非200** | POST创建资源返回201 Created | **判断状态码用 `status_code in (200, 201)`** |
| 21 | **执行状态是completed非passed** | 执行记录status为completed,用例结果在case_results表 | **通过 passed/total_cases 判断,查 case_results 获取失败原因** |
| 22 | **单一.el-table选择器超时** | 部分页面非标准el-table结构 | **用多选择器回退 `[.el-table, .el-card, body]`** |
| 23 | **netstat显示PID但进程不存在** | Windows网络状态缓存,PID与实际进程不匹配 | **`Get-Process -Name python` 找实际进程** |
| 24 | **后端重启后API仍返回旧数据** | 旧进程未真正关闭,新进程绑定端口失败 | **确保旧进程完全关闭后再启动新进程** |
| 25 | **批量执行取消时database is locked** | 执行线程持有数据库锁,取消操作无法写入 | **等待执行自然完成,或重启后端** |
---
......@@ -310,31 +335,28 @@ PYTHONIOENCODING=utf-8 python scripts/create_deep_cases_func_center_v3.py # 创
## 八、未提交变更(待 git commit)
### 本次会话新增文件
### 本次会话已提交(commit 5669460a)
| 文件 | 变更说明 |
|------|---------|
| `backend/scripts/create_deep_cases_func_center_v3.py` | 🆕 功能中心深层用例创建脚本(73个用例) |
| `backend/scripts/verify_deep_cases_quick.py` | 🆕 代表性用例快速验证脚本 |
| `backend/scripts/verify_deep_cases_batch.py` | 🆕 批量验证脚本(逻辑有bug待修复) |
| `backend/app/services/module_service.py` | `list()` 新增 `case_type` 参数过滤逻辑 |
| `backend/app/routers/modules.py` | `list_modules` 新增 `case_type` 查询参数 |
| `frontend/src/api/modules.ts` | `list()` 新增 `case_type` 参数 |
| `frontend/src/views/Cases.vue` | `loadModules` 传递 `case_type='ui'` |
| `frontend/src/views/Recorder.vue` | `loadModules` 传递 `case_type='ui'` |
| `backend/data/test_platform.db` | 新增73个深层交互用例(202→275) |
| `backend/scripts/create_deep_cases_func_center_v3.py` | 🆕 功能中心深层用例创建脚本 |
| `Docs/PRD/需求文档/用例管理/_PRD_需求文档_功能中心深层交互用例补充.md` | 🆕 PRD需求文档 |
| `Docs/PRD/需求文档/用例管理/_执行计划_功能中心深层交互用例补充.md` | 🆕 执行计划文档 |
| `Docs/PRD/需求文档/用例管理/_PRD_问题处理_模块筛选器显示安全测试模块.md` | 🆕 模块筛选器问题处理文档 |
| `Docs/PRD/需求文档/用例管理/_执行计划_模块筛选器显示安全测试模块.md` | 🆕 模块筛选器计划执行文档 |
| `HANDOFF_UI自动化.md` | 本文档 |
### 本次会话修改文件
### 待提交变更
| 文件 | 变更说明 |
|------|---------|
| `backend/app/services/module_service.py` | `list()` 新增 `case_type` 参数过滤逻辑 |
| `backend/app/routers/modules.py` | `list_modules` 新增 `case_type` 查询参数 |
| `frontend/src/api/modules.ts` | `list()` 新增 `case_type` 参数 |
| `frontend/src/views/Cases.vue` | `loadModules` 传递 `case_type='ui'` |
| `frontend/src/views/Recorder.vue` | `loadModules` 传递 `case_type='ui'` |
### 数据库变更
- `backend/data/test_platform.db` — 新增73个深层交互用例,用例总数 202 → 275
| `HANDOFF_UI自动化.md` | 本文档更新(模块筛选器修复完成+批量执行进度) |
### 历史未提交变更
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论