598 lines
11 KiB
Markdown
598 lines
11 KiB
Markdown
|
|
# 🧪 学习记录功能完善 - 测试指南
|
|||
|
|
|
|||
|
|
## 📋 测试准备
|
|||
|
|
|
|||
|
|
### 1. 确认修改已完成
|
|||
|
|
- [ ] 前端代码已修改
|
|||
|
|
- [ ] 后端代码已修改
|
|||
|
|
- [ ] 前端已重新编译
|
|||
|
|
- [ ] 后端已重新编译
|
|||
|
|
- [ ] 服务已重启
|
|||
|
|
|
|||
|
|
### 2. 准备测试数据
|
|||
|
|
|
|||
|
|
确保数据库中有以下测试数据:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 检查是否有成长记录
|
|||
|
|
SELECT * FROM growth_record WHERE student_id = 1 LIMIT 5;
|
|||
|
|
|
|||
|
|
-- 检查是否有签到记录
|
|||
|
|
SELECT * FROM check_in_record WHERE order_id IN (
|
|||
|
|
SELECT order_id FROM growth_record WHERE student_id = 1
|
|||
|
|
) LIMIT 5;
|
|||
|
|
|
|||
|
|
-- 检查是否有评价记录
|
|||
|
|
SELECT * FROM review WHERE order_id IN (
|
|||
|
|
SELECT order_id FROM growth_record WHERE student_id = 1
|
|||
|
|
) LIMIT 5;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果没有数据,执行:
|
|||
|
|
```sql
|
|||
|
|
-- 使用之前创建的测试数据脚本
|
|||
|
|
-- peidu/sql/🚀插入成长记录测试数据-2026-01-23.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🧪 测试用例
|
|||
|
|
|
|||
|
|
### 测试1:用户中心入口
|
|||
|
|
|
|||
|
|
**目的**:验证入口跳转是否正确
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 打开微信开发者工具
|
|||
|
|
2. 登录家长端账号
|
|||
|
|
3. 进入"我的"页面
|
|||
|
|
4. 找到"成长记录"菜单项
|
|||
|
|
5. 点击"成长记录"
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 菜单项显示为"成长记录"(不是"学习记录")
|
|||
|
|
- ✅ 点击后跳转到成长记录列表页
|
|||
|
|
- ✅ 页面路径为 `/user-package/pages/growth/list`
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试2:统计数据显示
|
|||
|
|
|
|||
|
|
**目的**:验证统计卡片是否正确显示
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在成长记录列表页
|
|||
|
|
2. 查看顶部统计卡片
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 显示三个统计项:
|
|||
|
|
- 累计学习(小时)
|
|||
|
|
- 服务次数
|
|||
|
|
- 平均评分
|
|||
|
|
- ✅ 数据为数字格式
|
|||
|
|
- ✅ 样式美观(绿色渐变背景)
|
|||
|
|
|
|||
|
|
**验证数据准确性**:
|
|||
|
|
|
|||
|
|
打开浏览器控制台,执行:
|
|||
|
|
```javascript
|
|||
|
|
// 查看API返回的统计数据
|
|||
|
|
// 应该在Network标签中看到:
|
|||
|
|
// GET /api/growth-record/parent/stats?studentId=1
|
|||
|
|
// 返回:
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": {
|
|||
|
|
"totalHours": "12.5",
|
|||
|
|
"totalSessions": 8,
|
|||
|
|
"avgScore": "4.8"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
累计学习:_____ 小时
|
|||
|
|
服务次数:_____ 次
|
|||
|
|
平均评分:_____
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试3:记录列表显示
|
|||
|
|
|
|||
|
|
**目的**:验证记录列表是否正确显示
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在成长记录列表页
|
|||
|
|
2. 查看记录列表
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 显示成长记录列表
|
|||
|
|
- ✅ 每条记录包含:
|
|||
|
|
- 日期图标和日期
|
|||
|
|
- 记录类型标签(每日反馈/周反馈/月反馈)
|
|||
|
|
- 学生姓名
|
|||
|
|
- 陪伴员姓名
|
|||
|
|
- 服务时长(如:1小时30分钟)
|
|||
|
|
- 内容预览
|
|||
|
|
- 照片预览(如果有)
|
|||
|
|
- "查看详情"按钮
|
|||
|
|
|
|||
|
|
**验证数据准确性**:
|
|||
|
|
|
|||
|
|
打开浏览器控制台,执行:
|
|||
|
|
```javascript
|
|||
|
|
// 查看API返回的列表数据
|
|||
|
|
// 应该在Network标签中看到:
|
|||
|
|
// GET /api/growth-record/parent/list?studentId=1&page=1&size=10
|
|||
|
|
// 返回:
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": {
|
|||
|
|
"records": [
|
|||
|
|
{
|
|||
|
|
"id": 1,
|
|||
|
|
"recordDate": "2026-01-23",
|
|||
|
|
"recordType": "daily",
|
|||
|
|
"recordTypeName": "每日反馈",
|
|||
|
|
"studentName": "小明",
|
|||
|
|
"teacherName": "张老师",
|
|||
|
|
"durationText": "1小时30分钟",
|
|||
|
|
"content": "今天学习了...",
|
|||
|
|
"imageList": "url1,url2,url3"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"total": 8
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
记录数量:_____ 条
|
|||
|
|
|
|||
|
|
第一条记录:
|
|||
|
|
- 日期:_____
|
|||
|
|
- 类型:_____
|
|||
|
|
- 学生:_____
|
|||
|
|
- 陪伴员:_____
|
|||
|
|
- 时长:_____
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试4:筛选功能
|
|||
|
|
|
|||
|
|
**目的**:验证筛选标签是否正常工作
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在成长记录列表页
|
|||
|
|
2. 点击"全部"标签
|
|||
|
|
3. 点击"每日反馈"标签
|
|||
|
|
4. 点击"周反馈"标签
|
|||
|
|
5. 点击"月反馈"标签
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 点击不同标签,列表数据会相应变化
|
|||
|
|
- ✅ 当前选中的标签有高亮样式
|
|||
|
|
- ✅ 数据加载正常
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
全部:_____ 条
|
|||
|
|
每日反馈:_____ 条
|
|||
|
|
周反馈:_____ 条
|
|||
|
|
月反馈:_____ 条
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试5:详情页显示
|
|||
|
|
|
|||
|
|
**目的**:验证详情页是否正确显示
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在成长记录列表页
|
|||
|
|
2. 点击任意一条记录
|
|||
|
|
3. 查看详情页内容
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 页面正常打开
|
|||
|
|
- ✅ 显示完整信息:
|
|||
|
|
- 服务日期
|
|||
|
|
- 学生姓名
|
|||
|
|
- 陪伴员姓名
|
|||
|
|
- 服务时长
|
|||
|
|
- 学习内容
|
|||
|
|
- 照片记录(可点击预览)
|
|||
|
|
- 视频记录(可播放)
|
|||
|
|
- 学生表现
|
|||
|
|
- 陪伴员建议
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 页面正常打开
|
|||
|
|
□ 信息显示完整
|
|||
|
|
□ 照片可预览
|
|||
|
|
□ 视频可播放
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试6:服务时长计算
|
|||
|
|
|
|||
|
|
**目的**:验证服务时长是否计算准确
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在数据库中查询签到记录
|
|||
|
|
2. 手动计算服务时长
|
|||
|
|
3. 对比页面显示的时长
|
|||
|
|
|
|||
|
|
**SQL查询**:
|
|||
|
|
```sql
|
|||
|
|
-- 查询某个订单的签到记录
|
|||
|
|
SELECT
|
|||
|
|
order_id,
|
|||
|
|
check_type,
|
|||
|
|
check_time
|
|||
|
|
FROM check_in_record
|
|||
|
|
WHERE order_id = 267 -- 替换为实际的order_id
|
|||
|
|
ORDER BY check_time;
|
|||
|
|
|
|||
|
|
-- 应该看到:
|
|||
|
|
-- order_id | check_type | check_time
|
|||
|
|
-- 267 | checkin | 2026-01-23 14:00:00
|
|||
|
|
-- 267 | checkout | 2026-01-23 15:30:00
|
|||
|
|
--
|
|||
|
|
-- 计算:15:30 - 14:00 = 1小时30分钟
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 页面显示的时长与手动计算一致
|
|||
|
|
- ✅ 格式正确(如:1小时30分钟 或 90分钟)
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
数据库时长:_____
|
|||
|
|
页面显示:_____
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试7:评分显示
|
|||
|
|
|
|||
|
|
**目的**:验证评分是否正确显示
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在数据库中查询评价记录
|
|||
|
|
2. 对比统计卡片中的平均评分
|
|||
|
|
|
|||
|
|
**SQL查询**:
|
|||
|
|
```sql
|
|||
|
|
-- 查询学生的所有评价
|
|||
|
|
SELECT
|
|||
|
|
r.order_id,
|
|||
|
|
r.rating,
|
|||
|
|
gr.student_id
|
|||
|
|
FROM review r
|
|||
|
|
JOIN growth_record gr ON r.order_id = gr.order_id
|
|||
|
|
WHERE gr.student_id = 1;
|
|||
|
|
|
|||
|
|
-- 手动计算平均分
|
|||
|
|
-- 例如:(5 + 4 + 5 + 5 + 4 + 5 + 5 + 4) / 8 = 4.625 ≈ 4.6
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 平均评分计算正确
|
|||
|
|
- ✅ 保留一位小数
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
数据库评分:_____
|
|||
|
|
计算平均分:_____
|
|||
|
|
页面显示:_____
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试8:空状态显示
|
|||
|
|
|
|||
|
|
**目的**:验证没有数据时的显示
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 使用一个没有成长记录的学生账号登录
|
|||
|
|
2. 进入成长记录页面
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 显示空状态提示
|
|||
|
|
- ✅ 提示文字:
|
|||
|
|
- "暂无成长记录"
|
|||
|
|
- "陪伴员服务后会提交成长记录"
|
|||
|
|
- ✅ 有空状态图标(📚)
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 显示空状态
|
|||
|
|
□ 提示文字正确
|
|||
|
|
□ 图标显示正常
|
|||
|
|
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试9:下拉刷新
|
|||
|
|
|
|||
|
|
**目的**:验证下拉刷新功能
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在成长记录列表页
|
|||
|
|
2. 下拉页面
|
|||
|
|
3. 释放触发刷新
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 显示刷新动画
|
|||
|
|
- ✅ 数据重新加载
|
|||
|
|
- ✅ 刷新完成后动画消失
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试10:上拉加载更多
|
|||
|
|
|
|||
|
|
**目的**:验证分页加载功能
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 在成长记录列表页
|
|||
|
|
2. 滚动到底部
|
|||
|
|
3. 触发加载更多
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 显示"加载中..."提示
|
|||
|
|
- ✅ 加载下一页数据
|
|||
|
|
- ✅ 新数据追加到列表末尾
|
|||
|
|
- ✅ 没有更多数据时不再加载
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试11:照片预览
|
|||
|
|
|
|||
|
|
**目的**:验证照片预览功能
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 进入有照片的成长记录详情页
|
|||
|
|
2. 点击任意照片
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 打开照片预览
|
|||
|
|
- ✅ 可以左右滑动查看其他照片
|
|||
|
|
- ✅ 可以缩放照片
|
|||
|
|
- ✅ 可以关闭预览
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试12:视频播放
|
|||
|
|
|
|||
|
|
**目的**:验证视频播放功能
|
|||
|
|
|
|||
|
|
**步骤**:
|
|||
|
|
1. 进入有视频的成长记录详情页
|
|||
|
|
2. 点击播放按钮
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- ✅ 视频正常播放
|
|||
|
|
- ✅ 可以暂停/继续
|
|||
|
|
- ✅ 可以调整进度
|
|||
|
|
- ✅ 可以全屏播放
|
|||
|
|
|
|||
|
|
**实际结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 后端接口测试
|
|||
|
|
|
|||
|
|
### 接口1:获取统计数据
|
|||
|
|
|
|||
|
|
**接口**:`GET /api/growth-record/parent/stats`
|
|||
|
|
|
|||
|
|
**参数**:
|
|||
|
|
```
|
|||
|
|
studentId: 1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"message": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"totalHours": "12.5",
|
|||
|
|
"totalSessions": 8,
|
|||
|
|
"avgScore": "4.8"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**测试命令**:
|
|||
|
|
```bash
|
|||
|
|
curl -X GET "http://localhost:8080/api/growth-record/parent/stats?studentId=1" \
|
|||
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**实际响应**:
|
|||
|
|
```json
|
|||
|
|
// 粘贴实际响应
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 接口2:获取记录列表
|
|||
|
|
|
|||
|
|
**接口**:`GET /api/growth-record/parent/list`
|
|||
|
|
|
|||
|
|
**参数**:
|
|||
|
|
```
|
|||
|
|
studentId: 1
|
|||
|
|
page: 1
|
|||
|
|
size: 10
|
|||
|
|
recordType: all (可选)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期响应**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"message": "操作成功",
|
|||
|
|
"data": {
|
|||
|
|
"records": [
|
|||
|
|
{
|
|||
|
|
"id": 1,
|
|||
|
|
"recordDate": "2026-01-23",
|
|||
|
|
"recordType": "daily",
|
|||
|
|
"recordTypeName": "每日反馈",
|
|||
|
|
"studentName": "小明",
|
|||
|
|
"teacherName": "张老师",
|
|||
|
|
"durationText": "1小时30分钟",
|
|||
|
|
"content": "今天学习了数学和英语...",
|
|||
|
|
"imageList": "url1,url2,url3",
|
|||
|
|
"videoList": null
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"total": 8,
|
|||
|
|
"current": 1,
|
|||
|
|
"size": 10
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**测试命令**:
|
|||
|
|
```bash
|
|||
|
|
curl -X GET "http://localhost:8080/api/growth-record/parent/list?studentId=1&page=1&size=10" \
|
|||
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**实际响应**:
|
|||
|
|
```json
|
|||
|
|
// 粘贴实际响应
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**结果**:
|
|||
|
|
```
|
|||
|
|
□ 通过
|
|||
|
|
□ 失败,原因:_______________
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 测试结果汇总
|
|||
|
|
|
|||
|
|
### 前端测试
|
|||
|
|
- [ ] 测试1:用户中心入口
|
|||
|
|
- [ ] 测试2:统计数据显示
|
|||
|
|
- [ ] 测试3:记录列表显示
|
|||
|
|
- [ ] 测试4:筛选功能
|
|||
|
|
- [ ] 测试5:详情页显示
|
|||
|
|
- [ ] 测试6:服务时长计算
|
|||
|
|
- [ ] 测试7:评分显示
|
|||
|
|
- [ ] 测试8:空状态显示
|
|||
|
|
- [ ] 测试9:下拉刷新
|
|||
|
|
- [ ] 测试10:上拉加载更多
|
|||
|
|
- [ ] 测试11:照片预览
|
|||
|
|
- [ ] 测试12:视频播放
|
|||
|
|
|
|||
|
|
### 后端测试
|
|||
|
|
- [ ] 接口1:获取统计数据
|
|||
|
|
- [ ] 接口2:获取记录列表
|
|||
|
|
|
|||
|
|
### 总体评估
|
|||
|
|
```
|
|||
|
|
通过:_____ / 14
|
|||
|
|
失败:_____ / 14
|
|||
|
|
通过率:_____ %
|
|||
|
|
|
|||
|
|
□ 所有测试通过,可以上线
|
|||
|
|
□ 部分测试失败,需要修复
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🐛 问题记录
|
|||
|
|
|
|||
|
|
如果测试失败,请记录问题:
|
|||
|
|
|
|||
|
|
### 问题1
|
|||
|
|
```
|
|||
|
|
测试用例:_____
|
|||
|
|
问题描述:_____
|
|||
|
|
错误信息:_____
|
|||
|
|
重现步骤:_____
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 问题2
|
|||
|
|
```
|
|||
|
|
测试用例:_____
|
|||
|
|
问题描述:_____
|
|||
|
|
错误信息:_____
|
|||
|
|
重现步骤:_____
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## ✅ 测试完成确认
|
|||
|
|
|
|||
|
|
- [ ] 所有测试用例已执行
|
|||
|
|
- [ ] 测试结果已记录
|
|||
|
|
- [ ] 问题已记录(如有)
|
|||
|
|
- [ ] 测试报告已提交
|
|||
|
|
|
|||
|
|
**测试人员**:_______________
|
|||
|
|
**测试日期**:_______________
|
|||
|
|
**测试环境**:_______________
|