391 lines
6.8 KiB
Markdown
391 lines
6.8 KiB
Markdown
|
|
# 多身份功能 - API测试指南
|
|||
|
|
|
|||
|
|
> 测试时间:2026-02-28
|
|||
|
|
> 测试环境:开发环境
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 测试前准备
|
|||
|
|
|
|||
|
|
### 1. 获取测试Token
|
|||
|
|
|
|||
|
|
**登录接口:** `POST /api/auth/login`
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"phone": "13800138000",
|
|||
|
|
"password": "123456"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**返回示例:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": {
|
|||
|
|
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|||
|
|
"userInfo": {
|
|||
|
|
"id": 1,
|
|||
|
|
"phone": "13800138000",
|
|||
|
|
"role": "parent"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**保存Token:** 后续所有请求都需要在Header中添加:
|
|||
|
|
```
|
|||
|
|
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 API测试用例
|
|||
|
|
|
|||
|
|
### 测试1:获取用户所有身份
|
|||
|
|
|
|||
|
|
**接口:** `GET /api/user/roles/list`
|
|||
|
|
|
|||
|
|
**请求头:**
|
|||
|
|
```
|
|||
|
|
Authorization: {your_token}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期返回:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": {
|
|||
|
|
"allRoles": ["parent"],
|
|||
|
|
"primaryRole": "parent",
|
|||
|
|
"hasMultipleRoles": false
|
|||
|
|
},
|
|||
|
|
"message": "success"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证点:**
|
|||
|
|
- ✅ `allRoles` 包含用户的所有身份
|
|||
|
|
- ✅ `primaryRole` 是用户的主身份
|
|||
|
|
- ✅ `hasMultipleRoles` 正确反映是否有多个身份
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试2:申请新身份
|
|||
|
|
|
|||
|
|
**接口:** `POST /api/user/roles/apply`
|
|||
|
|
|
|||
|
|
**请求头:**
|
|||
|
|
```
|
|||
|
|
Authorization: {your_token}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数:**
|
|||
|
|
```
|
|||
|
|
roleType=teacher
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期返回:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": null,
|
|||
|
|
"message": "success"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证点:**
|
|||
|
|
- ✅ 返回成功
|
|||
|
|
- ✅ 再次调用测试1,`allRoles` 应包含 `["parent", "teacher"]`
|
|||
|
|
- ✅ `hasMultipleRoles` 应为 `true`
|
|||
|
|
|
|||
|
|
**错误情况测试:**
|
|||
|
|
|
|||
|
|
1. 重复申请同一身份:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 500,
|
|||
|
|
"message": "该身份已存在"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 无效的身份类型:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 500,
|
|||
|
|
"message": "无效的角色类型"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试3:切换主身份
|
|||
|
|
|
|||
|
|
**接口:** `POST /api/user/roles/switch`
|
|||
|
|
|
|||
|
|
**请求头:**
|
|||
|
|
```
|
|||
|
|
Authorization: {your_token}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数:**
|
|||
|
|
```
|
|||
|
|
roleType=teacher
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期返回:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": null,
|
|||
|
|
"message": "success"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证点:**
|
|||
|
|
- ✅ 返回成功
|
|||
|
|
- ✅ 再次调用测试1,`primaryRole` 应为 `"teacher"`
|
|||
|
|
- ✅ 查询 `user` 表,`user_type` 字段应更新为 `"teacher"`
|
|||
|
|
|
|||
|
|
**错误情况测试:**
|
|||
|
|
|
|||
|
|
1. 切换到不存在的身份:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 500,
|
|||
|
|
"message": "该身份不存在,请先申请该身份"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试4:检查是否拥有某个角色
|
|||
|
|
|
|||
|
|
**接口:** `GET /api/user/roles/has`
|
|||
|
|
|
|||
|
|
**请求头:**
|
|||
|
|
```
|
|||
|
|
Authorization: {your_token}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数:**
|
|||
|
|
```
|
|||
|
|
roleType=teacher
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期返回:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": true,
|
|||
|
|
"message": "success"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证点:**
|
|||
|
|
- ✅ 拥有该角色返回 `true`
|
|||
|
|
- ✅ 不拥有该角色返回 `false`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试5:删除角色
|
|||
|
|
|
|||
|
|
**接口:** `DELETE /api/user/roles/remove`
|
|||
|
|
|
|||
|
|
**请求头:**
|
|||
|
|
```
|
|||
|
|
Authorization: {your_token}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数:**
|
|||
|
|
```
|
|||
|
|
roleType=teacher
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期返回:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": null,
|
|||
|
|
"message": "success"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**验证点:**
|
|||
|
|
- ✅ 返回成功
|
|||
|
|
- ✅ 再次调用测试1,`allRoles` 不应包含 `"teacher"`
|
|||
|
|
|
|||
|
|
**错误情况测试:**
|
|||
|
|
|
|||
|
|
1. 删除主身份:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 500,
|
|||
|
|
"message": "不能删除主身份"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 删除不存在的身份:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 500,
|
|||
|
|
"message": "该身份不存在"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 数据库验证
|
|||
|
|
|
|||
|
|
### 验证1:检查 user_roles 表数据
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 查看用户的所有身份
|
|||
|
|
SELECT * FROM user_roles WHERE user_id = 1;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期结果:**
|
|||
|
|
```
|
|||
|
|
+----+---------+-----------+------------+--------+---------------------+---------------------+
|
|||
|
|
| id | user_id | role_type | is_primary | status | create_time | update_time |
|
|||
|
|
+----+---------+-----------+------------+--------+---------------------+---------------------+
|
|||
|
|
| 1 | 1 | parent | 1 | 1 | 2026-02-28 10:00:00 | 2026-02-28 10:00:00 |
|
|||
|
|
| 2 | 1 | teacher | 0 | 1 | 2026-02-28 10:05:00 | 2026-02-28 10:05:00 |
|
|||
|
|
+----+---------+-----------+------------+--------+---------------------+---------------------+
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 验证2:检查数据一致性
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 检查 user.user_type 是否与 user_roles 主身份一致
|
|||
|
|
SELECT
|
|||
|
|
u.id,
|
|||
|
|
u.phone,
|
|||
|
|
u.user_type as user_table_role,
|
|||
|
|
ur.role_type as primary_role,
|
|||
|
|
IF(u.user_type = ur.role_type, '✓ 一致', '✗ 不一致') as consistency
|
|||
|
|
FROM user u
|
|||
|
|
LEFT JOIN user_roles ur ON u.id = ur.user_id AND ur.is_primary = 1
|
|||
|
|
WHERE u.id = 1;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**预期结果:**
|
|||
|
|
```
|
|||
|
|
+----+-------------+-----------------+--------------+-------------+
|
|||
|
|
| id | phone | user_table_role | primary_role | consistency |
|
|||
|
|
+----+-------------+-----------------+--------------+-------------+
|
|||
|
|
| 1 | 13800138000 | parent | parent | ✓ 一致 |
|
|||
|
|
+----+-------------+-----------------+--------------+-------------+
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📱 前端测试
|
|||
|
|
|
|||
|
|
### 测试1:登录后查看身份
|
|||
|
|
|
|||
|
|
1. 打开微信开发者工具
|
|||
|
|
2. 登录账号
|
|||
|
|
3. 进入"我的"页面
|
|||
|
|
4. 查看是否显示当前身份
|
|||
|
|
|
|||
|
|
**预期:**
|
|||
|
|
- 显示"当前身份:家长"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试2:申请新身份
|
|||
|
|
|
|||
|
|
1. 点击"申请其他身份"按钮
|
|||
|
|
2. 选择"陪伴员"
|
|||
|
|
3. 点击"提交申请"
|
|||
|
|
|
|||
|
|
**预期:**
|
|||
|
|
- 显示"申请成功"提示
|
|||
|
|
- 返回上一页后,显示"切换身份"选项
|
|||
|
|
- 身份列表包含"家长"和"陪伴员"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 测试3:切换身份
|
|||
|
|
|
|||
|
|
1. 点击"陪伴员"身份
|
|||
|
|
2. 确认切换
|
|||
|
|
|
|||
|
|
**预期:**
|
|||
|
|
- 显示"切换成功"提示
|
|||
|
|
- 页面刷新,显示"当前身份:陪伴员"
|
|||
|
|
- 首页显示陪伴员相关功能
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 测试通过标准
|
|||
|
|
|
|||
|
|
### 后端测试
|
|||
|
|
- [ ] 所有API接口返回正确
|
|||
|
|
- [ ] 错误情况处理正确
|
|||
|
|
- [ ] 数据库数据一致性正确
|
|||
|
|
|
|||
|
|
### 前端测试
|
|||
|
|
- [ ] 登录后能看到所有身份
|
|||
|
|
- [ ] 申请新身份功能正常
|
|||
|
|
- [ ] 切换身份功能正常
|
|||
|
|
- [ ] 页面刷新后状态保持
|
|||
|
|
|
|||
|
|
### 兼容性测试
|
|||
|
|
- [ ] 单身份用户正常使用
|
|||
|
|
- [ ] 多身份用户正常使用
|
|||
|
|
- [ ] 现有功能不受影响
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🐛 常见问题
|
|||
|
|
|
|||
|
|
### 问题1:API返回401未授权
|
|||
|
|
**原因:** Token未传递或已过期
|
|||
|
|
**解决:** 重新登录获取新Token
|
|||
|
|
|
|||
|
|
### 问题2:申请身份失败
|
|||
|
|
**原因:** 身份类型无效或已存在
|
|||
|
|
**解决:** 检查 `roleType` 参数是否正确
|
|||
|
|
|
|||
|
|
### 问题3:切换身份后页面没有刷新
|
|||
|
|
**原因:** 前端缓存问题
|
|||
|
|
**解决:** 清除缓存重新编译
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 测试报告模板
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
测试时间:2026-02-28
|
|||
|
|
测试人员:江鑫杰
|
|||
|
|
测试环境:开发环境
|
|||
|
|
|
|||
|
|
【后端测试】
|
|||
|
|
✅ 获取用户所有身份 - 通过
|
|||
|
|
✅ 申请新身份 - 通过
|
|||
|
|
✅ 切换主身份 - 通过
|
|||
|
|
✅ 检查是否拥有角色 - 通过
|
|||
|
|
✅ 删除角色 - 通过
|
|||
|
|
|
|||
|
|
【前端测试】
|
|||
|
|
✅ 登录后查看身份 - 通过
|
|||
|
|
✅ 申请新身份 - 通过
|
|||
|
|
✅ 切换身份 - 通过
|
|||
|
|
|
|||
|
|
【数据库验证】
|
|||
|
|
✅ user_roles 表数据正确
|
|||
|
|
✅ 数据一致性检查通过
|
|||
|
|
|
|||
|
|
【兼容性测试】
|
|||
|
|
✅ 单身份用户正常使用
|
|||
|
|
✅ 多身份用户正常使用
|
|||
|
|
✅ 现有功能不受影响
|
|||
|
|
|
|||
|
|
测试结论:✅ 全部通过
|
|||
|
|
```
|
|||
|
|
|