# 会员管理模块 - 测试用例

---

| 文档信息 | 内容 |
|---------|------|
| **文档版本** | V1.0 |
| **模块名称** | 会员管理模块 - 测试用例 |
| **编写团队** | pangu |
| **创建日期** | 2026-01-31 |

---

## 1. 测试范围

### 1.1 测试模块

- 会员列表查询
- 会员新增
- 会员编辑
- 会员删除
- 重置密码
- 状态切换
- 学生绑定/解绑
- 数据权限

### 1.2 测试类型

| 测试类型 | 说明 |
|---------|------|
| 功能测试 | 验证功能是否符合需求 |
| 接口测试 | 验证API接口正确性 |
| 边界测试 | 验证边界条件处理 |
| 异常测试 | 验证异常情况处理 |
| 权限测试 | 验证权限控制 |
| 性能测试 | 验证性能指标 |

---

## 2. 功能测试用例

### 2.1 会员列表查询

#### TC-MEM-001 正常查询会员列表

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-001 |
| **用例名称** | 正常查询会员列表 |
| **优先级** | P0 |
| **前置条件** | 1. 用户已登录后台<br>2. 用户具有 user:member:list 权限<br>3. 数据库中存在会员数据 |
| **测试步骤** | 1. 进入会员管理页面<br>2. 不输入任何搜索条件<br>3. 点击搜索按钮 |
| **预期结果** | 1. 页面正常加载<br>2. 表格显示会员列表<br>3. 分页信息正确显示 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-002 按手机号查询

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-002 |
| **用例名称** | 按手机号查询会员 |
| **优先级** | P0 |
| **前置条件** | 1. 用户已登录后台<br>2. 数据库中存在手机号为 13812345678 的会员 |
| **测试步骤** | 1. 在手机号输入框输入"138"<br>2. 点击搜索按钮 |
| **预期结果** | 1. 列表显示手机号包含"138"的会员<br>2. 手机号以脱敏形式显示（138****5678） |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-003 按身份类型查询

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-003 |
| **用例名称** | 按身份类型查询会员 |
| **优先级** | P0 |
| **前置条件** | 1. 用户已登录后台<br>2. 数据库中存在家长和教师类型的会员 |
| **测试步骤** | 1. 在身份类型下拉框选择"教师"<br>2. 点击搜索按钮 |
| **预期结果** | 1. 列表只显示身份类型为"教师"的会员<br>2. 身份类型列显示"教师"标签 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-004 按注册时间范围查询

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-004 |
| **用例名称** | 按注册时间范围查询 |
| **优先级** | P1 |
| **前置条件** | 1. 用户已登录后台<br>2. 数据库中存在不同注册时间的会员 |
| **测试步骤** | 1. 选择注册时间范围为"2026-01-01"至"2026-01-31"<br>2. 点击搜索按钮 |
| **预期结果** | 列表只显示注册时间在2026年1月份的会员 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-005 组合条件查询

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-005 |
| **用例名称** | 组合条件查询 |
| **优先级** | P1 |
| **前置条件** | 用户已登录后台 |
| **测试步骤** | 1. 输入手机号"138"<br>2. 选择身份类型"教师"<br>3. 选择状态"正常"<br>4. 点击搜索 |
| **预期结果** | 列表显示同时满足所有条件的会员 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-006 重置搜索条件

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-006 |
| **用例名称** | 重置搜索条件 |
| **优先级** | P1 |
| **前置条件** | 用户已输入搜索条件 |
| **测试步骤** | 1. 输入各种搜索条件<br>2. 点击重置按钮 |
| **预期结果** | 1. 所有搜索条件清空<br>2. 列表显示全部数据（分页） |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.2 会员新增

#### TC-MEM-010 新增家长会员-必填项

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-010 |
| **用例名称** | 新增家长会员-仅填必填项 |
| **优先级** | P0 |
| **前置条件** | 1. 用户已登录后台<br>2. 用户具有 user:member:add 权限 |
| **测试步骤** | 1. 点击新增按钮<br>2. 输入手机号"13912345678"<br>3. 选择身份类型"家长"<br>4. 点击保存 |
| **预期结果** | 1. 提示"新增成功"<br>2. 返回列表页<br>3. 列表中显示新增的会员<br>4. 会员编号自动生成（JS+时间戳）<br>5. 昵称自动生成 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-011 新增家长会员-全部字段

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-011 |
| **用例名称** | 新增家长会员-填写全部字段 |
| **优先级** | P0 |
| **前置条件** | 用户已登录后台 |
| **测试步骤** | 1. 点击新增按钮<br>2. 输入手机号"13922345678"<br>3. 输入昵称"张三家长"<br>4. 选择性别"男"<br>5. 选择出生日期<br>6. 选择身份类型"家长"<br>7. 点击保存 |
| **预期结果** | 1. 提示"新增成功"<br>2. 所有字段正确保存 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-012 新增教师会员-完整信息

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-012 |
| **用例名称** | 新增教师会员 |
| **优先级** | P0 |
| **前置条件** | 1. 用户已登录后台<br>2. 系统中存在学校数据 |
| **测试步骤** | 1. 点击新增按钮<br>2. 输入手机号"13932345678"<br>3. 输入昵称"李老师"<br>4. 选择身份类型"教师"<br>5. 选择所属区域<br>6. 选择所属学校<br>7. 选择所属年级<br>8. 选择所属班级<br>9. 点击保存 |
| **预期结果** | 1. 提示"新增成功"<br>2. 教师信息正确保存 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-013 新增教师-缺少学校信息

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-013 |
| **用例名称** | 新增教师会员-缺少学校信息 |
| **优先级** | P0 |
| **前置条件** | 用户已登录后台 |
| **测试步骤** | 1. 点击新增按钮<br>2. 输入手机号<br>3. 选择身份类型"教师"<br>4. 不选择学校信息<br>5. 点击保存 |
| **预期结果** | 提示"请选择所属区域/学校/年级/班级" |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-014 手机号格式校验

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-014 |
| **用例名称** | 手机号格式校验 |
| **优先级** | P0 |
| **前置条件** | 用户已登录后台 |
| **测试数据** | 错误手机号：12345678901、1381234567、138123456789、abcdefghijk |
| **测试步骤** | 1. 输入错误格式的手机号<br>2. 触发校验 |
| **预期结果** | 提示"请输入正确的手机号" |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-015 手机号唯一性校验

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-015 |
| **用例名称** | 手机号唯一性校验 |
| **优先级** | P0 |
| **前置条件** | 数据库中已存在手机号为 13812345678 的会员 |
| **测试步骤** | 1. 点击新增<br>2. 输入已存在的手机号"13812345678"<br>3. 点击保存 |
| **预期结果** | 提示"手机号已存在" |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-016 新增时绑定学生

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-016 |
| **用例名称** | 新增会员时绑定学生 |
| **优先级** | P1 |
| **前置条件** | 系统中存在未绑定的学生 |
| **测试步骤** | 1. 新增家长会员<br>2. 点击绑定学生<br>3. 选择学生<br>4. 确认绑定<br>5. 保存会员 |
| **预期结果** | 1. 会员创建成功<br>2. 学生绑定成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.3 会员编辑

#### TC-MEM-020 编辑基本信息

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-020 |
| **用例名称** | 编辑会员基本信息 |
| **优先级** | P0 |
| **前置条件** | 数据库中存在会员数据 |
| **测试步骤** | 1. 在列表中点击编辑<br>2. 修改昵称、性别、出生日期<br>3. 点击保存 |
| **预期结果** | 1. 提示"修改成功"<br>2. 信息正确更新 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-021 编辑-修改手机号

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-021 |
| **用例名称** | 修改会员手机号 |
| **优先级** | P0 |
| **前置条件** | 数据库中存在会员数据 |
| **测试步骤** | 1. 点击编辑<br>2. 修改手机号为新的有效手机号<br>3. 点击保存 |
| **预期结果** | 1. 手机号更新成功<br>2. 唯一性校验通过 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-022 编辑-修改为已存在手机号

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-022 |
| **用例名称** | 修改为已存在的手机号 |
| **优先级** | P0 |
| **前置条件** | 存在两个会员，手机号分别为A和B |
| **测试步骤** | 1. 编辑会员A<br>2. 将手机号改为会员B的手机号<br>3. 点击保存 |
| **预期结果** | 提示"手机号已存在" |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-023 身份类型切换-家长改教师

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-023 |
| **用例名称** | 身份类型切换-家长改教师 |
| **优先级** | P0 |
| **前置条件** | 存在身份类型为家长的会员 |
| **测试步骤** | 1. 编辑家长会员<br>2. 将身份类型改为"教师"<br>3. 观察表单变化<br>4. 填写学校信息<br>5. 保存 |
| **预期结果** | 1. 切换后显示教师信息区域<br>2. 要求填写学校相关信息<br>3. 保存成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-024 身份类型切换-教师改家长

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-024 |
| **用例名称** | 身份类型切换-教师改家长 |
| **优先级** | P0 |
| **前置条件** | 存在身份类型为教师的会员 |
| **测试步骤** | 1. 编辑教师会员<br>2. 将身份类型改为"家长"<br>3. 观察表单变化<br>4. 保存 |
| **预期结果** | 1. 切换后隐藏教师信息区域<br>2. 学校信息被清空<br>3. 保存成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.4 会员删除

#### TC-MEM-030 删除无绑定会员

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-030 |
| **用例名称** | 删除无绑定学生的会员 |
| **优先级** | P0 |
| **前置条件** | 存在未绑定学生的会员 |
| **测试步骤** | 1. 在列表中点击删除<br>2. 确认删除 |
| **预期结果** | 1. 提示"删除成功"<br>2. 会员从列表消失（软删除） |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-031 删除有绑定会员

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-031 |
| **用例名称** | 删除已绑定学生的会员 |
| **优先级** | P0 |
| **前置条件** | 存在已绑定学生的会员 |
| **测试步骤** | 1. 在列表中点击删除<br>2. 确认删除 |
| **预期结果** | 提示"该会员已绑定学生，请先解绑学生后再删除" |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-032 删除确认取消

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-032 |
| **用例名称** | 删除确认取消 |
| **优先级** | P1 |
| **前置条件** | 存在会员数据 |
| **测试步骤** | 1. 点击删除<br>2. 在确认弹窗点击取消 |
| **预期结果** | 会员未被删除 |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.5 重置密码

#### TC-MEM-040 重置密码成功

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-040 |
| **用例名称** | 重置密码成功 |
| **优先级** | P0 |
| **前置条件** | 存在会员数据 |
| **测试步骤** | 1. 在列表中点击重置密码<br>2. 确认操作 |
| **预期结果** | 1. 弹窗显示新密码<br>2. 新密码为8位随机字符 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-041 复制新密码

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-041 |
| **用例名称** | 复制新密码 |
| **优先级** | P0 |
| **前置条件** | 已重置密码，弹窗显示中 |
| **测试步骤** | 1. 点击复制按钮 |
| **预期结果** | 1. 提示"复制成功"<br>2. 密码已复制到剪贴板 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-042 新密码可登录

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-042 |
| **用例名称** | 使用新密码登录 |
| **优先级** | P0 |
| **前置条件** | 已重置密码并记录新密码 |
| **测试步骤** | 1. 使用会员手机号和新密码登录移动端 |
| **预期结果** | 登录成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.6 状态切换

#### TC-MEM-050 禁用会员

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-050 |
| **用例名称** | 禁用会员 |
| **优先级** | P0 |
| **前置条件** | 存在状态为"正常"的会员 |
| **测试步骤** | 1. 点击状态开关，关闭<br>2. 确认操作 |
| **预期结果** | 1. 状态变为"停用"<br>2. 提示操作成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-051 启用会员

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-051 |
| **用例名称** | 启用会员 |
| **优先级** | P0 |
| **前置条件** | 存在状态为"停用"的会员 |
| **测试步骤** | 1. 点击状态开关，开启<br>2. 确认操作 |
| **预期结果** | 1. 状态变为"正常"<br>2. 提示操作成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-052 禁用会员无法登录

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-052 |
| **用例名称** | 禁用会员无法登录 |
| **优先级** | P0 |
| **前置条件** | 会员已被禁用 |
| **测试步骤** | 1. 使用被禁用会员的手机号和密码登录 |
| **预期结果** | 提示"账号已被禁用" |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.7 学生绑定

#### TC-MEM-060 家长绑定学生

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-060 |
| **用例名称** | 家长绑定任意学生 |
| **优先级** | P0 |
| **前置条件** | 1. 存在家长会员<br>2. 存在未绑定的学生 |
| **测试步骤** | 1. 编辑家长会员<br>2. 点击绑定学生<br>3. 选择任意学生<br>4. 确认绑定 |
| **预期结果** | 1. 学生列表显示在会员下<br>2. 绑定成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-061 教师绑定本校学生

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-061 |
| **用例名称** | 教师绑定本校学生 |
| **优先级** | P0 |
| **前置条件** | 1. 存在教师会员（属于学校A）<br>2. 存在学校A的学生 |
| **测试步骤** | 1. 编辑教师会员<br>2. 点击绑定学生<br>3. 选择本校学生<br>4. 确认绑定 |
| **预期结果** | 绑定成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-062 教师绑定非本校学生

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-062 |
| **用例名称** | 教师绑定非本校学生（失败） |
| **优先级** | P0 |
| **前置条件** | 1. 存在教师会员（属于学校A）<br>2. 存在学校B的学生 |
| **测试步骤** | 1. 编辑教师会员<br>2. 尝试绑定学校B的学生 |
| **预期结果** | 1. 学生选择弹窗只显示本校学生<br>2. 或提示"教师只能绑定本校学生" |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-063 解绑学生

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-063 |
| **用例名称** | 解绑学生 |
| **优先级** | P0 |
| **前置条件** | 存在已绑定学生的会员 |
| **测试步骤** | 1. 编辑会员<br>2. 点击学生列表中的解绑按钮<br>3. 确认解绑 |
| **预期结果** | 1. 学生从列表中移除<br>2. 解绑成功 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-064 绑定多个学生

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-064 |
| **用例名称** | 绑定多个学生 |
| **优先级** | P1 |
| **前置条件** | 存在家长会员和多个学生 |
| **测试步骤** | 1. 编辑家长会员<br>2. 多次绑定不同学生 |
| **预期结果** | 可以绑定多个学生 |
| **实际结果** | |
| **测试状态** | 待测试 |

---

### 2.8 数据权限测试

#### TC-MEM-070 超级管理员查看全部

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-070 |
| **用例名称** | 超级管理员查看全部会员 |
| **优先级** | P0 |
| **前置条件** | 使用超级管理员账号登录 |
| **测试步骤** | 进入会员管理页面查看列表 |
| **预期结果** | 显示所有会员数据 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-071 分公司用户查看区域会员

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-071 |
| **用例名称** | 分公司用户查看所属区域会员 |
| **优先级** | P0 |
| **前置条件** | 使用分公司用户账号登录（如武汉分公司） |
| **测试步骤** | 进入会员管理页面查看列表 |
| **预期结果** | 只显示武汉区域的会员 |
| **实际结果** | |
| **测试状态** | 待测试 |

#### TC-MEM-072 学校用户查看本校教师

| 项目 | 内容 |
|-----|------|
| **用例编号** | TC-MEM-072 |
| **用例名称** | 学校用户查看本校教师 |
| **优先级** | P0 |
| **前置条件** | 使用学校用户账号登录（如武汉一中） |
| **测试步骤** | 进入会员管理页面查看列表 |
| **预期结果** | 只显示武汉一中的教师会员 |
| **实际结果** | |
| **测试状态** | 待测试 |

---

## 3. 接口测试用例

### 3.1 查询会员列表接口

| 用例编号 | 接口 | 请求参数 | 预期响应 |
|---------|------|---------|---------|
| API-001 | GET /member/list | pageNum=1&pageSize=10 | code=200, 返回列表数据 |
| API-002 | GET /member/list | phone=138 | 返回手机号包含138的会员 |
| API-003 | GET /member/list | identityType=2 | 返回教师会员 |
| API-004 | GET /member/list | status=1 | 返回停用会员 |

### 3.2 新增会员接口

| 用例编号 | 接口 | 请求参数 | 预期响应 |
|---------|------|---------|---------|
| API-010 | POST /member | {phone:"13912345678", identityType:"1"} | code=200 |
| API-011 | POST /member | {phone:"", identityType:"1"} | code=400, msg="手机号不能为空" |
| API-012 | POST /member | {phone:"123", identityType:"1"} | code=400, msg="手机号格式不正确" |
| API-013 | POST /member | {phone:"13812345678", identityType:"2"} | code=400, msg="请选择所属区域" |

### 3.3 重置密码接口

| 用例编号 | 接口 | 请求参数 | 预期响应 |
|---------|------|---------|---------|
| API-020 | PUT /member/resetPwd/1 | - | code=200, password存在 |
| API-021 | PUT /member/resetPwd/999999 | - | code=500, msg="会员不存在" |

### 3.4 删除会员接口

| 用例编号 | 接口 | 请求参数 | 预期响应 |
|---------|------|---------|---------|
| API-030 | DELETE /member/1 | - | code=200（无绑定学生时） |
| API-031 | DELETE /member/2 | - | code=500, msg="请先解绑学生"（有绑定学生时） |

---

## 4. 边界测试

### 4.1 字段长度测试

| 用例编号 | 字段 | 测试值 | 预期结果 |
|---------|------|--------|---------|
| BT-001 | 手机号 | 10位数字 | 提示格式错误 |
| BT-002 | 手机号 | 12位数字 | 提示格式错误 |
| BT-003 | 昵称 | 50个字符 | 保存成功 |
| BT-004 | 昵称 | 51个字符 | 截断或提示超长 |

### 4.2 分页边界测试

| 用例编号 | 测试场景 | 预期结果 |
|---------|---------|---------|
| BT-010 | pageNum=0 | 默认为第1页 |
| BT-011 | pageSize=0 | 默认为10条 |
| BT-012 | pageNum超过总页数 | 返回空列表 |
| BT-013 | 无数据时查询 | 返回空列表，total=0 |

---

## 5. 性能测试

### 5.1 响应时间测试

| 用例编号 | 测试场景 | 性能指标 |
|---------|---------|---------|
| PT-001 | 列表查询（10万条数据） | ≤ 500ms |
| PT-002 | 新增会员 | ≤ 300ms |
| PT-003 | 编辑会员 | ≤ 300ms |
| PT-004 | 重置密码 | ≤ 200ms |

### 5.2 并发测试

| 用例编号 | 测试场景 | 性能指标 |
|---------|---------|---------|
| PT-010 | 100并发查询 | 成功率 ≥ 99% |
| PT-011 | 50并发新增 | 成功率 ≥ 99%，无数据重复 |
| PT-012 | 20并发重置密码 | 成功率 ≥ 99% |

---

## 6. 测试环境

### 6.1 环境要求

| 环境 | 配置 |
|-----|------|
| 操作系统 | Windows 10 / macOS / Linux |
| 浏览器 | Chrome 最新版本 |
| 后端服务 | Java 17+, Spring Boot 3.3.x |
| 数据库 | MySQL 8.0 |
| 缓存 | Redis 7.x |

### 6.2 测试数据

- 准备至少50条会员测试数据
- 包含家长和教师两种身份类型
- 包含正常和停用两种状态
- 部分会员已绑定学生

---

## 7. 测试报告模板

| 项目 | 内容 |
|-----|------|
| 测试人员 | |
| 测试日期 | |
| 测试版本 | |
| 总用例数 | |
| 通过数 | |
| 失败数 | |
| 阻塞数 | |
| 通过率 | |
| 遗留问题 | |

---

*文档结束*
