问题: - 今日课程功能只查询了 lesson 表,没有 JOIN 关联表 - TeacherLessonVO 的 courseName 和 className 字段为 null - 前端无法显示课程名称和班级名称 修复: - LessonMapper 新增 selectTodayLessonsWithDetails() 方法 - 通过 LEFT JOIN course_package 和 clazz 表获取名称 - TeacherStatsServiceImpl 重写 getTodayLessons() 方法 - 添加类型转换辅助方法 (getLong/getString/getLocalDate/getLocalTime/getLocalDateTime) 影响范围: - 教师端首页 - 今日课程模块 - API: GET /api/v1/teacher/today-lessons - API: GET /api/v1/teacher/dashboard Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
217 lines
4.8 KiB
Markdown
217 lines
4.8 KiB
Markdown
# 全面测试记录 - 2026-03-21
|
||
|
||
## 测试环境
|
||
|
||
| 服务 | 端口 | 状态 |
|
||
|------|------|------|
|
||
| 后端 API | 8481 | ✅ 正常运行 |
|
||
| 前端 Dev Server | 5174 | ✅ 正常运行 |
|
||
| 数据库 MySQL | 3306 | ✅ 正常连接 |
|
||
| Redis | 6379 | ✅ 正常连接 |
|
||
|
||
## 测试范围
|
||
|
||
本次提交包含以下新功能:
|
||
1. 教师端数据看板功能
|
||
2. 学校端课程使用统计功能
|
||
3. 个人中心功能(修改资料、修改密码)
|
||
4. 前后端 API 类型对齐
|
||
|
||
---
|
||
|
||
## 测试结果
|
||
|
||
### 1. 超管端 Dashboard 功能 ✅
|
||
|
||
**测试接口**: `GET /api/v1/admin/stats`
|
||
|
||
**测试账号**: admin / 123456
|
||
|
||
**测试结果**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "操作成功",
|
||
"data": {
|
||
"totalTenants": "4",
|
||
"activeTenants": "4",
|
||
"totalTeachers": "12",
|
||
"totalStudents": "42",
|
||
"totalCourses": "26",
|
||
"totalLessons": "29",
|
||
"monthlyLessons": "4"
|
||
}
|
||
}
|
||
```
|
||
|
||
**结论**: ✅ 接口正常,数据返回正确
|
||
|
||
---
|
||
|
||
### 2. 教师端数据看板功能 ✅
|
||
|
||
**测试接口**: `GET /api/v1/teacher/dashboard`
|
||
|
||
**测试账号**: teacher1 / 123456
|
||
|
||
**测试结果**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "操作成功",
|
||
"data": {
|
||
"stats": {
|
||
"classCount": "8",
|
||
"studentCount": "40",
|
||
"courseCount": "0",
|
||
"lessonCount": "31"
|
||
},
|
||
"todayLessons": [],
|
||
"recommendedCourses": [],
|
||
"weeklyStats": {
|
||
"lessonCount": "31",
|
||
"studentParticipation": 85,
|
||
"avgRating": 4.5,
|
||
"totalDuration": 300
|
||
},
|
||
"recentActivities": []
|
||
}
|
||
}
|
||
```
|
||
|
||
**测试接口**: `GET /api/v1/teacher/course-usage-stats?periodType=MONTH`
|
||
|
||
**测试结果**:
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"message": "操作成功",
|
||
"data": [
|
||
{
|
||
"coursePackageId": "17",
|
||
"coursePackageName": "课程简介课程简介课程简介课程简介课程简介课程简介课程简介",
|
||
"usageCount": 15,
|
||
"studentCount": 5,
|
||
"avgDuration": 0,
|
||
"lastUsedAt": "2026-03-16T00:00:00"
|
||
},
|
||
{
|
||
"coursePackageId": "16",
|
||
"coursePackageName": "T 色他",
|
||
"usageCount": 1,
|
||
"studentCount": 0,
|
||
"avgDuration": 0,
|
||
"lastUsedAt": "2026-03-16T00:00:00"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**结论**: ✅ 接口正常,数据返回正确
|
||
|
||
---
|
||
|
||
### 3. 学校端课程统计功能 ⚠️
|
||
|
||
**测试接口**: `GET /api/v1/school/stats/courses`
|
||
|
||
**测试账号**: school1 / 123456
|
||
|
||
**测试结果**: Token 验证失败
|
||
|
||
**问题**: Token 验证失败,无法完成测试
|
||
|
||
**原因分析**:
|
||
- JWT Token 签名验证失败
|
||
- 可能是后端重启导致密钥不一致
|
||
- 或者 Redis 中存储的 token 与验证时使用的密钥不匹配
|
||
|
||
**解决方案**: 需要修复 JWT Token 验证问题
|
||
|
||
---
|
||
|
||
### 4. 个人中心功能 ⚠️
|
||
|
||
**测试接口**:
|
||
- `GET /api/v1/auth/profile` - 获取个人信息
|
||
- `PUT /api/v1/auth/profile` - 修改个人信息
|
||
- `POST /api/v1/auth/change-password` - 修改密码
|
||
|
||
**测试结果**: Token 验证失败,无法完成测试
|
||
|
||
**问题**: 与学校端相同,Token 验证失败
|
||
|
||
---
|
||
|
||
### 5. E2E 自动化测试 ⚠️
|
||
|
||
**测试命令**: `npm run test:e2e`
|
||
|
||
**测试结果**:
|
||
- 登录测试:部分通过
|
||
- Dashboard 测试:部分失败(超时、选择器匹配问题)
|
||
- 课程包管理测试:失败(页面跳转后浏览器被关闭)
|
||
|
||
**失败原因**:
|
||
1. 测试超时(30 秒)
|
||
2. 正则表达式匹配多个元素
|
||
3. 浏览器实例不稳定
|
||
|
||
---
|
||
|
||
## 问题总结
|
||
|
||
### 高优先级
|
||
|
||
1. **JWT Token 验证失败**
|
||
- 影响范围:所有需要认证的接口
|
||
- 现象:登录后立即使用 token 访问接口返回 401
|
||
- 日志错误:`JWT signature does not match locally computed signature`
|
||
- 可能原因:
|
||
- JwtTokenProvider 的 secret 密钥初始化有问题
|
||
- @PostConstruct 没有正确执行
|
||
- 密钥字符串长度不满足 HS384 算法要求
|
||
|
||
**修复建议**:
|
||
- 检查 JwtTokenProvider 是否正确初始化
|
||
- 尝试使用 HS256 算法
|
||
- 确保 secret 密钥至少 256 位
|
||
|
||
### 中优先级
|
||
|
||
2. **E2E 测试不稳定**
|
||
- 增加测试超时时间
|
||
- 修复正则表达式选择器
|
||
- 添加更稳定的等待条件
|
||
|
||
---
|
||
|
||
## 已验证功能
|
||
|
||
| 功能模块 | 接口 | 状态 |
|
||
|---------|------|------|
|
||
| 超管统计 | GET /api/v1/admin/stats | ✅ 通过 |
|
||
| 教师 Dashboard | GET /api/v1/teacher/dashboard | ✅ 通过 |
|
||
| 教师课程使用统计 | GET /api/v1/teacher/course-usage-stats | ✅ 通过 |
|
||
| 学校课程统计 | GET /api/v1/school/stats/courses | ⚠️ Token 问题 |
|
||
| 个人信息获取 | GET /api/v1/auth/profile | ⚠️ Token 问题 |
|
||
| 个人信息修改 | PUT /api/v1/auth/profile | ⚠️ Token 问题 |
|
||
| 修改密码 | POST /api/v1/auth/change-password | ⚠️ Token 问题 |
|
||
|
||
---
|
||
|
||
## 后续工作
|
||
|
||
1. 修复 JWT Token 验证问题
|
||
2. 完成学校端和个人中心功能测试
|
||
3. 修复 E2E 测试用例
|
||
4. 更新测试文档
|
||
|
||
---
|
||
|
||
## 测试人员
|
||
Claude Code
|
||
|
||
## 测试时间
|
||
2026-03-21
|