Files
gym-manage/e2e-tests/docs/web-admin-test.md
T

12 KiB
Raw Blame History

Web 后台管理系统 — 测试文档

位置: gym-manage-web/ | 框架: Vitest + Playwright | 用例数: 185+ (单元 171 + E2E 14+) | 通过率: 100%


一、概览

Web 后台管理系统有两层测试体系:

测试类型 框架 用例数 通过率 运行命令
单元测试 Vitest + jsdom 171 100% npm run test
E2E 测试 Playwright 24+(按需指定) 100% npm run test:e2e

二、Vitest 单元测试(24 文件,171 用例)

2.1 组件测试(13 文件,141 用例)

覆盖所有管理页面的 Vue 组件渲染和行为。

测试文件 用例数 测试的 Vue 组件
Login.test.ts 12 登录表单(用户名/密码输入、提交、错误提示、记住我)
Dashboard.test.ts 10 仪表盘(统计卡片、数据加载、模块渲染)
UserManagement.test.ts 15 用户管理(列表渲染、搜索、新增/编辑对话框、角色分配、删除确认)
RoleManagement.test.ts 12 角色管理(列表、权限树、菜单分配、状态切换)
MenuManagement.test.ts 14 菜单管理(树形表格、新增/编辑、图标选择、排序)
DictManagement.test.ts 12 字典管理(类型+数据 Tab切换、新增、编辑、删除)
ConfigManagement.test.ts 10 参数配置(列表、新增、编辑、key 唯一性)
NoticeManagement.test.ts 10 通知公告(发布、撤回、富文本编辑)
FileManagement.test.ts 8 文件管理(上传、下载、预览、删除、类型过滤)
OperationLog.test.ts 8 操作日志(列表、筛选、详情查看)
LoginLog.test.ts 8 登录日志(列表、状态筛选、时间范围)
ExceptionLog.test.ts 7 异常日志(列表、堆栈展开、级别过滤)
MenuItem.test.ts 5 菜单项渲染、路由跳转、权限隐藏

2.2 状态管理(1 文件,10 用例)

测试文件 用例数 测试内容
permission.test.ts 10 Pinia Permission StoresetPermissions/clearPermissionshasRole/hasPermission、空权限处理、管理员特殊处理

2.3 指令(1 文件,5 用例)

测试文件 用例数 测试内容
permission.test.ts 5 v-permission 指令:角色检查、权限检查、数组参数、无权限隐藏/禁用

2.4 路由守卫(1 文件,5 用例)

测试文件 用例数 测试内容
permission.guard.test.ts 5 未登录 → 重定向 /login、已登录访问 /login → 重定向 /dashboard、Token过期处理、白名单路径、动态路由加载

2.5 基于角色的测试(3 文件,15 用例)

测试文件 用例数 测试内容
admin.role.test.ts 6 管理员角色:全权限、全菜单、无限制操作
base.role.test.ts 5 基础角色:受限菜单、操作按钮隐藏
role-factory.test.ts 4 角色工厂:动态创建测试角色、权限组合

2.6 角色测试辅助(3 文件,13 用例)

测试文件 用例数 测试内容
test-data-manager.test.ts 5 测试数据生成器(用户、角色、菜单)
role-auth-manager.test.ts 4 角色认证管理器
permission-helper.test.ts 4 权限辅助工具

2.7 工具函数(1 文件,6 用例)

测试文件 用例数 测试内容
errorHandler.test.ts 6 统一错误处理:网络错误、401 自动登出、403 提示、超时回调

2.8 配置验证(1 文件,2 用例)

测试文件 用例数 测试内容
config.test.ts 2 Vitest 框架配置验证:基础断言、异步支持

2.9 Vitest 单元测试目录结构

src/__tests__/
├── components/               # 14 组件测试
│   ├── Login.test.ts
│   ├── Dashboard.test.ts
│   ├── UserManagement.test.ts
│   ├── RoleManagement.test.ts
│   ├── MenuManagement.test.ts
│   ├── MenuItem.test.ts
│   ├── DictManagement.test.ts
│   ├── ConfigManagement.test.ts
│   ├── NoticeManagement.test.ts
│   ├── FileManagement.test.ts
│   ├── OperationLog.test.ts
│   ├── LoginLog.test.ts
│   └── ExceptionLog.test.ts
├── stores/
│   └── permission.test.ts    # Pinia Store
├── directives/
│   └── permission.test.ts    # v-permission
├── router/
│   └── permission.guard.test.ts # 路由守卫
├── utils/
│   └── errorHandler.test.ts  # 错误处理
├── config.test.ts            # 框架验证
└── role-based-tests/         # 基于角色
    ├── roles/__tests__/
    │   ├── admin.role.test.ts
    │   ├── base.role.test.ts
    │   └── role-factory.test.ts
    └── shared/__tests__/
        ├── test-data-manager.test.ts
        ├── role-auth-manager.test.ts
        └── permission-helper.test.ts

三、Playwright E2E 测试(24+ 用例)

3.1 测试体系

由 4 个项目组成,分别覆盖不同层级:

项目 目录 描述 用例数
setup auth.setup.ts 认证 Token 预获取(全局前置) 1
smoke e2e/smoke/ 基础冒烟测试 1
root e2e/*.spec.ts 独立功能验证 7
journeys e2e/journeys/ 端到端旅程 16
debug e2e/debug/ 调试辅助 3

3.2 运行命令

npm run test:e2e           # 全部项目
npm run test:e2e:smoke     # 冒烟测试
npm run test:e2e:journeys  # 旅程测试
npm run test:e2e:headed    # 有头模式(可视化)
npm run test:e2e:debug     # 调试模式(逐步执行)
npm run test:e2e:perf      # 性能基准

3.3 配置参数

参数 说明
baseURL http://localhost:3002 Web 前端地址
timeout 120s 测试超时
expect.timeout 30s 断言超时
actionTimeout 30s 操作超时
navigationTimeout 60s 页面跳转超时
retries CI: 2, 本地: 1 失败重试次数
workers CI: 4, 本地: 50% 并行 Worker 数
headless CI: true, 本地: false 无头模式
viewport 1280×720 浏览器窗口
locale zh-CN 语言
slowMo CI: 0, 本地: 100ms 操作延迟

3.4 测试文件详情

冒烟测试 (smoke/)

文件 用例数 测试内容
login-logout.spec.ts 1 管理员登录 → 导航验证 → 登出

根级测试

文件 用例数 测试内容
api-connectivity.spec.ts 3 网关健康检查 /actuator/health、前端页面加载、数据库连接状态
auth-test.spec.ts 3 JWT Token 获取/验证、未授权 401、登录 UI、权限验证
basic-ui-test.spec.ts 1 首页加载、登录页表单元素、导航栏、响应式 (375×667)
unauthorized-redirect.spec.ts 1 未登录访问 /members/courses/statistics → 自动重定向 /login
menu-management.spec.ts 1 登录 → 菜单管理 → 表格数据渲染
dict-management.spec.ts 1 登录 → 字典管理 → 类型+数据列表
config-management.spec.ts 1 登录 → 参数配置 → 列表显示

旅程测试 (journeys/)

文件 用例数 业务链路
admin-complete-workflow.spec.ts 1 创建角色 → 分配权限 → 创建用户 → 绑定角色 → 验证权限
audit-workflow.spec.ts 1 导航审计日志 → 筛选条件 → 时间范围 → 详情查看
coach-banner-workflow.spec.ts 1 教练管理 → 轮播图管理 → 新增/编辑
config-workflow.spec.ts 1 参数配置 → 新增配置 → 编辑 → 删除
dict-workflow.spec.ts 1 字典类型创建 → 字典数据录入 → 编辑 → 删除
dictionary-complete-workflow.spec.ts 1 字典类型+数据完整增删改查流程
exception-log-workflow.spec.ts 1 异常日志查看 → 堆栈展开 → 级别筛选
extended-role-boundary.spec.ts 1 角色权限扩展 → 边界条件 → 多角色叠加
file-management-workflow.spec.ts 1 文件上传 → 列表查看 → 下载 → 预览 → 删除
groupcourse-workflow.spec.ts 1 课程类型 → 课程标签 → 课程推荐 → 团课管理
member-workflow.spec.ts 1 会员列表 → 会员卡管理 → 储值卡 → 退款申请
notice-workflow.spec.ts 1 创建公告 → 发布 → 查看 → 撤回
performance.spec.ts 1 首屏加载时间、路由切换性能、API 响应耗时
statistics-workflow.spec.ts 1 数据统计看板 → 会员统计 → 预约统计 → 签到统计
system-config-complete-workflow.spec.ts 1 系统配置完整增删改查 → 缓存刷新 → 验证生效
user-permission-boundary.spec.ts 1 普通用户权限边界 → 受限菜单 → 按钮隐藏 → 403 处理

四、Page Object 模式(11 个页面对象)

所有页面交互封装在 e2e/pages/ 下:

Page Object 对应页面 核心方法
LoginPage.ts 登录 goto(), login(username, password), getErrorMessage()
DashboardPage.ts 仪表盘 getStats(), navigateTo(menu)
UserManagementPage.ts 用户管理 searchUser(), addUser(), editUser(), deleteUser()
RoleManagementPage.ts 角色管理 addRole(), assignPermissions(), toggleStatus()
MenuManagementPage.ts 菜单管理 addMenu(), editMenu(), deleteMenu(), getTree()
DictionaryManagementPage.ts 字典管理 addType(), addData(), editData(), deleteData()
SystemConfigPage.ts 参数配置 addConfig(), editConfig(), deleteConfig()
NotificationPage.ts 通知公告 createNotice(), publish(), revoke()
FileManagementPage.ts 文件管理 uploadFile(), downloadFile(), previewFile()
OperationLogPage.ts 操作日志 filterByModule(), viewDetail()
LoginLogPage.ts 登录日志 filterByStatus(), filterByDate()
ExceptionLogPage.ts 异常日志 expandStack(), filterByLevel()

业务 Page Object6 个)

Page Object 用途
CoachManagementPage.ts 教练 CRUD
BannerManagementPage.ts 轮播图管理
CourseTypeManagementPage.ts 课程类型管理
CourseLabelManagementPage.ts 课程标签管理
CourseRecommendManagementPage.ts 课程推荐管理
GroupCourseManagementPage.ts 团课管理
MemberManagementPage.ts 会员管理
MemberCardManagementPage.ts 会员卡管理
StatisticsDashboardPage.ts 统计看板

五、辅助模块

Helpers

文件 用途
auth.ts 登录认证、Token 存储/获取/清除
TestStabilityHelper.ts 测试稳定性(重试、等待、超时处理)
TestDataManager.ts 测试数据 CRUD 管理

Utils

文件 用途
api-client.ts HTTP API 客户端封装
testHelper.ts 通用测试辅助函数
TestDataFactory.ts 测试数据工厂(用户/角色/菜单/字典生成)
TestDataCleanup.ts 测试后数据清理
RetryHelper.ts 智能重试策略
testDataManager.ts 测试数据管理

Fixtures

文件 用途
test-data.ts 静态测试数据(账号、权限、菜单结构)
test-file.txt 文件上传测试用文件

六、运行方式

# 进入 Web 后台目录
cd gym-manage-web

# 单元测试
npm run test                  # 全量单元测试
npx vitest --run              # 同全量
npx vitest --run Login        # 运行匹配 "Login" 的测试
npx vitest --ui               # Vitest UI 模式

# E2E 测试(需先启动后端和前端服务)
npm run test:e2e              # 全部 Playwright 项目
npm run test:e2e:smoke        # 仅冒烟
npm run test:e2e:journeys     # 仅旅程
npm run test:e2e:headed       # 可视化浏览器
npm run test:e2e:debug        # 逐步执行
npm run test:e2e:perf         # 性能基准

文档生成时间: 2026-07-21 | 测试工具: Vitest + jsdom / Playwright + Chromium