8-7-run-tests-collect-issues.md 13 KB

Story 8.7: 运行测试并收集问题和改进建议

Status: ready-for-dev

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 级联选择测试 部分跳过

测试运行命令

# 进入 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 优化建议、代码风格 命名不规范、注释缺失

问题清单模板:

## 问题清单

### 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 部分需要包含:

### 测试运行结果

**测试日期**: YYYY-MM-DD
**测试通过率**: X/Y
**总运行时间**: Xs

### 问题清单

[按严重程度和类型分类记录]

### 工具评估结果

**是否需要扩展工具包**: 是/否
**触发 Story 8.8**: 是/否

### 建议的下一步操作

1. [ ] 修复 HIGH 优先级问题
2. [ ] 优化 MEDIUM 优先级问题
3. [ ] 进入 Story 8.8(如需要)
4. [ ] 进入 Story 8.9(稳定性验证)

RegionManagementPage API 参考

测试可用的主要方法:

// 树形操作
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. 查看错误上下文:

# 测试失败后自动生成
cat test-results/*/error-context.md

2. 使用 Playwright Inspector:

# 交互式调试
pnpm test:e2e:chromium region-*.spec.ts --debug

3. 添加调试输出:

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

源文档和规范:

前置 Story 参考:

代码参考:

  • Source: web/tests/e2e/pages/admin/region-management.page.ts
  • Source: web/tests/e2e/utils/test-setup.ts

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 - 包管理

测试命令:

# 运行所有区域管理测试
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

交付物:

  • Story 文档创建完成
  • 运行完整的区域管理 E2E 测试套件
  • 记录和分析问题
  • 评估工具扩展需求
  • 整理测试报告