# 全面端到端测试报告 ## 测试概要 | 项目 | 值 | |------|-----| | 测试时间 | 2026-07-22T10:36:09.900Z ~ 2026-07-22T10:36:11.075Z | | 总步骤数 | 14 | | 通过 | 14 | | 失败 | 0 | | 课程ID | 33 | | 课程名称 | 全流程测试-mrvy5z1v | | 二维码路径 | D:\Work\BIG_project\week2\base14-update-test\gym-manage\QRCODE\全流程测试_mrvy5z1v.png | | API地址 | http://192.168.110.64:8084 | ## 测试范围 | 模块 | 项目 | 测试内容 | |------|------|----------| | 后台管理系统 | `gym-manage-web` | 管理员登录、创建团课(无封面、张教练)、修改团课时间、保存二维码 | | 会员端 | `gym-manage-uniapp` | 会员登录、预约团课、扫码签到 | | 教练端 | `gym-manage-coach-uniapp` | 教练登录、手动开课、手动结课 | | 后端API | `gym-manage-api` | 所有操作通过REST API完成 | ## 业务规则验证 | 规则 | 条件 | 测试策略 | |------|------|----------| | 预约时间限制 | 需在开课前 >= 30分钟 | 创建课程startTime为5小时后,预约成功 | | 签到时间窗口 | 开课前2小时 ~ 课程结束 | 调整startTime为1小时后,签到成功 | | 教练开课 | 开课时间后10分钟内正常开课 | 调整startTime为3分钟前,开课成功 | | 教练结课 | 结束时间后10分钟内结课 | 调整endTime为2分钟前,结课 | ## 测试流程 ``` 1. Admin: Login -> Get coach list -> Create course -> Save QR code 2. Member: Login -> Book course 3. Admin: Adjust startTime (for sign-in window) 4. Member: Sign in (scan QR) 5. Admin: Adjust startTime to past (for coach start) 6. Coach: Login -> Start course 7. Admin: Adjust endTime to past (for coach end) 8. Coach: End course ``` ## 详细步骤结果 | # | 步骤 | 状态 | 详情 | 时间 | |---|------|------|------|------| | 1 | 1a. 管理员登录 | PASS | admin / userId=1 | 2026-07-22T10:36:10.260Z | | 2 | 1b. 获取教练列表 | PASS | 找到 coach_zhang, id=11, nickname=张教练(瑜伽) | 2026-07-22T10:36:10.291Z | | 3 | 1c. 创建团课 | PASS | id=33, name="全流程测试-mrvy5z1v", coachId=11, 无封面, startTime=2026-07-22T23:36:10 | 2026-07-22T10:36:10.356Z | | 4 | 1d. 保存二维码 | PASS | 已保存: D:\Work\BIG_project\week2\base14-update-test\gym-manage\QRCODE\全流程测试_mrvy5z1v.png (2121 bytes) | 2026-07-22T10:36:10.416Z | | 5 | 2a. 会员登录 | PASS | memberId=16 | 2026-07-22T10:36:10.431Z | | 6 | 2b. 预约团课 | PASS | courseId=33, bookingId=4, 距开课约5h(>=30min要求) | 2026-07-22T10:36:10.468Z | | 7 | 2c. 调整课程时间(签到用) | PASS | startTime→2026-07-22T19:36:10(1h后→满足签到2h窗口) | 2026-07-22T10:36:10.502Z | | 8 | 2d. 扫码签到 | PASS | courseId=33, memberId=16, 签到时间距开课约1h(满足2h窗口) | 2026-07-22T10:36:10.535Z | | 9 | 3a. 教练登录 | PASS | coach_zhang, userId=11 | 2026-07-22T10:36:10.903Z | | 10 | 3b. 调整课程时间(开课用) | PASS | startTime→2026-07-22T18:33:10(3分钟前→教练可正常开课) | 2026-07-22T10:36:10.940Z | | 11 | 3c. 手动开课 | PASS | courseId=33, status=3, msg=开课成功 | 2026-07-22T10:36:10.974Z | | 12 | 3d. 调整结束时间(结课用) | PASS | endTime→2026-07-22T18:34:10(2分钟前→教练可结课) | 2026-07-22T10:36:11.002Z | | 13 | 3e. 手动结课 | PASS | courseId=33, status=2, msg=结课成功 | 2026-07-22T10:36:11.032Z | | 14 | 4. 最终课程状态 | PASS | name="全流程测试-mrvy5z1v", status=2, members=0, startTime=2026-07-22T18:33:10 | 2026-07-22T10:36:11.074Z | ## 使用的API端点 | 端点 | 方法 | 用途 | 认证 | |------|------|------|------| | `/api/auth/login` | POST | 管理员/教练登录 | HMAC签名 | | `/api/coach/list` | GET | 获取教练列表 | JWT (Admin) | | `/api/groupCourse` | POST | 创建团课 | JWT (Admin) | | `/api/groupCourse/{id}` | PUT | 修改团课时间 | JWT (Admin) | | `/api/groupCourse/{id}/detail` | GET | 获取课程详情(含二维码) | JWT (Admin) | | `/api/member/auth/miniapp/login` | POST | 会员登录 | HMAC签名 | | `/api/groupCourse/book` | POST | 预约团课 | JWT (Member) | | `/api/groupCourse/signin/{memberId}` | POST | 扫码签到 | JWT (Member) | | `/api/coach/courses/{courseId}/start` | POST | 教练手动开课 | JWT (Coach) | | `/api/coach/courses/{courseId}/end` | POST | 教练手动结课 | JWT (Coach) | ## 认证机制 - **JWT Token**: `Authorization: Bearer {token}` - **HMAC-SHA256**: `X-Signature`, `X-Timestamp`, `X-Nonce` - **Secret Key**: `NovalonManageSystemSecretKey2026` ## 测试账号 | 角色 | 用户名 | 密码 | |------|--------|------| | 管理员 | admin | Test@123 | | 会员 | (小程序code登录) | dev-test-fullflow-1784716569900 | | 教练 | coach_zhang | Test@123 | ## 时间约束处理策略 本测试通过后台API动态调整课程时间,绕过各步骤的时间限制: | 步骤 | 时间约束 | 处理方式 | |------|----------|----------| | 预约 | 需 >= 30分钟前 | 创建课程startTime=当前+5h | | 签到 | 开课前2h ~ 课程结束 | PUT修改startTime=当前+1h | | 开课 | 开课时间后10分钟内 | PUT修改startTime=当前-3min | | 结课 | 结束时间后10分钟内 | PUT修改endTime=当前-2min | > **注意**: 使用 `formatLocalTime()` 发送本地时间(无时区),确保与服务器 LocalDateTime 一致。