|
|
@@ -0,0 +1,466 @@
|
|
|
+# Story 8.7: 运行测试并收集问题和改进建议
|
|
|
+
|
|
|
+Status: ready-for-dev
|
|
|
+
|
|
|
+<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
|
+
|
|
|
+## Story
|
|
|
+
|
|
|
+作为测试开发者,
|
|
|
+我想要运行区域管理测试并收集反馈,
|
|
|
+以便发现潜在问题并改进测试或工具。
|
|
|
+
|
|
|
+## Acceptance Criteria
|
|
|
+
|
|
|
+**Given** 所有区域管理测试用例已编写
|
|
|
+**When** 运行完整的区域管理 E2E 测试套件
|
|
|
+**Then** 记录所有问题(失败的测试、错误消息、使用体验)
|
|
|
+**And** 分类问题:业务逻辑 bug vs 测试代码问题 vs 工具不足
|
|
|
+**And** 整理成问题清单
|
|
|
+**And** 识别是否需要扩展 e2e-test-utils 工具包
|
|
|
+
|
|
|
+## Tasks / Subtasks
|
|
|
+
|
|
|
+- [ ] 运行完整的区域管理 E2E 测试套件
|
|
|
+ - [ ] 运行所有区域管理相关测试
|
|
|
+ - [ ] 记录测试结果(通过/失败/跳过)
|
|
|
+ - [ ] 收集失败的测试和错误信息
|
|
|
+- [ ] 分析和分类问题
|
|
|
+ - [ ] 区分业务逻辑 bug vs 测试代码问题 vs 工具不足
|
|
|
+ - [ ] 整理问题清单
|
|
|
+ - [ ] 评估问题严重程度(HIGH/MEDIUM/LOW)
|
|
|
+- [ ] 评估工具扩展需求
|
|
|
+ - [ ] 识别是否需要扩展 e2e-test-utils 工具包
|
|
|
+ - [ ] 记录潜在的工具改进建议
|
|
|
+- [ ] 整理测试报告
|
|
|
+ - [ ] 创建问题清单文档
|
|
|
+ - [ ] 更新 Story 状态
|
|
|
+ - [ ] 提供工具扩展建议(如需要)
|
|
|
+
|
|
|
+## Dev Notes
|
|
|
+
|
|
|
+### Epic 8 背景和上下文
|
|
|
+
|
|
|
+**Epic 8: 区域管理 E2E 测试 (Epic B - 业务测试 Epic)**
|
|
|
+
|
|
|
+这是 Epic B(区域管理业务测试)的第七个 Story。前置 Story 已完成:
|
|
|
+- Story 8.1: ✅ 已完成 - RegionManagementPage Page Object
|
|
|
+- Story 8.2: ✅ 已完成 - 区域列表查看测试
|
|
|
+- Story 8.3: ✅ 已完成 - 添加区域测试 (15/15 tests passed)
|
|
|
+- Story 8.4: ✅ 已完成 - 编辑区域测试 (10 tests passed, 2 skipped)
|
|
|
+- Story 8.5: ✅ 已完成 - 删除区域测试 (15/15 tests passed)
|
|
|
+- Story 8.6: ✅ 已完成 - 级联选择测试 (10 tests passed, 2 skipped)
|
|
|
+
|
|
|
+**依赖:**
|
|
|
+- Epic 1: ✅ 已完成(Select 工具基础框架)
|
|
|
+- Epic 2: ✅ 已完成(Select 工具在真实 E2E 测试中验证)
|
|
|
+
|
|
|
+### 本 Story 的目标
|
|
|
+
|
|
|
+**收集的问题类型:**
|
|
|
+
|
|
|
+1. **业务逻辑 Bug**
|
|
|
+ - 区域管理功能本身的问题
|
|
|
+ - 需要后端或前端修复的问题
|
|
|
+ - 数据验证问题
|
|
|
+
|
|
|
+2. **测试代码问题**
|
|
|
+ - 测试用例编写错误
|
|
|
+ - 选择器问题
|
|
|
+ - 测试逻辑缺陷
|
|
|
+ - 可以通过修改测试代码解决
|
|
|
+
|
|
|
+3. **工具不足**
|
|
|
+ - `@d8d/e2e-test-utils` 包缺少必要功能
|
|
|
+ - 需要扩展工具包
|
|
|
+ - 可能触发 Story 8.8
|
|
|
+
|
|
|
+### 区域管理测试套件清单
|
|
|
+
|
|
|
+**需要运行的测试文件:**
|
|
|
+
|
|
|
+| 测试文件 | 描述 | 预期状态 |
|
|
|
+|---------|------|---------|
|
|
|
+| `region-list.spec.ts` | 区域列表查看测试 | 通过 |
|
|
|
+| `region-add.spec.ts` | 添加区域测试 | 通过 |
|
|
|
+| `region-edit.spec.ts` | 编辑区域测试 | 部分跳过 |
|
|
|
+| `region-delete.spec.ts` | 删除区域测试 | 通过 |
|
|
|
+| `region-cascade.spec.ts` | 级联选择测试 | 部分跳过 |
|
|
|
+
|
|
|
+### 测试运行命令
|
|
|
+
|
|
|
+```bash
|
|
|
+# 进入 web 目录
|
|
|
+cd web
|
|
|
+
|
|
|
+# 运行所有区域管理测试
|
|
|
+pnpm test:e2e:chromium region-*.spec.ts
|
|
|
+
|
|
|
+# 运行单个测试文件(用于调试)
|
|
|
+pnpm test:e2e:chromium region-list
|
|
|
+pnpm test:e2e:chromium region-add
|
|
|
+pnpm test:e2e:chromium region-edit
|
|
|
+pnpm test:e2e:chromium region-delete
|
|
|
+pnpm test:e2e:chromium region-cascade
|
|
|
+
|
|
|
+# 快速失败模式(调试)
|
|
|
+timeout 60 pnpm test:e2e:chromium region-*.spec.ts
|
|
|
+```
|
|
|
+
|
|
|
+### 问题记录模板
|
|
|
+
|
|
|
+**问题分类标准:**
|
|
|
+
|
|
|
+| 严重程度 | 描述 | 示例 |
|
|
|
+|---------|------|------|
|
|
|
+| **HIGH** | 阻塞测试通过的核心问题 | 测试失败、功能不可用 |
|
|
|
+| **MEDIUM** | 影响测试质量但可绕过的问题 | 代码重复、选择器不稳定 |
|
|
|
+| **LOW** | 优化建议、代码风格 | 命名不规范、注释缺失 |
|
|
|
+
|
|
|
+**问题清单模板:**
|
|
|
+
|
|
|
+```markdown
|
|
|
+## 问题清单
|
|
|
+
|
|
|
+### HIGH 严重程度问题
|
|
|
+
|
|
|
+#### [HIGH-1] 问题描述
|
|
|
+- **类型**: 业务逻辑 Bug / 测试代码问题 / 工具不足
|
|
|
+- **影响测试**: region-edit.spec.ts
|
|
|
+- **复现步骤**:
|
|
|
+ 1. ...
|
|
|
+ 2. ...
|
|
|
+- **错误信息**: ...
|
|
|
+- **建议修复**: ...
|
|
|
+
|
|
|
+### MEDIUM 严重程度问题
|
|
|
+
|
|
|
+...
|
|
|
+
|
|
|
+### LOW 严重程度问题
|
|
|
+
|
|
|
+...
|
|
|
+```
|
|
|
+
|
|
|
+### 从 Story 8.6 了解的已知问题
|
|
|
+
|
|
|
+**Story 8.6 实现时发现的问题:**
|
|
|
+
|
|
|
+1. **树形结构懒加载缓存问题**
|
|
|
+ - 新创建的子区域不会立即在树中显示
|
|
|
+ - 导致某些编辑测试无法通过 UI 验证
|
|
|
+ - 解决方案:使用 API 验证代替 UI 验证
|
|
|
+
|
|
|
+2. **跳过的测试用例(region-cascade.spec.ts)**
|
|
|
+ - `编辑区域后应保持父级关系` - 因树缓存问题跳过
|
|
|
+ - `编辑区域后子区域应跟随` - 因树缓存问题跳过
|
|
|
+
|
|
|
+### 工具评估要点
|
|
|
+
|
|
|
+**需要评估的 e2e-test-utils 功能:**
|
|
|
+
|
|
|
+| 功能 | 当前状态 | 需要扩展? | 评估要点 |
|
|
|
+|------|---------|-----------|---------|
|
|
|
+| `selectRadixOption` | ✅ 已有 | 否 | 静态 Select 选择 |
|
|
|
+| `selectRadixOptionAsync` | ✅ 已有 | 否 | 异步 Select 选择 |
|
|
|
+| `uploadFileToField` | ✅ 已有 | 否 | 文件上传 |
|
|
|
+| 树形结构操作 | ❌ 无 | **待评估** | 展开节点、验证节点 |
|
|
|
+| 级联选择工具 | ❌ 无 | **待评估** | 多级联动选择 |
|
|
|
+
|
|
|
+**工具扩展决策流程:**
|
|
|
+
|
|
|
+```
|
|
|
+运行测试 → 发现问题 → 分析问题类型
|
|
|
+ ↓
|
|
|
+ 是否可通过修改测试解决?
|
|
|
+ ↙ ↘
|
|
|
+ 是 否
|
|
|
+ ↓ ↓
|
|
|
+ 修改测试代码 需要扩展工具包?
|
|
|
+ ↙ ↘
|
|
|
+ 是 否
|
|
|
+ ↓ ↓
|
|
|
+ 触发 Story 8.8 记录为限制
|
|
|
+```
|
|
|
+
|
|
|
+### 问题记录到 Story 文件
|
|
|
+
|
|
|
+**问题记录位置:**
|
|
|
+
|
|
|
+本 Story 的 `Dev Agent Record` 部分需要包含:
|
|
|
+
|
|
|
+```markdown
|
|
|
+### 测试运行结果
|
|
|
+
|
|
|
+**测试日期**: YYYY-MM-DD
|
|
|
+**测试通过率**: X/Y
|
|
|
+**总运行时间**: Xs
|
|
|
+
|
|
|
+### 问题清单
|
|
|
+
|
|
|
+[按严重程度和类型分类记录]
|
|
|
+
|
|
|
+### 工具评估结果
|
|
|
+
|
|
|
+**是否需要扩展工具包**: 是/否
|
|
|
+**触发 Story 8.8**: 是/否
|
|
|
+
|
|
|
+### 建议的下一步操作
|
|
|
+
|
|
|
+1. [ ] 修复 HIGH 优先级问题
|
|
|
+2. [ ] 优化 MEDIUM 优先级问题
|
|
|
+3. [ ] 进入 Story 8.8(如需要)
|
|
|
+4. [ ] 进入 Story 8.9(稳定性验证)
|
|
|
+```
|
|
|
+
|
|
|
+### RegionManagementPage API 参考
|
|
|
+
|
|
|
+**测试可用的主要方法:**
|
|
|
+
|
|
|
+```typescript
|
|
|
+// 树形操作
|
|
|
+await regionManagementPage.waitForTreeLoaded();
|
|
|
+await regionManagementPage.expandNode(name);
|
|
|
+await regionManagementPage.collapseNode(name);
|
|
|
+
|
|
|
+// CRUD 操作
|
|
|
+await regionManagementPage.createProvince({ name, code });
|
|
|
+await regionManagementPage.createChildRegion(parent, type, { name, code });
|
|
|
+await regionManagementPage.editRegion(name, { newName, newCode });
|
|
|
+await regionManagementPage.deleteRegion(name);
|
|
|
+
|
|
|
+// 验证方法
|
|
|
+const exists = await regionManagementPage.regionExists(name);
|
|
|
+const status = await regionManagementPage.getRegionStatus(name);
|
|
|
+```
|
|
|
+
|
|
|
+### 测试失败调试
|
|
|
+
|
|
|
+**1. 查看错误上下文:**
|
|
|
+```bash
|
|
|
+# 测试失败后自动生成
|
|
|
+cat test-results/*/error-context.md
|
|
|
+```
|
|
|
+
|
|
|
+**2. 使用 Playwright Inspector:**
|
|
|
+```bash
|
|
|
+# 交互式调试
|
|
|
+pnpm test:e2e:chromium region-*.spec.ts --debug
|
|
|
+```
|
|
|
+
|
|
|
+**3. 添加调试输出:**
|
|
|
+```typescript
|
|
|
+test('调试测试', async ({ regionManagementPage }) => {
|
|
|
+ console.debug('当前测试数据:', { provinceName, cityName });
|
|
|
+ await regionManagementPage.createProvince({ name: provinceName });
|
|
|
+ console.debug('省份已创建');
|
|
|
+});
|
|
|
+```
|
|
|
+
|
|
|
+### 测试结果分析模板
|
|
|
+
|
|
|
+**通过率计算:**
|
|
|
+
|
|
|
+| 指标 | 公式 | 目标 |
|
|
|
+|------|------|------|
|
|
|
+| 测试通过率 | (通过数 / 总数) × 100% | ≥ 95% |
|
|
|
+| 测试覆盖率 | (AC实现数 / AC总数) × 100% | 100% |
|
|
|
+| 代码质量 | ESLint/TypeScript 错误数 = 0 | 0 |
|
|
|
+
|
|
|
+**稳定性评估:**
|
|
|
+
|
|
|
+- 单次运行通过率:X%
|
|
|
+- 需要连续运行验证?(Story 8.9)
|
|
|
+- 是否存在 flaky 测试?
|
|
|
+
|
|
|
+### 与后续 Story 的关系
|
|
|
+
|
|
|
+**本 Story 输出 → Story 8.8(工具扩展):**
|
|
|
+- 如果发现需要扩展 e2e-test-utils
|
|
|
+- 提供具体的工具需求清单
|
|
|
+- 说明为什么现有工具不足
|
|
|
+
|
|
|
+**本 Story 输出 → Story 8.9(稳定性验证):**
|
|
|
+- 确认所有测试问题已修复
|
|
|
+- 测试可以连续稳定运行
|
|
|
+- 为稳定性验证做好准备
|
|
|
+
|
|
|
+## Project Structure Notes
|
|
|
+
|
|
|
+### 对齐统一项目结构
|
|
|
+
|
|
|
+**测试文件位置:**
|
|
|
+```
|
|
|
+web/tests/e2e/specs/admin/
|
|
|
+├── region-list.spec.ts # Story 8.2
|
|
|
+├── region-add.spec.ts # Story 8.3
|
|
|
+├── region-edit.spec.ts # Story 8.4
|
|
|
+├── region-delete.spec.ts # Story 8.5
|
|
|
+└── region-cascade.spec.ts # Story 8.6
|
|
|
+```
|
|
|
+
|
|
|
+**Page Object 位置:**
|
|
|
+```
|
|
|
+web/tests/e2e/pages/admin/
|
|
|
+└── region-management.page.ts # Story 8.1
|
|
|
+```
|
|
|
+
|
|
|
+**测试配置:**
|
|
|
+```
|
|
|
+web/tests/e2e/
|
|
|
+├── fixtures/
|
|
|
+│ └── test-users.json
|
|
|
+├── utils/
|
|
|
+│ └── test-setup.ts
|
|
|
+└── playwright.config.ts
|
|
|
+```
|
|
|
+
|
|
|
+## References
|
|
|
+
|
|
|
+**源文档和规范:**
|
|
|
+- [Source: `_bmad-output/planning-artifacts/epics.md`](Epic 8 - 区域管理 E2E 测试)
|
|
|
+- [Source: `_bmad-output/planning-artifacts/architecture.md`](测试架构和标准)
|
|
|
+- [Source: `_bmad-output/project-context.md`](项目上下文和规则)
|
|
|
+
|
|
|
+**前置 Story 参考:**
|
|
|
+- [Source: `_bmad-output/implementation-artifacts/8-1-region-page-object.md`](RegionManagementPage 实现)
|
|
|
+- [Source: `_bmad-output/implementation-artifacts/8-2-region-list-test.md`](区域列表测试)
|
|
|
+- [Source: `_bmad-output/implementation-artifacts/8-3-add-region-test.md`](添加区域测试)
|
|
|
+- [Source: `_bmad-output/implementation-artifacts/8-4-edit-region-test.md`](编辑区域测试)
|
|
|
+- [Source: `_bmad-output/implementation-artifacts/8-5-delete-region-test.md`](删除区域测试)
|
|
|
+- [Source: `_bmad-output/implementation-artifacts/8-6-cascade-select-test.md`](级联选择测试)
|
|
|
+
|
|
|
+**代码参考:**
|
|
|
+- [Source: `web/tests/e2e/pages/admin/region-management.page.ts`](Page Object 实现)
|
|
|
+- [Source: `web/tests/e2e/utils/test-setup.ts`](Test fixtures)
|
|
|
+
|
|
|
+## Dev Agent Record
|
|
|
+
|
|
|
+### Agent Model Used
|
|
|
+
|
|
|
+- Model: Claude (Opus/Sonnet)
|
|
|
+- Date: 2026-01-12
|
|
|
+
|
|
|
+### Debug Log References
|
|
|
+
|
|
|
+### 测试运行结果
|
|
|
+
|
|
|
+**本 Story 执行时填写:**
|
|
|
+
|
|
|
+| 指标 | 结果 |
|
|
|
+|------|------|
|
|
|
+| 测试日期 | YYYY-MM-DD |
|
|
|
+| 总测试数 | X |
|
|
|
+| 通过 | X |
|
|
|
+| 失败 | X |
|
|
|
+| 跳过 | X |
|
|
|
+| 通过率 | X% |
|
|
|
+| 总运行时间 | Xs |
|
|
|
+
|
|
|
+### 问题清单
|
|
|
+
|
|
|
+**本 Story 执行时填写:**
|
|
|
+
|
|
|
+### HIGH 严重程度问题
|
|
|
+
|
|
|
+...
|
|
|
+
|
|
|
+### MEDIUM 严重程度问题
|
|
|
+
|
|
|
+...
|
|
|
+
|
|
|
+### LOW 严重程度问题
|
|
|
+
|
|
|
+...
|
|
|
+
|
|
|
+### 工具评估结果
|
|
|
+
|
|
|
+**本 Story 执行时填写:**
|
|
|
+
|
|
|
+| 评估项 | 结果 |
|
|
|
+|--------|------|
|
|
|
+| 是否需要扩展工具包 | 是/否 |
|
|
|
+| 触发 Story 8.8 | 是/否 |
|
|
|
+| 需要扩展的功能 | ... |
|
|
|
+
|
|
|
+### 建议的下一步操作
|
|
|
+
|
|
|
+**本 Story 执行时填写:**
|
|
|
+
|
|
|
+1. [ ] ...
|
|
|
+2. [ ] ...
|
|
|
+3. [ ] ...
|
|
|
+
|
|
|
+### File List
|
|
|
+
|
|
|
+**Story 文档:**
|
|
|
+- `_bmad-output/implementation-artifacts/8-7-run-tests-collect-issues.md` (本文件)
|
|
|
+
|
|
|
+**参考测试文件(只读):**
|
|
|
+- `web/tests/e2e/pages/admin/region-management.page.ts`
|
|
|
+- `web/tests/e2e/specs/admin/region-*.spec.ts`
|
|
|
+- `web/tests/e2e/utils/test-setup.ts`
|
|
|
+
|
|
|
+## Project Context Reference
|
|
|
+
|
|
|
+### 关键项目规则摘要
|
|
|
+
|
|
|
+**技术栈:**
|
|
|
+- Playwright 1.55.0 - E2E 测试框架
|
|
|
+- TypeScript 5.9.3 - 严格模式
|
|
|
+- @d8d/e2e-test-utils - 内部测试工具包
|
|
|
+- Node.js 20.19.2
|
|
|
+- pnpm 10.18.3 - 包管理
|
|
|
+
|
|
|
+**测试命令:**
|
|
|
+```bash
|
|
|
+# 运行所有区域管理测试
|
|
|
+cd web
|
|
|
+pnpm test:e2e:chromium region-*.spec.ts
|
|
|
+
|
|
|
+# 运行单个测试文件
|
|
|
+pnpm test:e2e:chromium region-list
|
|
|
+pnpm test:e2e:chromium region-add
|
|
|
+pnpm test:e2e:chromium region-edit
|
|
|
+pnpm test:e2e:chromium region-delete
|
|
|
+pnpm test:e2e:chromium region-cascade
|
|
|
+```
|
|
|
+
|
|
|
+**Console 输出:**
|
|
|
+- Vitest 中只有 `console.debug` 会显示
|
|
|
+- E2E 测试失败时查看 `test-results/**/error-context.md`
|
|
|
+
|
|
|
+### 相关 Epic 和 Story
|
|
|
+
|
|
|
+**前置 Epic:**
|
|
|
+- Epic 1: ✅ 完成 - Select 工具基础框架
|
|
|
+- Epic 2: ✅ 完成 - Select 工具在真实 E2E 测试中验证
|
|
|
+
|
|
|
+**当前 Epic (Epic 8):**
|
|
|
+- Story 8.1: ✅ 完成 - 创建区域管理 Page Object
|
|
|
+- Story 8.2: ✅ 完成 - 编写区域列表查看测试
|
|
|
+- Story 8.3: ✅ 完成 - 编写添加区域测试
|
|
|
+- Story 8.4: ✅ 完成 - 编写编辑区域测试
|
|
|
+- Story 8.5: ✅ 完成 - 编写删除区域测试
|
|
|
+- Story 8.6: ✅ 完成 - 编写级联选择完整流程测试
|
|
|
+- Story 8.7: 📝 当前 - 运行测试并收集问题和改进建议
|
|
|
+- Story 8.8: ⏳ 待定 - 扩展工具包(如需要)
|
|
|
+- Story 8.9: ⏳ 待定 - 区域管理稳定性验证
|
|
|
+
|
|
|
+**后续 Epic:**
|
|
|
+- Epic 9: 🔄 进行中 - 残疾人管理完整 E2E 测试覆盖
|
|
|
+- Epic 10: 🔄 进行中 - 订单管理 E2E 测试
|
|
|
+
|
|
|
+## Completion Status
|
|
|
+
|
|
|
+**Story ID:** 8.7
|
|
|
+**Story Key:** 8-7-run-tests-collect-issues
|
|
|
+**Epic:** Epic 8 - 区域管理 E2E 测试 (Epic B)
|
|
|
+**Status:** ready-for-dev
|
|
|
+
|
|
|
+**交付物:**
|
|
|
+- [x] Story 文档创建完成
|
|
|
+- [ ] 运行完整的区域管理 E2E 测试套件
|
|
|
+- [ ] 记录和分析问题
|
|
|
+- [ ] 评估工具扩展需求
|
|
|
+- [ ] 整理测试报告
|