peixue-dev/peidu/docs/fixes/2026-01-23-我的课程与学习记录关联/🧪测试指南.md

294 lines
5.8 KiB
Markdown
Raw Normal View History

# 测试指南 - 我的课程与学习记录关联
## 📋 测试前准备
### 1. 执行SQL脚本
```bash
# 在MySQL中执行
mysql -u root -p peidu < peidu/sql/create_course_learning_record_table.sql
```
### 2. 重新编译后端
```bash
cd peidu/backend
mvn clean compile
```
### 3. 重启后端服务
```bash
# 停止现有服务
# 启动新服务
```
## 🧪 测试用例
### 测试用例1: 开始学习课程
**测试步骤:**
1. 登录家长端账号
2. 进入"我的课程"页面
3. 点击任意已购买的课程
4. 验证是否跳转到课程学习页面
5. 验证视频是否正常播放
**预期结果:**
- ✅ 成功跳转到学习页面
- ✅ 视频从头开始播放(首次学习)
- ✅ 学习进度显示为0%
- ✅ 后端创建学习记录
**验证SQL:**
```sql
SELECT * FROM course_learning_record
WHERE user_id = 1 AND course_id = 1
ORDER BY create_time DESC LIMIT 1;
```
---
### 测试用例2: 学习进度自动保存
**测试步骤:**
1. 在课程学习页面播放视频
2. 播放30秒后
3. 查看控制台日志
4. 查看数据库记录
**预期结果:**
- ✅ 控制台显示"学习进度已保存"
- ✅ 数据库中 `last_position` 字段更新
-`learning_progress` 字段更新
-`learning_duration` 字段更新
**验证SQL:**
```sql
SELECT
id,
user_id,
course_id,
last_position,
learning_progress,
learning_duration,
update_time
FROM course_learning_record
WHERE user_id = 1 AND course_id = 1;
```
---
### 测试用例3: 断点续播
**测试步骤:**
1. 播放视频到50%位置
2. 等待30秒(自动保存)
3. 退出学习页面
4. 重新进入该课程
5. 验证播放位置
**预期结果:**
- ✅ 视频从上次位置继续播放
- ✅ 进度条显示正确的百分比
- ✅ 学习记录ID保持不变
**验证SQL:**
```sql
SELECT
id,
last_position,
learning_progress,
create_time,
update_time
FROM course_learning_record
WHERE user_id = 1 AND course_id = 1;
```
---
### 测试用例4: 完成课程学习
**测试步骤:**
1. 播放视频至90%以上
2. 填写学习笔记(>20字)
3. 点击"完成学习"按钮
4. 查看积分奖励提示
**预期结果:**
- ✅ 显示积分奖励弹窗
- ✅ 普通课程: 60积分(50基础+10笔记)
- ✅ 必修课程: 210积分(50基础+10笔记+150必修)
- ✅ 学习记录标记为已完成
- ✅ 用户积分余额增加
**验证SQL:**
```sql
-- 1. 检查学习记录
SELECT
id,
is_completed,
completed_time,
points_awarded,
notes
FROM course_learning_record
WHERE user_id = 1 AND course_id = 1;
-- 2. 检查用户积分
SELECT
balance,
total_earned
FROM user_points
WHERE user_id = 1;
-- 3. 检查积分记录
SELECT
type,
points,
balance,
source,
description,
create_time
FROM points_record
WHERE user_id = 1
ORDER BY create_time DESC LIMIT 1;
```
---
### 测试用例5: 我的课程列表显示
**测试步骤:**
1. 返回"我的课程"页面
2. 查看课程卡片显示
**预期结果:**
- ✅ 显示学习进度条
- ✅ 显示学习进度百分比
- ✅ 已完成的课程显示"已完成"标记
- ✅ 显示已获得的积分数
---
### 测试用例6: 重复完成不重复奖励
**测试步骤:**
1. 对已完成的课程再次点击"完成学习"
2. 查看积分变化
**预期结果:**
- ✅ 提示"课程已完成"
- ✅ 不再发放积分
-`points_awarded` 字段不变
**验证SQL:**
```sql
SELECT
id,
is_completed,
points_awarded,
completed_time
FROM course_learning_record
WHERE user_id = 1 AND course_id = 1;
```
---
### 测试用例7: 必修课程额外奖励
**测试步骤:**
1. 完成一门必修课程(is_required=1)
2. 查看积分奖励
**预期结果:**
- ✅ 基础奖励: 50积分
- ✅ 笔记奖励: 10积分(如有)
- ✅ 必修奖励: 150积分
- ✅ 总计: 210积分(有笔记)或200积分(无笔记)
**验证SQL:**
```sql
-- 检查课程是否为必修
SELECT id, title, is_required FROM parent_academy_course WHERE id = ?;
-- 检查积分奖励
SELECT points_awarded FROM course_learning_record
WHERE user_id = 1 AND course_id = ?;
```
---
## 🔍 调试技巧
### 1. 查看学习记录详情
```sql
SELECT
clr.*,
pac.title AS course_title,
pac.is_required,
u.username
FROM course_learning_record clr
LEFT JOIN parent_academy_course pac ON clr.course_id = pac.id
LEFT JOIN user u ON clr.user_id = u.id
WHERE clr.deleted = 0
ORDER BY clr.update_time DESC;
```
### 2. 查看用户积分变化
```sql
SELECT
pr.*,
up.balance AS current_balance
FROM points_record pr
LEFT JOIN user_points up ON pr.user_id = up.user_id
WHERE pr.user_id = 1
ORDER BY pr.create_time DESC
LIMIT 10;
```
### 3. 统计课程完成情况
```sql
SELECT
pac.title,
COUNT(*) AS total_learners,
SUM(CASE WHEN clr.is_completed = 1 THEN 1 ELSE 0 END) AS completed_count,
ROUND(AVG(clr.learning_progress), 2) AS avg_progress
FROM course_learning_record clr
LEFT JOIN parent_academy_course pac ON clr.course_id = pac.id
WHERE clr.deleted = 0
GROUP BY pac.id, pac.title;
```
## ⚠️ 常见问题
### 问题1: 学习进度不保存
**原因:** 定时器未启动或网络请求失败
**解决:** 检查控制台日志,确认定时器正常运行
### 问题2: 积分未发放
**原因:**
- 课程已完成,不重复奖励
- 学习进度<90%
- 后端服务异常
**解决:**
```sql
-- 检查学习记录状态
SELECT is_completed, learning_progress, points_awarded
FROM course_learning_record
WHERE id = ?;
```
### 问题3: 断点续播不生效
**原因:** `last_position` 未保存或video组件未正确设置
**解决:**
- 确认 `initial-time` 属性正确绑定
- 检查数据库中的 `last_position`
## ✅ 测试通过标准
- [ ] 所有7个测试用例通过
- [ ] 学习进度正确保存和显示
- [ ] 断点续播功能正常
- [ ] 积分奖励正确发放
- [ ] 不重复奖励积分
- [ ] 必修课程额外奖励正确
- [ ] 我的课程列表正确显示学习状态