Files
martial-admin-mini/doc/API接口测试指南.md
宅房 1ba89d73a1 docs: 添加API接口测试指南
📝 新增测试文档:
- 完整的API接口测试步骤说明
- 前置条件检查清单
- 常见问题排查指南
- 测试检查清单
- 测试报告模板

测试范围:
- 登录功能
- 选手列表(普通评委 & 裁判长)
- 评分功能
- 评分详情查看
- 评分修改(裁判长)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 19:02:08 +08:00

506 lines
12 KiB
Markdown
Raw Permalink 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.
# API接口测试指南
**日期**: 2025-12-11
**状态**: ✅ 已切换到API模式准备测试
---
## 🔧 已完成的修复
### 1. 切换数据模式为 API ✅
**文件**: `config/env.config.js:17`
```javascript
dataMode: 'api', // 已从 'mock' 改为 'api'
```
### 2. 修复 GET 请求参数 ✅
所有 GET 请求现在使用 `params` 而不是 `data`
**修复的文件**:
- `api/athlete.js`: getMyAthletes, getAthletesForAdmin, getVenues, getProjects
- `api/score.js`: getDeductions
**修复前**:
```javascript
return request({
url: '/api/mini/athletes',
method: 'GET',
data: params // ❌ 错误GET请求不应使用data
})
```
**修复后**:
```javascript
return request({
url: '/api/mini/athletes',
method: 'GET',
params: params // ✅ 正确GET请求使用params作为查询参数
})
```
### 3. 优化 request.js 支持 params ✅
**文件**: `utils/request.js:43-68`
增加了对 `params` 参数的支持:
```javascript
function request(options = {}) {
const {
method = 'GET',
data = {},
params = {}, // 新增支持params参数
// ...
} = options
// 对于 GET 请求,使用 params 作为查询参数
const requestData = method === 'GET' ? params : data
uni.request({
data: requestData, // GET使用paramsPOST/PUT使用data
// ...
})
}
```
---
## 🚀 如何测试
### 前置条件
1. **后端服务已启动**
- 项目路径: `D:\workspace\31.比赛项目\project\martial-master`
- 运行地址: `http://localhost:8080`
- 验证方法: 浏览器访问 `http://localhost:8080/doc.html` 查看API文档
2. **数据库已准备**
- 需要有测试数据(比赛、评委、邀请码、选手等)
- 参考: `doc/API接口对接完成报告.md` 的数据库准备章节
3. **前端项目配置**
- config/env.config.js: `dataMode: 'api'`
- config/env.config.js: `apiBaseURL: 'http://localhost:8080'`
### 测试步骤
#### 步骤1: 启动后端服务
```bash
cd D:\workspace\31.比赛项目\project\martial-master
# 方式1: 使用IDEA
# 右键 Application.java -> Run
# 方式2: 使用命令行如果配置了Maven
mvn spring-boot:run
```
验证后端启动成功:
- 访问 `http://localhost:8080/doc.html`
- 应该看到 Swagger API 文档页面
#### 步骤2: 刷新小程序前端
```bash
cd D:\workspace\31.比赛项目\project\martial-admin-mini
# 如果使用 HBuilderX
# 1. 关闭当前运行的小程序
# 2. 重新点击"运行" -> "运行到小程序模拟器"
# 如果使用命令行
npm run dev:mp-weixin
```
**重要**: 修改配置后必须重启项目才能生效!
#### 步骤3: 打开浏览器控制台
访问 `http://localhost:8081/#/pages/score-list/score-list`
`F12` 打开浏览器开发者工具,查看 Console 面板。
你应该看到类似这样的调试信息:
```
[API请求] GET /api/mini/athletes {judgeId: "456", venueId: "1", projectId: "5"}
[API响应] GET /api/mini/athletes {code: 200, success: true, data: [...]}
```
#### 步骤4: 测试登录功能
1. 访问登录页: `http://localhost:8081/#/pages/login/login`
2. 输入测试数据:
- **比赛编码**: [从数据库 martial_competition 表获取 competition_code]
- **邀请码**: [从数据库 martial_judge_invite 表获取 invite_code]
3. 点击"登录"按钮
4. 查看控制台输出:
```
[API请求] POST /api/mini/login {matchCode: "...", inviteCode: "..."}
[API响应] POST /api/mini/login {code: 200, data: {token: "...", ...}}
```
5. 验证是否跳转到选手列表页
#### 步骤5: 测试选手列表(普通评委)
登录成功后,应该自动跳转到 `/pages/score-list/score-list`
**验证点**:
- ✅ 页面显示选手列表
- ✅ 控制台显示 `[API请求] GET /api/mini/athletes`
- ✅ 选手信息正确显示(姓名、身份证、队伍、编号)
- ✅ 已评分选手显示"我的评分"和"总分"
- ✅ 未评分选手显示"评分"按钮
**查看请求详情**:
```javascript
// 控制台应该显示:
[API请求] GET /api/mini/athletes {
judgeId: "456",
venueId: "1",
projectId: "5"
}
// 响应格式:
[API响应] GET /api/mini/athletes {
code: 200,
success: true,
data: [
{
athleteId: "1",
name: "张三",
idCard: "123456789000000000",
team: "少林寺武术大学院",
number: "123-4567898275",
scored: true,
myScore: 8.906,
totalScore: 8.907
}
]
}
```
#### 步骤6: 测试选手列表(裁判长)
如果登录的是裁判长账号,应该跳转到 `/pages/score-list-multi/score-list-multi`
**验证点**:
- ✅ 显示场地切换选项卡
- ✅ 显示项目切换按钮
- ✅ 控制台显示:
```
[API请求] GET /martial/venue/list
[API请求] GET /martial/project/list
[API请求] GET /api/mini/athletes/admin
```
- ✅ 选手列表显示总分和"修改"按钮
- ✅ 切换场地/项目时重新加载选手列表
#### 步骤7: 测试评分功能
1. 点击某个未评分选手的"评分"按钮
2. 应该跳转到 `/pages/score-detail/score-detail`
3. 验证页面加载扣分项:
```
[API请求] GET /martial/deductionItem/list {projectId: "5"}
```
4. 修改分数,选择扣分项,填写备注
5. 点击"提交"按钮
6. 验证提交请求:
```
[API请求] POST /martial/score/submit {
athleteId: "1",
judgeId: "456",
score: 8.906,
deductions: [...],
note: "备注"
}
```
7. 验证提交成功后返回选手列表
#### 步骤8: 测试评分详情(裁判长)
1. 裁判长登录后,在选手列表点击"修改"按钮
2. 应该跳转到 `/pages/modify-score/modify-score`
3. 验证加载评分详情:
```
[API请求] GET /api/mini/score/detail/1
[API响应] {
athleteInfo: {...},
judgeScores: [...],
modification: {...}
}
```
4. 验证显示:
- 选手基本信息
- 所有评委的评分列表
- 修改记录(如果有)
#### 步骤9: 测试修改评分(裁判长)
1. 在修改评分页面调整分数
2. 填写修改原因
3. 点击"修改"按钮
4. 验证修改请求:
```
[API请求] PUT /api/mini/score/modify {
athleteId: "1",
modifierId: "789",
modifiedScore: 8.910,
note: "修改原因"
}
```
5. 验证修改成功后返回选手列表
---
## 🐛 常见问题排查
### 问题1: 页面显示"网络错误"
**可能原因**:
1. 后端服务未启动
2. 后端端口不是 8080
3. CORS 跨域配置问题
**解决方法**:
```bash
# 1. 检查后端是否启动
curl http://localhost:8080/doc.html
# 2. 检查后端日志
# 查看 martial-master 控制台输出
# 3. 检查前端配置
# config/env.config.js 的 apiBaseURL 是否正确
```
### 问题2: 登录后显示"邀请码不存在"
**可能原因**:
1. 数据库中没有对应的邀请码
2. 邀请码已过期expire_time < NOW()
3. 邀请码已被删除is_deleted = 1
**解决方法**:
```sql
-- 查询邀请码
SELECT * FROM martial_judge_invite
WHERE invite_code = 'ABC123'
AND is_deleted = 0;
-- 如果不存在,插入测试邀请码
INSERT INTO martial_judge_invite (
competition_id, judge_id, invite_code, role, venue_id, projects,
expire_time, is_used, is_deleted, create_time, update_time
) VALUES (
1, 1, 'ABC123', 'judge', 1, '[1,2,3]',
DATE_ADD(NOW(), INTERVAL 7 DAY), 0, 0, NOW(), NOW()
);
```
### 问题3: 登录后显示"比赛编码不匹配"
**可能原因**:
1. 输入的比赛编码与数据库不一致
2. 比赛编码字段名错误
**解决方法**:
```sql
-- 查询比赛编码
SELECT id, competition_code, competition_name
FROM martial_competition
WHERE is_deleted = 0;
-- 注意:后端已修正为使用 competition_code 字段
```
### 问题4: 选手列表为空
**可能原因**:
1. 数据库中没有选手数据
2. 选手的 venue_id 或 project_id 不匹配
3. 选手被标记为删除is_deleted = 1
**解决方法**:
```sql
-- 查询选手
SELECT * FROM martial_athlete
WHERE project_id = 5
AND is_deleted = 0
ORDER BY player_no;
-- 如果为空,插入测试选手
INSERT INTO martial_athlete (
competition_id, project_id, player_name, player_no,
id_card, team_name, is_deleted, create_time, update_time
) VALUES (
1, 5, '测试选手', 'A001', '123456789000000000',
'测试队伍', 0, NOW(), NOW()
);
```
### 问题5: 控制台显示 404 错误
**可能原因**:
1. 后端接口路径不存在
2. 后端 Controller 未正确注册
3. 前端请求路径错误
**解决方法**:
```bash
# 1. 访问 Swagger 文档验证接口
http://localhost:8080/doc.html
# 2. 查找小程序专用接口
# 搜索: MartialMiniController
# 应该看到 5 个接口:
# POST /api/mini/login
# GET /api/mini/athletes
# GET /api/mini/athletes/admin
# GET /api/mini/score/detail/{athleteId}
# PUT /api/mini/score/modify
# 3. 手动测试接口
curl -X GET "http://localhost:8080/api/mini/athletes?judgeId=1&venueId=1&projectId=5" \
-H "Blade-Auth: Bearer YOUR_TOKEN"
```
### 问题6: Token 未正确传递
**可能原因**:
1. 登录成功但未保存 token 到 localStorage
2. request.js 未正确添加 Blade-Auth 头部
**解决方法**:
```javascript
// 1. 检查 token 是否保存
// 在浏览器控制台执行:
uni.getStorageSync('token')
// 2. 检查请求头
// 查看 Network 面板,选择某个请求
// Headers 中应该有:
// Blade-Auth: Bearer xxxxx
// 3. 手动保存 token 测试
uni.setStorageSync('token', 'test-token-123')
```
---
## 📊 测试检查清单
使用以下清单验证所有功能:
### 登录功能
- [ ] 输入正确的比赛编码和邀请码,能成功登录
- [ ] 登录成功后保存 token 到 localStorage
- [ ] 登录成功后跳转到对应页面(普通评委 → score-list裁判长 → score-list-multi
- [ ] 输入错误的邀请码,显示"邀请码不存在"
- [ ] 输入错误的比赛编码,显示"比赛编码不匹配"
### 选手列表(普通评委)
- [ ] 加载选手列表成功
- [ ] 显示选手基本信息(姓名、身份证、队伍、编号)
- [ ] 已评分选手显示"我的评分"和"总分"
- [ ] 未评分选手显示"评分"按钮
- [ ] 评分统计正确(已评分数/总数)
### 选手列表(裁判长)
- [ ] 显示场地切换选项卡
- [ ] 显示项目切换按钮
- [ ] 加载场地列表成功
- [ ] 加载项目列表成功
- [ ] 加载选手列表成功(含评分统计)
- [ ] 切换场地时重新加载选手
- [ ] 切换项目时重新加载选手
- [ ] 有总分的选手显示"修改"按钮
### 评分功能(普通评委)
- [ ] 点击"评分"按钮跳转到评分页面
- [ ] 加载扣分项列表成功
- [ ] 可以调整分数5.000-10.000
- [ ] 可以选择扣分项(多选)
- [ ] 可以填写备注
- [ ] 提交评分成功
- [ ] 提交后返回选手列表
- [ ] 选手状态更新为"已评分"
### 评分详情(裁判长)
- [ ] 点击"修改"按钮跳转到修改页面
- [ ] 显示选手基本信息
- [ ] 显示当前总分
- [ ] 显示所有评委的评分列表
- [ ] 显示修改记录(如果有)
### 修改评分(裁判长)
- [ ] 可以调整总分
- [ ] 可以填写修改原因
- [ ] 提交修改成功
- [ ] 提交后返回选手列表
- [ ] 选手总分已更新
- [ ] 修改记录已保存
---
## 📝 测试报告模板
测试完成后,请填写以下报告:
```
测试时间: ______
测试人员: ______
后端版本: ______
前端版本: commit 6d42c4a
### 登录测试
- 状态: ✅ 通过 / ❌ 失败
- 备注: ______
### 选手列表测试(普通评委)
- 状态: ✅ 通过 / ❌ 失败
- 备注: ______
### 选手列表测试(裁判长)
- 状态: ✅ 通过 / ❌ 失败
- 备注: ______
### 评分功能测试
- 状态: ✅ 通过 / ❌ 失败
- 备注: ______
### 评分详情测试
- 状态: ✅ 通过 / ❌ 失败
- 备注: ______
### 修改评分测试
- 状态: ✅ 通过 / ❌ 失败
- 备注: ______
### 发现的问题
1. ______
2. ______
3. ______
### 改进建议
1. ______
2. ______
3. ______
```
---
## 🎯 下一步计划
测试通过后:
1. ✅ 合并 feature/api-integration 分支到 main
2. ✅ 部署到测试环境
3. ✅ 进行真实数据测试
4. ✅ 收集用户反馈
5. ✅ 优化性能和体验
---
**文档版本**: v1.0
**最后更新**: 2025-12-11
**维护者**: Claude Code Assistant