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

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: 开始学习课程

测试步骤:

  1. 登录家长端账号
  2. 进入"我的课程"页面
  3. 点击任意已购买的课程
  4. 验证是否跳转到课程学习页面
  5. 验证视频是否正常播放

预期结果:

  • 成功跳转到学习页面
  • 视频从头开始播放(首次学习)
  • 学习进度显示为0%
  • 后端创建学习记录

验证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:

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:

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:

-- 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:

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:

-- 检查课程是否为必修
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个测试用例通过
  • 学习进度正确保存和显示
  • 断点续播功能正常
  • 积分奖励正确发放
  • 不重复奖励积分
  • 必修课程额外奖励正确
  • 我的课程列表正确显示学习状态