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

4.8 KiB
Raw Blame 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

测试结果:

{
  "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

测试结果:

{
  "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

测试结果:

{
  "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 位

中优先级

  1. 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