docs: 更新今日开发日志和测试记录
- 新增第4节:代码合规性审查与重构(P0/P1/P2修复) - 新增第5节:Playwright自动化测试 - 新增自动化测试记录文档 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
c0b465dcea
commit
56e839f99a
@ -255,3 +255,138 @@ return Result.success(PageResult.of(page));
|
||||
- `test_three_ends.py` - 三端全链路测试
|
||||
- `/docs/test-logs/package/2026-03-13-full-flow.md` - 详细测试记录
|
||||
|
||||
---
|
||||
|
||||
### 4. 代码合规性审查与重构
|
||||
|
||||
#### 审查范围
|
||||
严格按照 `.claude/CLAUDE.md` 开发规范进行全项目代码审查
|
||||
|
||||
#### 发现的问题
|
||||
|
||||
**P0 - 三层架构违规(4项)**
|
||||
- `SchoolStatsController` - 直接注入 `TeacherMapper`, `StudentMapper`, `ClazzMapper`
|
||||
- `TeacherStatsController` - 直接注入 `ClazzMapper`, `StudentMapper`, `CourseMapper`, `LessonMapper`
|
||||
- `TeacherCourseController` - 直接注入 `ClazzMapper`
|
||||
- `AdminCourseController` - 直接注入 `CourseMapper` 用于更新 isSystem 标志
|
||||
|
||||
**P1 - API 路径不一致(8项)**
|
||||
- `AdminCourseController`: `/api/admin/courses` → 应为 `/api/v1/admin/courses`
|
||||
- `AdminTenantController`: `/api/admin/tenants` → 应为 `/api/v1/admin/tenants`
|
||||
- 前端 `vite.config.ts`: 代理重写规则导致路径混乱
|
||||
- 前端 `src/api/index.ts`: baseURL 设置与实际不一致
|
||||
- 前端 API 文件: `/admin/*` 路径缺少 `/v1` 前缀
|
||||
|
||||
**P2 - 文档与代码不一致(5项)**
|
||||
- `.claude/CLAUDE.md` 前端 API 调用示例与实际代码不符
|
||||
- 缺少 API 路径规范说明
|
||||
- 前端目录结构描述不准确
|
||||
|
||||
#### 修复过程
|
||||
|
||||
**1. 三层架构重构**
|
||||
|
||||
新增 Service 层:
|
||||
- `SchoolStatsService` + `SchoolStatsServiceImpl` - 学校端统计服务
|
||||
- `TeacherStatsService` + `TeacherStatsServiceImpl` - 教师端统计服务
|
||||
|
||||
扩展现有 Service:
|
||||
- `ClassService.getActiveClassesByTenantId()` - 获取活跃班级
|
||||
- `CourseService.createSystemCourse()` - 创建系统课程专用方法
|
||||
|
||||
更新 Controller:
|
||||
- 移除所有直接 Mapper 注入
|
||||
- 改为调用 Service 层方法
|
||||
- 验证编译通过
|
||||
|
||||
**2. API 路径统一**
|
||||
|
||||
后端路径修复:
|
||||
```java
|
||||
// AdminCourseController
|
||||
@RequestMapping("/api/v1/admin/courses") // 原路径: /api/admin/courses
|
||||
|
||||
// AdminTenantController
|
||||
@RequestMapping("/api/v1/admin/tenants") // 原路径: /api/admin/tenants
|
||||
```
|
||||
|
||||
前端配置修复:
|
||||
```typescript
|
||||
// vite.config.ts - 移除重写规则
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:8080',
|
||||
changeOrigin: true,
|
||||
}
|
||||
}
|
||||
|
||||
// src/api/index.ts - 修改 baseURL
|
||||
baseURL: '/api' // 原值: '/api/v1'
|
||||
```
|
||||
|
||||
前端 API 路径更新:
|
||||
- `admin.ts`: `/admin/tenants` → `/v1/admin/tenants`
|
||||
- `admin.ts`: `/admin/stats` → `/v1/admin/stats`
|
||||
- `lesson.ts`: `/admin/courses` → `/v1/admin/courses`
|
||||
- `package.ts`: `/admin/packages` → `/v1/admin/packages`
|
||||
- `theme.ts`: `/admin/themes` → `/v1/admin/themes`
|
||||
|
||||
**3. 文档规范更新**
|
||||
|
||||
更新 `.claude/CLAUDE.md`:
|
||||
- 前端目录结构: `client.ts` → `index.ts`
|
||||
- 新增三种 API 调用方式说明
|
||||
- 新增 API 路径规范表格
|
||||
- 更新 Controller 路径约定说明
|
||||
|
||||
#### Git 提交记录
|
||||
- `066b1f2` - refactor: 代码合规性审查修复 - 三层架构、API路径、文档规范
|
||||
- `c0b465d` - docs: 更新CHANGELOG - 记录代码合规性审查修复
|
||||
|
||||
#### 变更统计
|
||||
- 修改文件: 16 个
|
||||
- 新增文件: 4 个 Service 类
|
||||
- 代码变更: +592 行,-305 行
|
||||
|
||||
---
|
||||
|
||||
### 5. Playwright 自动化测试
|
||||
|
||||
#### 测试目标
|
||||
使用 Playwright 进行浏览器自动化,测试超管端课程包创建流程
|
||||
|
||||
#### 测试脚本
|
||||
- `test_create_course_simple.py` - 简化版自动化脚本
|
||||
|
||||
#### 测试结果
|
||||
| 步骤 | 状态 |
|
||||
|------|------|
|
||||
| 浏览器启动 | ✅ |
|
||||
| 登录页访问 | ✅ |
|
||||
| 超管登录 | ✅ |
|
||||
| 导航到创建页面 | ✅ |
|
||||
| 表单字段填写 | ✅ |
|
||||
| 提交按钮定位 | ⚠️ 需手动确认 |
|
||||
|
||||
#### 生成的截图
|
||||
```
|
||||
screenshots/
|
||||
├── create_page.png - 创建页面
|
||||
├── form_filled.png - 表单填写完成
|
||||
└── before_submit.png - 提交前状态
|
||||
```
|
||||
|
||||
#### 填写的表单内容
|
||||
- 课程名称: 春日主题活动_{timestamp}
|
||||
- 课程编码: SPRING{timestamp}
|
||||
- 课程描述: 以春天为主题的活动介绍
|
||||
- 课程目标: 认知、技能、情感三维目标
|
||||
- 核心内容: 春天的花草、气候、动物、习俗
|
||||
- 课程亮点: 活动丰富、贴近生活、注重体验
|
||||
- 环境创设: 主题墙、自然角、美工区布置
|
||||
|
||||
#### 备注
|
||||
- 使用 Playwright 1.58.0
|
||||
- Chromium for Testing 浏览器
|
||||
- headless=False 模式便于观察执行过程
|
||||
|
||||
|
||||
173
docs/test-logs/automation/2026-03-13-playwright.md
Normal file
173
docs/test-logs/automation/2026-03-13-playwright.md
Normal file
@ -0,0 +1,173 @@
|
||||
# Playwright 自动化测试记录
|
||||
|
||||
**测试日期**: 2026-03-13
|
||||
**测试类型**: 浏览器自动化测试
|
||||
**测试工具**: Playwright 1.58.0
|
||||
**测试结果**: ⚠️ 部分完成
|
||||
|
||||
---
|
||||
|
||||
## 测试概述
|
||||
|
||||
使用 Playwright 自动化浏览器,完成超管端课程包创建流程的自动化测试,包括登录、导航、表单填写等步骤。
|
||||
|
||||
---
|
||||
|
||||
## 测试目标
|
||||
|
||||
自动化验证超管端课程包创建流程:
|
||||
1. 超管登录
|
||||
2. 导航到课程管理页面
|
||||
3. 点击创建课程包
|
||||
4. 填写课程包表单
|
||||
5. 提交表单
|
||||
|
||||
---
|
||||
|
||||
## 测试结果汇总
|
||||
|
||||
| 测试项 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| 启动浏览器 | ✅ 通过 | Chromium for Testing |
|
||||
| 访问登录页 | ✅ 通过 | 页面加载正常 |
|
||||
| 选择超管角色 | ✅ 通过 | 角色选项卡选择成功 |
|
||||
| 填写登录信息 | ✅ 通过 | 账号密码填写正确 |
|
||||
| 点击登录按钮 | ✅ 通过 | 登录成功 |
|
||||
| 导航到创建页面 | ✅ 通过 | URL: /admin/courses/create |
|
||||
| 填写课程名称 | ✅ 通过 | 自动生成唯一名称 |
|
||||
| 填写课程编码 | ✅ 通过 | 自动生成唯一编码 |
|
||||
| 填写文本域 | ✅ 通过 | 描述、目标、内容等 |
|
||||
| 选择下拉选项 | ✅ 通过 | 课程分类选择成功 |
|
||||
| 滚动到底部 | ✅ 通过 | 定位提交按钮区域 |
|
||||
| 点击提交按钮 | ❌ 未完成 | 按钮选择器问题 |
|
||||
|
||||
---
|
||||
|
||||
## 测试脚本
|
||||
|
||||
### 脚本文件
|
||||
- `test_create_course_simple.py` - 简化版自动化脚本
|
||||
|
||||
### 关键代码片段
|
||||
|
||||
**登录流程**:
|
||||
```python
|
||||
page.goto(f"{BASE_URL}/login")
|
||||
page.locator('.tab-item').nth(0).click()
|
||||
page.fill('input[placeholder*="账号"]', 'admin')
|
||||
page.fill('input[placeholder*="密码"]', '123456')
|
||||
page.locator('button.ant-btn-primary, button[type="submit"]').first.click()
|
||||
```
|
||||
|
||||
**表单填写**:
|
||||
```python
|
||||
# 获取所有输入框和文本域
|
||||
inputs = page.locator('input:not([type="hidden"]):not([readonly])').all()
|
||||
textareas = page.locator('textarea:not([readonly])').all()
|
||||
|
||||
# 填写课程名称
|
||||
inputs[0].fill(f'春日主题活动_{timestamp}')
|
||||
|
||||
# 填写文本域
|
||||
for i, ta in enumerate(textareas[:5]):
|
||||
# 根据 placeholder 判断填写内容
|
||||
# ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 截图记录
|
||||
|
||||
| 截图 | 说明 |
|
||||
|------|------|
|
||||
| `create_page.png` | 创建课程包页面 |
|
||||
| `form_filled.png` | 表单填写完成状态 |
|
||||
| `before_submit.png` | 提交前页面状态 |
|
||||
|
||||
---
|
||||
|
||||
## 遇到的问题
|
||||
|
||||
### 1. 登录按钮选择器问题
|
||||
**问题**: `button:has-text("登录")` 选择器超时
|
||||
**原因**: 页面上有多个包含"登录"文字的元素
|
||||
**解决**: 使用 `button.ant-btn-primary, button[type="submit"]` 组合选择器
|
||||
|
||||
### 2. 角色选项卡选择器问题
|
||||
**问题**: `text=超管` 解析到多个元素
|
||||
**原因**: 页面上有多处"超管"文字(选项卡、测试按钮等)
|
||||
**解决**: 使用 `.tab-item` 类选择器配合 nth(0)
|
||||
|
||||
### 3. 提交按钮定位问题
|
||||
**问题**: 未能成功点击提交按钮
|
||||
**原因**: 按钮文字可能是动态渲染或选择器不准确
|
||||
**状态**: 待解决
|
||||
|
||||
---
|
||||
|
||||
## 填写的表单内容
|
||||
|
||||
### 基本信息
|
||||
- **课程名称**: 春日主题活动_{timestamp}
|
||||
- **课程编码**: SPRING{timestamp}
|
||||
- **课程描述**: 以春天为主题,引导幼儿感受春天的美好
|
||||
|
||||
### 课程目标
|
||||
- **认知目标**: 认识春天常见的花草树木
|
||||
- **技能目标**: 能用语言描述春天的变化
|
||||
- **情感目标**: 感受春天的美好
|
||||
|
||||
### 核心内容
|
||||
- 春天的花草树木
|
||||
- 春天的气候特征
|
||||
- 春天的动物朋友
|
||||
- 春天的节日习俗
|
||||
|
||||
### 课程亮点
|
||||
- 活动丰富,形式多样
|
||||
- 贴近生活,取材方便
|
||||
- 注重体验,寓教于乐
|
||||
|
||||
### 环境创设
|
||||
- 春天主题墙布置
|
||||
- 自然角摆放发芽的种子
|
||||
- 美工区准备绘画材料
|
||||
|
||||
---
|
||||
|
||||
## 后续改进建议
|
||||
|
||||
1. **优化选择器**:使用更稳定的选择器(data-testid、aria-label 等)
|
||||
2. **添加等待策略**:针对动态加载的元素增加显式等待
|
||||
3. **完善断言**:添加更多的验证点确保每步成功
|
||||
4. **参数化测试数据**:将测试数据提取到配置文件
|
||||
5. **添加错误处理**:增加失败重试和错误日志
|
||||
|
||||
---
|
||||
|
||||
## 运行命令
|
||||
|
||||
```bash
|
||||
# 进入项目目录
|
||||
cd /Users/retirado/Program/ccProgram_0312
|
||||
|
||||
# 运行自动化测试
|
||||
python3 test_create_course_simple.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 测试环境
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 操作系统 | macOS (Darwin 24.6.0) |
|
||||
| Python 版本 | 3.9 |
|
||||
| Playwright 版本 | 1.58.0 |
|
||||
| 浏览器 | Chromium for Testing |
|
||||
| 前端地址 | http://localhost:5173 |
|
||||
| 后端地址 | http://localhost:8080 |
|
||||
|
||||
---
|
||||
|
||||
**测试结论**: 自动化测试完成了大部分流程,表单填写功能正常,提交按钮定位需要进一步优化。
|
||||
Loading…
Reference in New Issue
Block a user