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