kindergarten_java/docs/test-logs/admin/2026-03-21-full-test.md
En b361b1885b fix: 教师端首页今日课程 courseName 和 className 关联查询
问题:
- 今日课程功能只查询了 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>
2026-03-21 18:43:47 +08:00

217 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 全面测试记录 - 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