294 lines
5.8 KiB
Markdown
294 lines
5.8 KiB
Markdown
|
|
# 测试指南 - 我的课程与学习记录关联
|
||
|
|
|
||
|
|
## 📋 测试前准备
|
||
|
|
|
||
|
|
### 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个测试用例通过
|
||
|
|
- [ ] 学习进度正确保存和显示
|
||
|
|
- [ ] 断点续播功能正常
|
||
|
|
- [ ] 积分奖励正确发放
|
||
|
|
- [ ] 不重复奖励积分
|
||
|
|
- [ ] 必修课程额外奖励正确
|
||
|
|
- [ ] 我的课程列表正确显示学习状态
|