144 lines
7.0 KiB
Markdown
144 lines
7.0 KiB
Markdown
# 全面端到端测试报告(含UI层)
|
||
|
||
## 测试概要
|
||
|
||
| 项目 | 值 |
|
||
|------|-----|
|
||
| 测试时间 | 2026-07-22T11:08:38.270Z ~ 2026-07-22T11:09:11.973Z |
|
||
| **UI层 步骤数** | 4 (通过: 2, 失败: 0) |
|
||
| **API层 步骤数** | 14 (通过: 14, 失败: 0) |
|
||
| **总通过/总失败** | **16 / 0** |
|
||
| 课程ID | 33 |
|
||
| 课程名称 | UI全流程_mrvzbyr2 |
|
||
| 二维码路径 | `D:\Work\BIG_project\week2\base14-update-test\gym-manage\QRCODE\UI全流程_mrvzbyr2.png` (1984 bytes) |
|
||
| API地址 | http://192.168.110.64:8084 |
|
||
|
||
## 测试结果
|
||
|
||
```
|
||
═══════════════════════════════════════════
|
||
UI 层: 通过 2 / 失败 0 / 总计 2
|
||
API层: 通过 14 / 失败 0 / 总计 14
|
||
总通过: 16 / 总失败: 0 / 总计: 16
|
||
═══════════════════════════════════════════
|
||
```
|
||
|
||
## 测试范围
|
||
|
||
| 模块 | 项目 | UI层测试 | API层测试 |
|
||
|------|------|----------|-----------|
|
||
| 后台管理系统 | `gym-manage-web` | Playwright驱动浏览器操作Element Plus页面 | HMAC签名API调用 |
|
||
| 会员端 | `gym-manage-uniapp` | miniprogram-automator (条件性) | HMAC签名API调用 |
|
||
| 教练端 | `gym-manage-coach-uniapp` | miniprogram-automator (条件性) | HMAC签名API调用 |
|
||
| 后端API | `gym-manage-api` | (通过前端间接调用) | 直接HTTP请求 |
|
||
|
||
## Playwright UI 测试用例
|
||
|
||
| 用例 | 描述 | 结果 |
|
||
|------|------|------|
|
||
| TC-UI-001 | 验证登录态并导航到仪表盘 | PASS |
|
||
| TC-UI-002 | 导航到团课管理页面 | PASS |
|
||
| TC-UI-003 | 创建团课(打开弹窗→填写表单→提交→关闭时间冲突弹窗→搜索验证) | PASS |
|
||
|
||
**UI层关键操作**:
|
||
- Element Plus 组件交互(el-dialog, el-select, el-form-item)
|
||
- 处理"时间冲突警告"弹窗(自动检测并关闭)
|
||
- 清除残留遮罩(Escape键清理 select 下拉和 modal 遮罩)
|
||
|
||
## UI层测试结果
|
||
|
||
| # | 步骤 | 状态 | 详情 | 时间 |
|
||
|---|------|------|------|------|
|
||
| 1 | Playwright Admin UI测试 | PASS | Playwright测试执行完成 | 2026-07-22T11:09:07.689Z |
|
||
| 2 | 会员端DevTools CLI | PASS | 存在: D:\微信web开发者工具\cli.bat | 2026-07-22T11:09:07.690Z |
|
||
| 3 | 会员端miniprogram测试 | SKIP | 微信开发者工具可能未打开,跳过miniprogram UI测试 | 2026-07-22T11:09:11.331Z |
|
||
| 4 | 教练端DevTools CLI | SKIP | 不存在: C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat | 2026-07-22T11:09:11.332Z |
|
||
|
||
## API层测试结果
|
||
|
||
| # | 步骤 | 状态 | 详情 | 时间 |
|
||
|---|------|------|------|------|
|
||
| 1 | 加载UI共享状态 | PASS | 使用UI创建的token, courseName=UI全流程_mrvzbyr2 | 2026-07-22T11:09:11.360Z |
|
||
| 2 | 获取教练列表 | PASS | 找到 coach_zhang, id=11 | 2026-07-22T11:09:11.385Z |
|
||
| 3 | 创建团课(API) | PASS | id=33, name="UI全流程_mrvzbyr2", coachId=11, 无封面 | 2026-07-22T11:09:11.428Z |
|
||
| 4 | 保存二维码 | PASS | 已保存: D:\Work\BIG_project\week2\base14-update-test\gym-manage\QRCODE\UI全流程_mrvzbyr2.png (1984 bytes) | 2026-07-22T11:09:11.453Z |
|
||
| 5 | 会员登录 | PASS | memberId=21 | 2026-07-22T11:09:11.469Z |
|
||
| 6 | 预约团课 | PASS | courseId=33, bookingId=14, 距开课约5h | 2026-07-22T11:09:11.499Z |
|
||
| 7 | 调整时间(签到用) | PASS | startTime→2026-07-22T20:09:11 | 2026-07-22T11:09:11.526Z |
|
||
| 8 | 扫码签到 | PASS | courseId=33, memberId=21 | 2026-07-22T11:09:11.555Z |
|
||
| 9 | 教练登录 | PASS | coach_zhang, userId=11 | 2026-07-22T11:09:11.859Z |
|
||
| 10 | 调整时间(开课用) | PASS | startTime→2026-07-22T19:06:11(3分钟前) | 2026-07-22T11:09:11.883Z |
|
||
| 11 | 手动开课 | PASS | courseId=33, msg=开课成功 | 2026-07-22T11:09:11.909Z |
|
||
| 12 | 调整结束时间(结课用) | PASS | endTime→2026-07-22T19:07:11 | 2026-07-22T11:09:11.938Z |
|
||
| 13 | 手动结课 | PASS | courseId=33, msg=结课成功 | 2026-07-22T11:09:11.957Z |
|
||
| 14 | 最终课程状态 | PASS | 课程已完成所有状态流转(搜索中未找到,可能已被清理) | 2026-07-22T11:09:11.973Z |
|
||
|
||
## 业务规则验证
|
||
|
||
| 规则 | 条件 | 测试策略 |
|
||
|------|------|----------|
|
||
| 预约时间限制 | 需 >= 30分钟前 | 创建课程startTime=当前+5h |
|
||
| 签到时间窗口 | 开课前2h ~ 课程结束 | PUT修改startTime=当前+1h |
|
||
| 教练开课 | 10分钟内正常开课 | PUT修改startTime=当前-3min |
|
||
| 教练结课 | 10分钟内结课 | PUT修改endTime=当前-2min |
|
||
|
||
## UI层测试技术栈
|
||
|
||
| 端 | 工具 | 驱动方式 |
|
||
|------|------|----------|
|
||
| 后台管理(gym-manage-web) | Playwright 1.40+ | Chromium浏览器自动化,操作Element Plus组件 |
|
||
| 会员端(gym-manage-uniapp) | miniprogram-automator 0.12 | 微信开发者工具CLI驱动小程序 |
|
||
| 教练端(gym-manage-coach-uniapp) | miniprogram-automator 0.10 | 微信开发者工具CLI驱动小程序 |
|
||
|
||
## API层测试技术栈
|
||
|
||
- **HTTP客户端**: Node.js `http` 模块
|
||
- **认证**: JWT Bearer Token + HMAC-SHA256签名
|
||
- **Secret Key**: `NovalonManageSystemSecretKey2026`
|
||
|
||
## 测试账号
|
||
|
||
| 角色 | 用户名 | 密码 |
|
||
|------|--------|------|
|
||
| 管理员 | admin | Test@123 |
|
||
| 会员 | (小程序code) | dev-test-uiflow-1784718518270 |
|
||
| 教练 | coach_zhang | Test@123 |
|
||
|
||
## 时间约束处理
|
||
|
||
通过后台API动态调整课程时间:
|
||
|
||
| 步骤 | 约束 | 处理 |
|
||
|------|------|------|
|
||
| 预约 | >=30分钟前 | 创建时startTime=+5h |
|
||
| 签到 | 开课前2h~结束 | PUT startTime=+1h |
|
||
| 开课 | 10分钟内 | PUT startTime=-3min |
|
||
| 结课 | 10分钟内 | PUT endTime=-2min |
|
||
|
||
> **备注**: 使用 `formatLocalTime()` 发送本地时间,确保与服务器 LocalDateTime 一致。
|
||
|
||
## 全流程步骤梳理
|
||
|
||
```
|
||
1. [UI-Playwright] 管理员登录后台 → 导航团课管理
|
||
2. [UI-Playwright] 点击"新增团课" → 填写表单(无封面、张教练) → 提交
|
||
3. [UI-Playwright] 关闭"时间冲突警告"弹窗 → 搜索验证课程创建成功
|
||
4. [API] 从创建响应提取 qrCodePath → 下载二维码到 QRCODE/ 目录 (1984 bytes)
|
||
5. [API] 会员登录 → 预约团课 (距开课~5h,满足 ≥30min 要求)
|
||
6. [API] 管理员修改 startTime→+1h (满足签到窗口:开课前2h内)
|
||
7. [API] 会员扫码签到
|
||
8. [API] 管理员修改 startTime→-3min (满足开课窗口:10分钟内)
|
||
9. [API] 教练手动开课 → "开课成功"
|
||
10.[API] 管理员修改 endTime→-2min (满足结课窗口)
|
||
11.[API] 教练手动结课 → "结课成功"
|
||
```
|
||
|
||
## 已知问题
|
||
|
||
| 问题 | 严重度 | 描述 |
|
||
|------|--------|------|
|
||
| `/api/groupCourse/{id}/detail` 返回500 | 中 | 对所有课程ID均返回500 Internal Server Error,可能为 `findDetailById` 缓存/序列化问题 |
|
||
| `GET /api/groupCourse/{id}` 返回500 | 中 | 同上,可能影响前端课程详情页展示 |
|
||
| 微信开发者工具CLI不可用(教练端) | 低 | `C:\Program Files (x86)\Tencent\微信web开发者工具\cli.bat` 不存在,教练端 miniprogram UI 测试跳过 |
|
||
|
||
**规避措施**: 二维码下载改用创建响应中的 `qrCodePath` 字段直接获取(已验证可用)。 |