kindergarten_java/docs/test-logs/admin/2026-03-21-full-test.md

217 lines
4.8 KiB
Markdown
Raw Permalink Normal View History

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