UI 层级全自动测试套件 — 需求共识文档
文档编号: GYM-GRILL-UI-TEST-001
日期: 2026-07-21
状态: 已确认
产出命令: /grill-with-docs
一、功能概述
为健身房管理系统构建 UI 层级的全自动测试套件,覆盖 管理后台 Web(Vue 3) 和 会员小程序(UniApp) 两个 UI 终端,确保所有已实现功能通过系统化测试,达到 ≥95% 通过率的交付水平。
目标终端
| UI 层级 |
技术栈 |
当前测试状态 |
目标 |
| 管理后台 Web |
Vue 3 + Element Plus + Vite |
Vitest 单元测试 + Playwright E2E(81%通过率) |
修复失败 → 补齐覆盖 → ≥95% |
| 会员小程序 |
UniApp(Vue) |
零测试 |
从零构建 → 完整覆盖 |
二、当前状态分析
2.1 已实现功能清单(管理后台 - 21个页面)
| 模块 |
页面 |
关联功能清单 |
已有 E2E Page Object |
已有 E2E 测试 |
| 系统管理 |
Login / Dashboard / 403 |
P0 模块7 |
LoginPage / DashboardPage |
✅ |
| 系统管理 |
UserManagement |
P0 模块7 |
UserManagementPage |
✅ journeys |
| 系统管理 |
CoachManagement |
—(额外功能) |
❌ |
❌ |
| 系统管理 |
RoleManagement |
P0 模块7 |
RoleManagementPage |
✅ journeys |
| 系统管理 |
MenuManagement |
P0 模块7 |
MenuManagementPage |
✅ |
| 配置 |
ConfigManagement |
—(额外功能) |
SystemConfigPage |
✅ |
| 配置 |
DictManagement |
—(额外功能) |
DictionaryManagementPage |
✅ |
| 文件 |
FileManagement |
—(额外功能) |
FileManagementPage |
✅ |
| 通知 |
NoticeManagement |
—(额外功能) |
NotificationPage |
✅ |
| 轮播图 |
BannerManagement |
—(额外功能) |
❌ |
❌ |
| 审计 |
LoginLog |
—(额外功能) |
LoginLogPage |
✅ |
| 审计 |
OperationLog |
—(额外功能) |
OperationLogPage |
✅ |
| 审计 |
ExceptionLog |
—(额外功能) |
ExceptionLogPage |
✅ |
| 团课 |
GroupCourseManagement |
P1 模块2 |
❌ |
❌ (Page 缺失) |
| 团课 |
CourseTypeManagement |
P1 模块2 |
❌ |
❌ |
| 团课 |
CourseLabelManagement |
—(额外功能) |
❌ |
❌ |
| 团课 |
CourseRecommendManagement |
—(额外功能) |
❌ |
❌ |
| 会员 |
MemberManagement |
P1 模块1 |
❌ |
❌ |
| 会员 |
MemberCardManagement |
P0 模块1 |
❌ |
❌ |
| 统计 |
StatisticsDashboard |
P1 模块4 |
❌ |
❌ |
标记 ❌ 的为 新增测试缺口,共 10 个页面。
2.2 已实现功能清单(小程序 - 6个页面)
| 页面 |
关联功能清单 |
测试状态 |
| 首页 (index) |
P0 模块1 微信登录入口 |
❌ |
| 登录 (login) |
P0 模块1 微信快捷登录 |
❌ |
| 课程详情 (course-detail) |
P0 模块2 团课详情 |
❌ |
| 我的课程 (my-courses) |
P0 模块2 预约记录 |
❌ |
| 个人中心 (profile) |
P0 模块1 会员信息 |
❌ |
| 搜索 (search) |
P0 模块2 团课搜索 |
❌ |
2.3 现有测试资产
| 资产 |
状态 |
价值 |
| 12 个 Page Object |
成熟 |
可直接复用 |
| TestDataManager + TestDataFactory |
成熟 |
可直接复用 |
| RetryHelper + TestStabilityHelper |
成熟 |
可直接复用 |
| global-setup / global-teardown |
成熟 |
可直接复用 |
| customReporter(HTML+JSON+控制台) |
成熟 |
可直接复用 |
| auth.setup(storageState) |
有 Bug |
需修复 storageState 冲突 |
| 10 个 Journey 测试(100%通过) |
健康 |
保持不变 |
2.4 现有失败测试分析(9个)
| 失败测试 |
根因 |
修复策略 |
| auth-test.spec.ts (4用例) |
storageState 冲突:全局认证状态下,登录相关测试无法模拟未登录场景 |
为该文件配置独立 project(禁用 storageState) |
| basic-ui-test.spec.ts |
已登录后重定向到 Dashboard 而非登录页 |
调整测试预期或独立 project |
| config-management.spec.ts |
超时/选择器不匹配 |
更新选择器,增加等待策略 |
| dict-management.spec.ts |
超时/选择器不匹配 |
同上 |
| menu-management.spec.ts |
超时/选择器不匹配 |
同上 |
| debug/debug-role-assignment.spec.ts |
测试逻辑问题 |
重写或移除 |
三、用户故事
US-1: 测试工程师运行全量回归
As a 测试工程师
I want 一键运行全部 UI 测试并自动生成报告
So that 每次发版前能快速确认系统质量状况
US-2: 开发者在 CI 中获得反馈
As a 开发者
I want Push 代码后 Jenkins 自动运行冒烟测试
So that 核心功能回归能在 5 分钟内给出反馈
US-3: 产品经理验证业务规则
As a 产品经理
I want 测试覆盖功能清单中的业务规则和技术要点
So that 交付的功能与设计一致
US-4: 小程序团队确保质量
As a 小程序开发者
I want 微信模拟器中的自动化测试
So that 小程序端的回归不需要手动点点点
四、测试架构设计
4.1 整体分层
4.2 技术方案
| 层级 |
管理后台 Web |
会员小程序 |
| 框架 |
Playwright + TypeScript |
miniprogram-automator + Jest |
| 设计模式 |
Page Object |
Page Object(模拟) |
| 数据管理 |
TestDataManager + TestDataFactory |
独立 DataFactory(复用 API 层) |
| 报告 |
customReporter(HTML+JSON) |
Jest HTML Reporter |
| 运行环境 |
复用 global-setup 自动启动服务 |
微信开发者工具 CLI + 模拟器 |
| CI |
Jenkins Pipeline |
Jenkins Pipeline |
五、业务流程(测试范围)
5.1 管理后台核心流程
5.2 小程序核心流程
六、验收标准
通用标准
| 编号 |
标准 |
量化指标 |
| AC-1 |
测试通过率 |
≥ 95%(总用例) |
| AC-2 |
核心业务链路 |
100% 通过(登录→关键操作→退出) |
| AC-3 |
冒烟测试耗时 |
≤ 5 分钟 |
| AC-4 |
全量 E2E 耗时 |
≤ 15 分钟(管理后台 + 小程序并行) |
| AC-5 |
测试报告 |
自动生成 HTML + JSON 报告,包含失败截图 |
| AC-6 |
CI 集成 |
Jenkins Pipeline 可一键触发,结果自动归档 |
| AC-7 |
测试数据隔离 |
每次运行使用独立数据前缀,运行后自动清理 |
| AC-8 |
稳定性 |
连续 3 次无随机失败(flake rate = 0%) |
功能覆盖标准
| 编号 |
标准 |
| AC-9 |
管理后台 21 个页面,每个至少 1 个 Happy Path 测试 |
| AC-10 |
核心 CRUD 操作(用户/角色/团课)覆盖增删改查全流程 |
| AC-11 |
角色边界测试覆盖至少 3 个角色(Admin / 店长 / 前台) |
| AC-12 |
小程序 6 个页面,每个至少 1 个 Happy Path 测试 |
| AC-13 |
小程序预约/取消流程端到端验证 |
| AC-14 |
性能测试至少覆盖 Dashboard 和团课列表 2 个关键页面 |
七、实施计划(优先级排序)
第1阶段:修复现有测试(预计 1 天)
| 任务 |
产出 |
| 修复 storageState 冲突 |
auth-test.spec.ts 4 个用例通过 |
| 为需要未登录状态的测试创建独立 Playwright project |
basic-ui-test.spec.ts 通过 |
| 更新选择器 + 等待策略 |
config/dict/menu 3 个 spec 通过 |
| 处理 debug 目录 |
重写或移除 debug-role-assignment |
| 目标 |
53/53 测试通过(100%) |
第2阶段:补齐管理后台缺失测试(预计 2 天)
| 任务 |
覆盖页面 |
| 创建 10 个新 Page Object |
CoachManagement, BannerManagement, GroupCourseManagement, CourseTypeManagement, CourseLabelManagement, CourseRecommendManagement, MemberManagement, MemberCardManagement, StatisticsDashboard(以及团课页面类) |
| 编写 8 个 Journey 测试 |
对应上述缺失页面 |
| 扩展角色边界测试 |
3 角色 × 5 关键页面 |
| 编写 2 个性能测试 |
Dashboard + 团课列表 |
第3阶段:构建小程序测试(预计 2 天)
| 任务 |
产出 |
| 搭建 miniprogram-automator 环境 |
安装依赖、配置微信开发者工具 CLI |
| 创建小程序 Page Object(6 个页面) |
首页/登录/课程详情/我的课程/个人中心/搜索 |
| 编写 4 个 Journey 测试 |
登录→首页→课程详情→预约;登录→我的课程→取消;登录→个人中心→信息编辑;首页→搜索→课程详情 |
| 编写 1 个冒烟测试 |
启动→首页渲染→登录 |
第4阶段:Jenkins CI 集成(预计 1 天)
| 任务 |
产出 |
| 编写 Jenkinsfile |
定义 Stage:环境准备 → 冒烟测试 → 全量 E2E(Web + 小程序并行) → 性能测试 → 报告归档 |
| 配置测试报告归档 |
HTML Report Plugin + JUnit Plugin |
| 配置失败通知 |
企业微信/邮件通知 |
八、涉及的领域概念
| 领域概念 |
测试关注点 |
| 会员 (Member) |
会员管理 CRUD、会员卡购买/查看 |
| 用户 (User) |
用户管理 CRUD、角色分配 |
| 角色 (Role) |
角色 CRUD、权限分配、边界验证 |
| 权限 (Permission) |
菜单可见性、按钮权限、越权访问验证 |
| 团课 (Group Course) |
团课 CRUD、类型/标签/推荐管理 |
| 预约 (Booking) |
预约/取消流程(小程序端) |
| 签到 (Check-in) |
扫码签到(后续迭代,依赖微信环境) |
| 会员卡 (Membership Card) |
会员卡管理、到期提醒 |
九、非功能需求
| 类型 |
要求 |
| 可靠性 |
连续 3 次运行无随机失败(flake-free) |
| 可维护性 |
Page Object 模式,禁止硬编码选择器 |
| 可扩展性 |
新页面通过添加 Page Object + 1 个 Journey 即可接入 |
| 数据隔离 |
测试数据使用唯一前缀,运行后自动清理,不影响开发环境 |
| CI 兼容 |
Jenkins Pipeline 声明式,参数化(支持选择运行范围) |
十、风险与应对
| 风险 |
应对策略 |
| miniprogram-automator 与 UniApp 兼容性问题 |
先用 H5 模式验证可行性,再切换模拟器 |
| 微信开发者工具在 Jenkins 无头环境运行受限 |
Jenkins Agent 部署在 Windows 有桌面环境机器上 |
| 现有 E2E 测试大规模重构引入回归 |
第1阶段仅修复,不做重构;后续新增测试在独立文件中 |
| 小程序登录依赖真实微信环境 |
使用 Mock 微信 API 或测试用 OpenID/UnionID |
| 性能测试基准不稳定 |
取 3 次运行中位数,允许 ±15% 波动 |
十一、待确认项
十二、相关文档