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