# 课程包三端全链路测试记录 **测试日期**: 2026-03-13 **测试类型**: API 全链路功能测试 **测试结果**: ✅ 全部通过 --- ## 测试概述 本次测试针对课程包业务从超管端创建到学校端查看、教师端查看课程的完整 API 链路进行功能验证。 --- ## 测试结果汇总 | 阶段 | 测试项 | 状态 | |------|--------|------| | 超管端 | 登录功能 | ✅ 通过 | | 超管端 | 创建课程 | ✅ 通过 | | 超管端 | 发布课程 | ✅ 通过 | | 超管端 | 创建套餐 | ✅ 通过 | | 超管端 | 添加课程到套餐 | ✅ 通过 | | 超管端 | 提交审核 | ✅ 通过 | | 超管端 | 审核通过 | ✅ 通过 | | 超管端 | 发布套餐 | ✅ 通过 | | 超管端 | 授权给租户 | ✅ 通过 | | 学校端 | 登录功能 | ✅ 通过 | | 学校端 | 查看授权套餐 | ✅ 通过 | | 教师端 | 登录功能 | ✅ 通过 | | 教师端 | 查看可用课程 | ✅ 通过 | --- ## 测试流程 ### 第一阶段:超管端 1. **登录** (POST `/api/auth/login`) - 请求: `{"role": "admin", "username": "admin", "password": "123456"}` - 响应: 200 OK, token 返回成功 2. **创建课程** (POST `/api/admin/courses`) - 课程 ID: 14 - 课程名称: 测试课程_1773380715 - 状态: draft → published 3. **发布课程** (POST `/api/admin/courses/{id}/publish`) - 响应: 200 OK - 课程状态变为 published 4. **创建套餐** (POST `/api/v1/admin/packages`) - 套餐 ID: 9 - 套餐名称: 全链路测试套餐_1773380715 - 状态: DRAFT 5. **添加课程到套餐** (PUT `/api/v1/admin/packages/{id}/courses`) - 课程 ID: 14 - 响应: 200 OK 6. **提交审核** (POST `/api/v1/admin/packages/{id}/submit`) - 响应: 200 OK - 套餐状态: DRAFT → SUBMITTED 7. **审核通过** (POST `/api/v1/admin/packages/{id}/review`) - 请求: `{"approved": true, "comment": "自动化测试审核通过"}` - 响应: 200 OK - 套餐状态: SUBMITTED → APPROVED 8. **发布套餐** (POST `/api/v1/admin/packages/{id}/publish`) - 响应: 200 OK - 套餐状态: APPROVED → PUBLISHED 9. **授权给租户** (POST `/api/v1/admin/packages/{id}/grant`) - 租户 ID: 1 - 授权期限: 2027-03-13 - 响应: 200 OK ### 第二阶段:学校端 1. **登录** (POST `/api/auth/login`) - 请求: `{"role": "school", "username": "school1", "password": "123456"}` - 响应: 200 OK 2. **查看授权套餐** (GET `/api/school/packages`) - 响应: 200 OK - 返回租户套餐列表(包含套餐 ID 9) ### 第三阶段:教师端 1. **登录** (POST `/api/auth/login`) - 请求: `{"role": "teacher", "username": "teacher1", "password": "123456"}` - 响应: 200 OK 2. **查看可用课程** (GET `/api/teacher/courses`) - 响应: 200 OK - 返回课程列表(包含课程 ID 14) --- ## Bug 修复记录 ### Bug 1: 登录 API 路径错误 - **问题**: 测试脚本使用 `/api/v1/auth/login`,实际路径是 `/api/auth/login` - **修复**: 更新测试脚本 ### Bug 2: 角色名称大小写错误 - **问题**: 测试脚本使用 `"role": "ADMIN"`,枚举要求小写 `"admin"` - **修复**: 更新测试脚本使用小写角色名 ### Bug 3: 测试账号密码错误 - **问题**: 测试脚本使用 `admin123`,数据库初始化为 `123456` - **修复**: 更新测试脚本使用正确密码 ### Bug 4: 套餐提交审核必须包含课程 - **问题**: 提交审核时报错 "套餐必须包含至少一个课程包" - **修复**: 先创建课程,再添加到套餐,然后提交审核 ### Bug 5: 学校端 API 路径错误 - **问题**: 测试脚本使用 `/api/v1/school/packages`,实际路径是 `/api/school/packages` - **修复**: 更新测试脚本 ### Bug 6: 教师端无法看到系统课程 - **问题**: `getCoursePage` 和 `getCoursesByTenantId` 只查询租户自己的课程,不包含系统课程 - **修复**: 修改查询条件,同时包含租户课程和系统课程: ```java wrapper.and(w -> w .eq(Course::getTenantId, tenantId) .or() .eq(Course::getIsSystem, 1) ); ``` ### Bug 7: 创建系统课程未设置 isSystem 标志 - **问题**: `AdminCourseController.createCourse` 设置了 `isSystem=1` 但没有保存到数据库 - **修复**: 添加 `courseMapper.updateById(course)` 保存到数据库 ### Bug 8: 课程需要发布才能被教师端看到 - **问题**: 教师端查询条件 `status = 'published'`,新创建的课程状态是 `draft` - **修复**: 创建课程后调用发布接口 --- ## 新增功能 ### 新增授权接口 (超管端) - **路径**: `POST /api/v1/admin/packages/{id}/grant` - **功能**: 授权套餐给指定租户 - **请求参数**: - `tenantId`: 租户 ID - `endDate`: 授权结束日期 - `pricePaid`: 支付金额 - **响应**: 200 OK --- ## 测试脚本 - `test_package_full_api.py`: 完整套餐 API 测试(包含课程创建) - `test_three_ends.py`: 三端全链路测试 --- ## 下一步计划 1. **前端浏览器测试**: 使用 Playwright 进行前端页面的自动化测试 2. **备课功能测试**: 测试教师端备课、授课功能 3. **展播模式测试**: 测试课程展播模式 4. **数据完整性测试**: 测试套餐中所有字段、所有资源的填写和上传 --- **测试结论**: 课程包三端 API 全链路测试通过,所有核心功能正常运行。