Browse Source

test(design): 简化测试用例格式为测试编号-功能点-输入-输出

共172个测试用例,保持简洁格式

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
caitianqi 5 tháng trước cách đây
mục cha
commit
c4f586bf8e

+ 269 - 1491
需求工作区/需求设计文档/智能穴位定位系统测试用例.md

@@ -1,1564 +1,342 @@
-# 智能穴位定位系统测试用例文档(详细版)
+# 智能穴位定位系统测试用例(简洁版)
 
 ## 文档信息
 
 | 项目 | 内容 |
 |------|------|
 | 项目名称 | 智能穴位定位系统 |
-| 文档版本 | v2.0 详细版 |
-| 编写日期 | 2026-04-03 |
-| 编写角色 | 测试工程师 |
-| 关联文档 | 智能穴位定位系统设计文档 |
-
----
-
-## 一、用户管理测试用例(详细版)
-
-### 1.1 用户列表功能
-
-#### 1.1.1 功能验证测试
-
-**TC-UM-001:查看用户列表**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-001 |
-| 用例名称 | 查看用户列表 |
-| 测试目的 | 验证用户列表页面正确显示所有用户信息 |
-| 前置条件 | 数据库中存在至少3条用户数据,包含不同性别、不同穴位表状态 |
-| 测试步骤 | 1. 打开浏览器,访问后台管理系统登录页面<br>2. 输入管理员账号admin/admin123,点击登录<br>3. 在左侧菜单点击"用户管理",进入用户列表页面<br>4. 观察列表显示内容 |
-| 预期结果 | 列表显示所有用户数据,包含以下字段:多选框、序号、用户ID、姓名、性别、年龄、手机号、设备编号、肩宽(cm)、身长(cm)、穴位表状态、注册时间、操作 |
-| 测试数据 | 见附表1.1 |
-| 验证方法 | 人工查看 + 数据库比对 |
-
-**TC-UM-002:按姓名模糊搜索**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-002 |
-| 用例名称 | 按姓名模糊搜索 |
-| 测试目的 | 验证按姓名模糊搜索功能正确 |
-| 前置条件 | 存在用户:张三、李四、王五、赵六 |
-| 测试步骤 | 1. 进入用户列表页面<br>2. 在"姓名/手机号"搜索框输入"张"<br>3. 点击"查询"按钮<br>4. 记录查询结果 |
-| 输入数据 | 搜索关键字:"张" |
-| 预期结果 | 显示张三,不显示李四、王五、赵六 |
-| 验证方法 | 观察列表 + 数据库SQL验证 |
-
-**TC-UM-003:按设备编号搜索**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-003 |
-| 用例名称 | 按设备编号搜索 |
-| 测试目的 | 验证按设备编号搜索能正确返回绑定该设备的用户 |
-| 前置条件 | 用户张三绑定设备AJY001、AJY002;用户李四绑定设备AJY001 |
-| 测试步骤 | 1. 进入用户列表页面<br>2. 在"设备编号"搜索框输入"AJY001"<br>3. 点击"查询"按钮 |
-| 输入数据 | 搜索关键字:"AJY001" |
-| 预期结果 | 显示张三和李四(两人均绑定AJY001) |
-| SQL验证 | `SELECT * FROM user WHERE devices LIKE '%AJY001%'` |
-
----
-
-#### 1.1.2 查询条件组合测试
-
-**TC-UM-004:多条件组合查询**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-004 |
-| 用例名称 | 多条件组合查询-姓名+性别+状态 |
-| 测试目的 | 验证多个查询条件组合时,逻辑正确(AND关系) |
-| 前置条件 | 存在以下用户数据 |
-| 测试步骤 | 1. 姓名搜索框输入"张"<br>2. 性别选择"男"<br>3. 穴位表状态选择"已生成"<br>4. 点击"查询" |
-| 输入数据 | 姓名="张", 性别="男", 穴位表状态="已生成" |
-| 预期结果 | 显示同时满足以上3个条件的用户 |
-| 验证方法 | 逐条核对返回结果是否满足所有条件 |
-
-**测试数据准备:**
-
-| 用户ID | 姓名 | 性别 | 设备编号 | 穴位表状态 | 预期结果 |
-|--------|------|------|----------|------------|----------|
-| U001 | 张三 | 男 | AJY001 | 已生成 | 显示 |
-| U002 | 张丽 | 女 | AJY002 | 已生成 | 不显示(性别不匹配) |
-| U003 | 张强 | 男 | - | 未生成 | 不显示(状态不匹配) |
-| U004 | 李四 | 男 | AJY001 | 已生成 | 不显示(姓名不匹配) |
-
----
-
-#### 1.1.3 查询边界测试
-
-**TC-UM-005:查询结果为空**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-005 |
-| 用例名称 | 查询结果为空展示 |
-| 测试目的 | 验证查询无结果时页面正确显示 |
-| 前置条件 | 数据库中不存在符合条件的用户 |
-| 测试步骤 | 1. 输入不存在的搜索条件<br>2. 点击查询 |
-| 输入数据 | 姓名="不存在的用户" |
-| 预期结果 | 显示"暂无数据"或空列表,页脚显示"共0条" |
-| 验证方法 | 观察页面显示 |
-
-**TC-UM-006:重置查询条件**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-006 |
-| 用例名称 | 重置查询条件 |
-| 测试目的 | 验证重置按钮清空所有查询条件并恢复默认列表 |
-| 前置条件 | 已设置多个查询条件 |
-| 测试步骤 | 1. 设置查询条件(姓名=张,性别=男)<br>2. 列表显示过滤后结果<br>3. 点击"重置"按钮 |
-| 预期结果 | 所有搜索框清空,下拉框恢复默认"全部",列表显示全部用户 |
-| 验证方法 | 观察页面状态 |
-
----
-
-### 1.2 新增用户功能
-
-#### 1.2.1 必填字段验证
-
-**TC-UM-010:姓名必填验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-010 |
-| 用例名称 | 新增用户-姓名必填验证 |
-| 测试目的 | 验证姓名字段为必填项,不填写不能保存 |
-| 前置条件 | 进入新增用户页面 |
-| 测试步骤 | 1. 填写除姓名外的其他必填项(性别=男,年龄=35,手机号=13800138000,肩宽=42,身长=85)<br>2. 姓名留空<br>3. 点击"保存"按钮 |
-| 输入数据 | 姓名="" |
-| 预期结果 | 表单顶部或姓名输入框下方显示红色提示:"姓名为必填项" |
-| 验证方法 | 观察错误提示 + 检查用户未创建(数据库验证) |
-
-**TC-UM-011:性别必填验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-011 |
-| 用例名称 | 新增用户-性别必填验证 |
-| 测试目的 | 验证性别字段为必填项 |
-| 测试步骤 | 1. 填写姓名="测试用户"<br>2. 不选择性别<br>3. 点击保存 |
-| 预期结果 | 提示"性别为必填项" |
-| 验证方法 | 观察提示 |
-
-**TC-UM-012:手机号必填验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-012 |
-| 用例名称 | 新增用户-手机号必填验证 |
-| 测试步骤 | 1. 填写姓名、性别、年龄<br>2. 手机号留空<br>3. 点击保存 |
-| 预期结果 | 提示"手机号为必填项" |
-
----
-
-#### 1.2.2 格式验证
-
-**TC-UM-013:手机号格式验证-长度不足**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-013 |
-| 用例名称 | 手机号格式验证-长度不足 |
-| 测试步骤 | 1. 填写必填项<br>2. 手机号输入"1381234"(7位)<br>3. 点击保存 |
-| 输入数据 | 手机号="1381234" |
-| 预期结果 | 提示"手机号格式错误,请输入11位手机号" |
-| 验证方法 | 观察提示 + 数据库验证无新记录 |
-
-**TC-UM-014:手机号格式验证-非数字**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-014 |
-| 测试步骤 | 1. 手机号输入"138abcdef"<br>2. 点击保存 |
-| 预期结果 | 提示"手机号只能输入数字" |
-
-**TC-UM-015:手机号格式验证-首数字不正确**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-015 |
-| 测试步骤 | 1. 手机号输入"12800138000"(以12开头)<br>2. 点击保存 |
-| 预期结果 | 提示"手机号应以13/14/15/16/17/18/19开头" |
-
----
-
-#### 1.2.3 唯一性验证
-
-**TC-UM-016:手机号唯一性验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-016 |
-| 前置条件 | 数据库已存在手机号13800138000的用户张三 |
-| 测试步骤 | 1. 新增用户,填写手机号为13800138000<br>2. 点击保存 |
-| 输入数据 | 手机号="13800138000"(已存在) |
-| 预期结果 | 提示"手机号已存在,请使用其他手机号" |
-| SQL验证 | `SELECT COUNT(*) FROM user WHERE phone='13800138000' AND deleted=0` 返回1 |
-
----
-
-#### 1.2.4 数值范围验证
-
-**TC-UM-017:男性肩宽范围边界验证**
-
-| 用例ID | 测试场景 | 输入数据 | 预期结果 | 验证方法 |
-|--------|----------|----------|----------|----------|
-| TC-UM-017-01 | 最小值-1(不通过) | 男性肩宽=35 | 提示"男性肩宽范围为36-52cm" | 观察提示 |
-| TC-UM-017-02 | 最小值(通过) | 男性肩宽=36 | 保存成功 | 数据库验证 |
-| TC-UM-017-03 | 最大值(通过) | 男性肩宽=52 | 保存成功 | 数据库验证 |
-| TC-UM-017-04 | 最大值+1(不通过) | 男性肩宽=53 | 提示"男性肩宽范围为36-52cm" | 观察提示 |
-
-**边界值测试数据表:**
-
-| 字段 | 性别 | 最小值-1 | 最小值 | 中间值 | 最大值 | 最大值+1 |
-|------|------|----------|--------|--------|--------|----------|
-| 肩宽(cm) | 男 | 35 | 36 | 44 | 52 | 53 |
-| 肩宽(cm) | 女 | 31 | 32 | 39 | 46 | 47 |
-| 身长(cm) | 男 | 74 | 75 | 85 | 95 | 96 |
-| 身长(cm) | 女 | 69 | 70 | 79 | 88 | 89 |
-| 一寸(cm) | 男 | 1.4 | 1.5 | 2.1 | 2.8 | 2.9 |
-| 一寸(cm) | 女 | 1.2 | 1.3 | 1.8 | 2.4 | 2.5 |
-| 1.5寸(cm) | 男 | 2.1 | 2.2 | 3.1 | 4.0 | 4.1 |
-| 1.5寸(cm) | 女 | 1.9 | 2.0 | 2.7 | 3.5 | 3.6 |
-| 三寸(cm) | 男 | 4.4 | 4.5 | 6.2 | 8.0 | 8.1 |
-| 三寸(cm) | 女 | 3.9 | 4.0 | 5.5 | 7.0 | 7.1 |
-| 年龄 | 通用 | 0 | 1 | 60 | 120 | 121 |
-
----
-
-#### 1.2.5 成功场景测试
-
-**TC-UM-020:成功新增男性用户(完整数据)**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-020 |
-| 测试目的 | 验证填写完整信息能成功创建用户 |
-| 测试步骤 | 1. 点击"新增"按钮<br>2. 填写所有字段(见下表)<br>3. 点击"保存"按钮 |
-| 输入数据 | 见下方"新增用户完整测试数据表" |
-| 预期结果 | 1. 页面跳转回列表<br>2. 列表显示新用户<br>3. 页面顶部显示"保存成功" |
-| 数据库验证 | `SELECT * FROM user WHERE phone='13800138005'`<br>返回1条记录,字段值与输入一致 |
-
-**新增用户完整测试数据表:**
-
-| 字段名 | 输入值 | 数据类型 | 验证规则 |
-|--------|--------|----------|----------|
-| 姓名 | 张三 | string | 最长50字符 |
-| 性别 | 男 | enum | 男/女 |
-| 年龄 | 35 | int | 1-120 |
-| 手机号 | 13800138005 | string | 11位手机号,唯一 |
-| 肩宽 | 42 | decimal(5,1) | 男性36-52cm |
-| 身长 | 85 | decimal(5,1) | 男性75-95cm |
-| 一寸 | 2.2 | decimal(3,1) | 男性1.5-2.8cm |
-| 1.5寸 | 3.3 | decimal(3,1) | 男性2.2-4.0cm |
-| 三寸 | 6.5 | decimal(3,1) | 男性4.5-8.0cm |
-
-**TC-UM-021:成功新增女性用户(仅必填数据)**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-021 |
-| 测试目的 | 验证仅填写必填项也能成功创建用户 |
-| 测试步骤 | 1. 点击"新增"<br>2. 填写必填项:姓名=李四,性别=女,年龄=33,手机号=13900139000,肩宽=36,身长=78<br>3. 指寸数据留空<br>4. 点击保存 |
-| 输入数据 | 仅必填项,指寸为空 |
-| 预期结果 | 用户创建成功,指寸字段为NULL |
-| 数据库验证 | finger_width字段为NULL,系统自动估算指寸 |
-
----
-
-#### 1.2.6 生成穴位坐标功能
-
-**TC-UM-022:生成穴位坐标功能验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-022 |
-| 测试目的 | 验证"生成穴位坐标"功能正确计算穴位位置 |
-| 前置条件 | 用户体型数据完整(肩宽42cm,身长85cm)或已填写指寸数据 |
-| 测试步骤 | 1. 新增用户,填写体型数据<br>2. 点击"生成穴位坐标"按钮<br>3. 观察返回结果 |
-| 预期结果 | 1. 生成12个穴位坐标数据(23个点,含双侧)<br>2. 大椎穴坐标为(0,0)<br>3. 置信度根据数据完整度计算 |
-| 验证数据 | 见下方"穴位坐标生成预期结果" |
-
-**穴位坐标生成预期结果(男性,肩宽42,身长85,指寸2.2cm):**
-
-| 穴位ID | 穴位名称 | 侧别 | 相对大椎穴X(cm) | 相对大椎穴Y(cm) | 备注 |
-|--------|----------|------|-----------------|----------------|------|
-| dazhui | 大椎穴 | 中心 | 0 | 0 | 基准点 |
-| shenzhu | 身柱穴 | 中心 | 0 | -6.6 | 3寸×2.2cm |
-| zhiyang | 至阳穴 | 中心 | 0 | -15.4 | 7寸×2.2cm |
-| mingmen | 命门穴 | 中心 | 0 | -30.8 | 14寸×2.2cm |
-| yaoyangguan | 腰阳关穴 | 中心 | 0 | -37.4 | 17寸×2.2cm |
-| fengmen_left | 风门穴(左) | 左侧 | -3.3 | -3.3 | 1.5寸×2.2cm |
-| fengmen_right | 风门穴(右) | 右侧 | 3.3 | -3.3 | 1.5寸×2.2cm |
-| bingfeng_left | 秉风穴(左) | 左侧 | -6.6 | -6.6 | 3寸×2.2cm |
-| bingfeng_right | 秉风穴(右) | 右侧 | 6.6 | -6.6 | 3寸×2.2cm |
-| feishu_left | 肺俞穴(左) | 左侧 | -3.3 | -6.6 | 1.5寸×2.2cm |
-| feishu_right | 肺俞穴(右) | 右侧 | 3.3 | -6.6 | 1.5寸×2.2cm |
-| geshu_left | 膈俞穴(左) | 左侧 | -3.3 | -15.4 | 1.5寸×2.2cm |
-| geshu_right | 膈俞穴(右) | 右侧 | 3.3 | -15.4 | 1.5寸×2.2cm |
-| pishu_left | 脾俞穴(左) | 左侧 | -3.3 | -24.2 | 1.5寸×2.2cm |
-| pishu_right | 脾俞穴(右) | 右侧 | 3.3 | -24.2 | 1.5寸×2.2cm |
-| shenshu_left | 肾俞穴(左) | 左侧 | -3.3 | -30.8 | 1.5寸×2.2cm |
-| shenshu_right | 肾俞穴(右) | 右侧 | 3.3 | -30.8 | 1.5寸×2.2cm |
-| baliao | 八髎穴 | 中心 | 0 | -35.2 | 16寸×2.2cm |
-
----
-
-### 1.3 编辑用户功能
-
-**TC-UM-023:编辑用户基本信息**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-023 |
-| 测试步骤 | 1. 在用户列表点击某用户"编辑"按钮<br>2. 修改姓名从"张三"改为"张三丰"<br>3. 点击"保存" |
-| 输入数据 | 姓名="张三丰" |
-| 预期结果 | 1. 页面提示"保存成功"<br>2. 列表显示新姓名 |
-| SQL验证 | `SELECT name FROM user WHERE id='U001'` 返回"张三丰" |
-
-**TC-UM-024:编辑后重新生成穴位坐标**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-024 |
-| 测试步骤 | 1. 编辑用户,修改肩宽从42改为44<br>2. 点击"生成穴位坐标"<br>3. 点击保存 |
-| 输入数据 | 肩宽=44 |
-| 预期结果 | 1. 穴位坐标重新计算<br>2. 坐标值根据新肩宽计算<br>3. 置信度可能变化 |
-| 验证 | 重新查询穴位坐标,验证数值变化 |
-
----
-
-### 1.4 删除用户功能
-
-**TC-UM-025:删除用户-逻辑删除**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-025 |
-| 测试目的 | 验证用户删除采用逻辑删除(非物理删除) |
-| 测试步骤 | 1. 点击"删除"按钮<br>2. 弹出确认对话框<br>3. 点击"确定" |
-| 预期结果 | 1. 用户从列表消失<br>2. 数据库deleted字段变为1或is_deleted变为true |
-| SQL验证 | `SELECT * FROM user WHERE id='U001' AND deleted=1` |
-
-**TC-UM-026:删除用户-数据关联处理**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-026 |
-| 测试目的 | 验证删除用户时关联的设备绑定、穴位坐标等正确处理 |
-| 前置条件 | 用户已绑定设备,已生成穴位坐标 |
-| 测试步骤 | 1. 删除该用户 |
-| 预期结果 | 1. 用户记录标记为已删除<br>2. 设备绑定关系解除<br>3. 穴位坐标保留(标记为无效) |
-| SQL验证 | 检查device_binding表、acupoint_table表的关联状态 |
-
----
+| 文档版本 | v3.0 简洁版 |
+| 用例格式 | 测试编号、功能点、输入、输出 |
+
+---
+
+## 一、用户管理
+
+### 1.1 用户列表
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| UM-001 | 查看用户列表 | 无(进入用户管理页面) | 显示用户列表,包含ID、姓名、性别、年龄、手机号、设备编号、肩宽、身长、穴位表状态 |
+| UM-002 | 按姓名模糊搜索 | 搜索关键字:"张" | 显示所有姓名包含"张"的用户 |
+| UM-003 | 按手机号搜索 | 搜索关键字:"138" | 显示手机号包含"138"的用户 |
+| UM-004 | 按设备编号搜索 | 搜索关键字:"AJY001" | 显示绑定该设备的用户 |
+| UM-005 | 按性别筛选 | 性别选择:"男" | 只显示男性用户 |
+| UM-006 | 按穴位表状态筛选 | 状态选择:"已生成" | 只显示已生成穴位表的用户 |
+| UM-007 | 多条件组合查询 | 姓名="张" + 性别="男" + 状态="已生成" | 显示同时满足3个条件的用户 |
+| UM-008 | 重置查询条件 | 点击"重置"按钮 | 所有条件清空,显示全部用户 |
+
+### 1.2 新增用户
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| UM-010 | 成功新增男性用户 | 姓名=张三,性别=男,年龄=35,手机号=13800138000,肩宽=42,身长=85 | 用户创建成功,显示在列表中 |
+| UM-011 | 成功新增女性用户 | 姓名=李四,性别=女,年龄=33,手机号=13900139000,肩宽=36,身长=78 | 用户创建成功 |
+| UM-012 | 姓名必填验证 | 姓名留空,其他必填项填写完整 | 提示"姓名为必填项" |
+| UM-013 | 性别必填验证 | 性别不选,其他必填项填写完整 | 提示"性别为必填项" |
+| UM-014 | 手机号必填验证 | 手机号留空 | 提示"手机号为必填项" |
+| UM-015 | 手机号格式验证 | 手机号="12345"(7位) | 提示"手机号格式错误,请输入11位手机号" |
+| UM-016 | 手机号唯一性验证 | 手机号="13800138000"(已存在) | 提示"手机号已存在" |
+| UM-017 | 男性肩宽范围验证-超下限 | 男性肩宽=35 | 提示"男性肩宽范围为36-52cm" |
+| UM-018 | 男性肩宽范围验证-超上限 | 男性肩宽=53 | 提示"男性肩宽范围为36-52cm" |
+| UM-019 | 女性肩宽范围验证 | 女性肩宽=50 | 提示"女性肩宽范围为32-46cm" |
+| UM-020 | 男性身长范围验证 | 男性身长=70 | 提示"男性身长范围为75-95cm" |
+| UM-021 | 女性身长范围验证 | 女性身长=90 | 提示"女性身长范围为70-88cm" |
+| UM-022 | 年龄范围验证 | 年龄=150 | 提示"年龄范围为1-120" |
+| UM-023 | 指寸数据验证 | 一寸=1.0(超出范围) | 提示"一寸范围为男性1.5-2.8cm" |
+| UM-024 | 生成穴位坐标 | 体型数据完整,点击"生成穴位坐标" | 生成12个穴位(23个点)坐标数据 |
+
+### 1.3 编辑用户
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| UM-030 | 编辑用户信息 | 修改姓名="张三丰" | 页面提示"保存成功",列表显示新姓名 |
+| UM-031 | 编辑后重新生成坐标 | 修改肩宽=44,点击"生成穴位坐标" | 穴位坐标重新计算 |
+| UM-032 | 查看用户详情 | 点击"查看"按钮 | 显示用户完整信息页面 |
+
+### 1.4 删除用户
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| UM-040 | 删除单个用户 | 点击"删除",确认 | 用户从列表消失,数据库标记deleted=1 |
+| UM-041 | 批量删除用户 | 勾选多条,点击"批量删除",确认 | 所有选中用户被删除 |
+| UM-042 | 删除取消 | 点击"删除",取消 | 用户未被删除 |
 
 ### 1.5 用户设备管理
 
-**TC-UM-027:查看用户绑定设备列表**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-027 |
-| 测试步骤 | 1. 点击用户列表的"设备管理"按钮 |
-| 预期结果 | 页面跳转到设备管理页面,显示该用户绑定的所有设备 |
-
-**设备列表字段:**
-
-| 字段 | 说明 |
-|------|------|
-| 多选框 | 用于批量操作 |
-| 序号 | 列表序号 |
-| 设备编号 | 主键,如AJY001 |
-| 设备名称 | 如艾灸椅-001 |
-| 设备型号 | AJY-2026/AJY-2025 |
-| 绑定时间 | 格式:YYYY-MM-DD HH:mm:ss |
-| 是否主设备 | 是/否 |
-| 在线状态 | 在线/离线 |
-| 操作 | 设为主设备/解绑 |
-
-**TC-UM-028:添加设备到用户**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-028 |
-| 测试步骤 | 1. 点击"添加设备"按钮<br>2. 弹出设备选择对话框<br>3. 勾选设备AJY003<br>4. 点击确定 |
-| 预期结果 | 1. 设备绑定成功<br>2. 设备列表显示新设备<br>3. 设备绑定数+1 |
-| SQL验证 | `SELECT * FROM device_binding WHERE user_id='U001' AND device_id='AJY003'` |
-
-**TC-UM-029:设置主设备**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-029 |
-| 测试步骤 | 1. 用户绑定多个设备(AJY001为主设备,AJY002为普通)<br>2. 点击AJY002的"设为主设备"<br>3. 确认 |
-| 预期结果 | 1. AJY002变为主设备<br>2. AJY001变为普通设备<br>3. 数据库is_primary字段更新 |
-| SQL验证 | `SELECT is_primary FROM device_binding WHERE user_id='U001' AND device_id IN ('AJY001','AJY002')` |
-
----
-
-### 1.6 导入导出功能
-
-**TC-UM-030:导出用户数据**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-030 |
-| 测试步骤 | 1. 设置筛选条件(性别=男)<br>2. 点击"导出"按钮 |
-| 预期结果 | 1. 浏览器下载Excel文件<br>2. 文件包含筛选后的用户数据<br>3. 表头包含所有字段 |
-| 导出字段 | 用户ID、姓名、性别、年龄、手机号、设备编号、肩宽、身长、一寸、1.5寸、三寸、穴位表状态、注册时间 |
-
-**TC-UM-031:导入用户数据-模板下载**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-031 |
-| 测试步骤 | 1. 点击"导入"按钮<br>2. 点击"下载模板" |
-| 预期结果 | 下载Excel模板文件,表头包含所有必填字段 |
-
-**TC-UM-032:导入用户数据-成功场景**
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| UM-050 | 查看用户绑定设备 | 点击"设备管理"按钮 | 显示该用户绑定的所有设备 |
+| UM-051 | 添加设备到用户 | 选择设备AJY003,点击确定 | 设备绑定成功,列表增加设备 |
+| UM-052 | 设置主设备 | 点击某设备的"设为主设备" | 该设备变为主设备,其他设备变更为非主设备 |
+| UM-053 | 解绑设备 | 点击"解绑",确认 | 设备与用户解除绑定 |
 
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-032 |
-| 测试步骤 | 1. 准备符合模板格式的Excel文件(5条数据)<br>2. 点击"导入"<br>3. 上传文件<br>4. 等待处理 |
-| 预期结果 | 1. 显示导入进度<br>2. 导入成功提示<br>3. 列表显示新增的5条用户 |
-| SQL验证 | `SELECT COUNT(*) FROM user WHERE created_at > '导入开始时间'` |
-
-**TC-UM-033:导入用户数据-格式错误**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-UM-033 |
-| 测试步骤 | 1. 上传格式错误的文件(如:缺少必填列)<br>2. 点击上传 |
-| 预期结果 | 提示"导入失败,文件格式不正确,请检查模板" |
-
----
-
-## 二、穴位管理测试用例(详细版)
-
-### 2.1 穴位列表功能
-
-**TC-AM-001:查看穴位列表**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AM-001 |
-| 测试步骤 | 进入穴位管理页面 |
-| 预期结果 | 显示穴位列表,包含字段:多选框、序号、穴位ID、穴位名称、所属经络、功效、定位方式、状态、操作 |
-| 验证方法 | 页面显示内容与数据库比对 |
-
-**穴位列表测试数据:**
+### 1.6 导入导出
 
-| 穴位ID | 穴位名称 | 所属经络 | 功效 | 定位方式 | 状态 |
-|--------|----------|----------|------|----------|------|
-| dazhui | 大椎穴 | 督脉 | 驱寒、祛湿 | 相对定位 | 活跃 |
-| fengmen | 风门穴 | 足太阳膀胱经 | 祛风解表 | 相对定位 | 活跃 |
-| shenzhu | 身柱穴 | 督脉 | 止咳平喘、安神 | 相对定位 | 活跃 |
-| weizhong | 委中穴 | - | 待完善 | 待完善 | 待完善 |
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| UM-060 | 导出用户数据 | 设置筛选条件,点击"导出" | 下载Excel文件 |
+| UM-061 | 导入用户数据 | 上传符合模板的Excel文件 | 批量导入成功,列表显示新增用户 |
+| UM-062 | 导入格式错误 | 上传格式错误的文件 | 提示"导入失败,文件格式不正确" |
 
 ---
 
-### 2.2 新增穴位功能
-
-#### 2.2.1 相对定位穴位
-
-**TC-AM-006:新增相对定位穴位(中心)-单侧**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AM-006 |
-| 测试步骤 | 1. 点击"新增"<br>2. 填写:穴位名称="身柱穴",经络="督脉",功效勾选"止咳平喘"、"安神"<br>3. 定位方式选择"相对定位"<br>4. 纵向偏移填写"3",指寸类型选择"一寸"<br>5. 侧别选择"中心"<br>6. 点击保存 |
-| 输入数据 | 见下方"穴位新增输入数据表" |
-| 预期结果 | 1. 提示保存成功<br>2. 列表显示新穴位 |
-| 数据库验证 | `SELECT * FROM acupoint WHERE name='身柱穴'` |
-
-**穴位新增输入数据表:**
-
-| 字段 | 输入值 | 类型 | 验证规则 |
-|------|--------|------|----------|
-| 穴位名称 | 身柱穴 | string | 最长50字符,必填 |
-| 所属经络 | 督脉 | enum | 必填 |
-| 功效 | 止咳平喘,安神 | array | 至少选1项 |
-| 定位方式 | 相对定位 | enum | 必选 |
-| 纵向偏移 | 3 | number | 必填,正数 |
-| 横向偏移 | (留空) | number | 中心时非必填 |
-| 侧别 | 中心 | enum | 必选 |
-| 指寸类型 | 一寸 | enum | 相对定位时必选 |
-| 适用性别 | 不限 | enum | 必选 |
-
-**TC-AM-007:新增相对定位穴位(双侧)**
+## 二、穴位管理
 
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AM-007 |
-| 测试步骤 | 1. 穴位名称="风门穴",经络="膀胱经"<br>2. 定位方式="相对定位"<br>3. 纵向偏移="1.5",指寸类型="1.5寸"<br>4. 横向偏移="1.5"<br>5. 侧别="双侧"<br>6. 保存 |
-| 预期结果 | 创建左右两个穴位点,X坐标分别为正负值 |
+### 2.1 穴位列表
 
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AM-001 | 查看穴位列表 | 进入穴位管理页面 | 显示穴位列表,包含ID、名称、经络、功效、定位方式、状态 |
+| AM-002 | 按穴位名称搜索 | 搜索"大椎" | 显示大椎穴 |
+| AM-003 | 按经络筛选 | 选择"督脉" | 只显示督脉穴位 |
+| AM-004 | 按定位方式筛选 | 选择"相对定位" | 只显示相对定位穴位 |
+| AM-005 | 按状态筛选 | 选择"待完善" | 只显示待完善穴位 |
 
-#### 2.2.2 绝对定位穴位
+### 2.2 新增穴位
 
-**TC-AM-008:新增绝对定位穴位**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AM-008 |
-| 测试步骤 | 1. 穴位名称="测试穴"<br>2. 定位方式选择"绝对定位"<br>3. 绝对坐标X=100,Y=200,Z=50<br>4. 保存 |
-| 输入数据 | 定位方式="绝对定位",X=100,Y=200,Z=50 |
-| 预期结果 | 创建成功,定位方式为绝对定位 |
-| 坐标单位 | mm(毫米) |
-
----
-
-#### 2.2.3 字段验证
-
-**TC-AM-009:穴位名称必填验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-AM-009-01 | 留空 | 穴位名称="" | 提示"穴位名称为必填项" |
-| TC-AM-009-02 | 空格 | 穴位名称=" " | 提示"穴位名称为必填项" |
-| TC-AM-009-03 | 超长 | 穴位名称="测试穴位测试穴位测试穴位测试穴位测试穴位测试穴位测试穴位测试穴位测试穴位"(51字符) | 提示"穴位名称不能超过50个字符" |
-
-**TC-AM-010:功效必选验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-AM-010-01 | 不选 | 功效=[] | 提示"至少选择1项功效" |
-| TC-AM-010-02 | 选择1项 | 功效=["驱寒"] | 保存成功 |
-
-**TC-AM-011:相对定位必填字段验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-AM-011-01 | 不填纵向偏移 | 定位方式=相对定位,纵向偏移="" | 提示"纵向偏移为必填项" |
-| TC-AM-011-02 | 不选指寸类型 | 定位方式=相对定位,指寸类型="" | 提示"指寸类型为必填项" |
-| TC-AM-011-03 | 双侧不填横向偏移 | 定位方式=相对定位,侧别=双侧,横向偏移="" | 提示"双侧穴位横向偏移为必填项" |
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AM-010 | 新增相对定位穴位(中心) | 名称=身柱穴,经络=督脉,纵向偏移=3,侧别=中心 | 穴位创建成功 |
+| AM-011 | 新增相对定位穴位(双侧) | 名称=风门穴,纵向偏移=1.5,横向偏移=1.5,侧别=双侧 | 创建左右两个穴位点 |
+| AM-012 | 新增绝对定位穴位 | 定位方式=绝对定位,X=100,Y=200,Z=50 | 穴位创建成功 |
+| AM-013 | 穴位名称必填验证 | 名称留空 | 提示"穴位名称为必填项" |
+| AM-014 | 功效必选验证 | 功效不选 | 提示"至少选择1项功效" |
+| AM-015 | 纵向偏移必填验证 | 定位方式=相对定位,纵向偏移留空 | 提示"纵向偏移为必填项" |
+| AM-016 | 双侧横向偏移必填验证 | 侧别=双侧,横向偏移留空 | 提示"横向偏移为必填项" |
 
 ### 2.3 艾灸手法管理
 
-#### 2.3.1 手法列表
-
-**手法列表显示字段:**
-
-| 字段 | 说明 |
-|------|------|
-| 手法ID | 如:oneclick, gentle, pecking, circular, sparrow |
-| 手法名称 | 一键艾灸、温和灸、雀啄灸、回旋灸、麻雀灸 |
-| 运动模式 | 默认工艺、固定不动、上下移动、圆周运动、点状移动 |
-| 温度范围 | 如:35-50°C |
-| 时间范围 | 如:1-30分钟 |
-| 状态 | 启用/禁用 |
-| 操作 | 编辑/禁用 |
-
-#### 2.3.2 参数验证
-
-**TC-AM-020:温度范围验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-AM-020-01 | 低于最小值 | 最小值=34°C | 提示"温度范围为35-50°C" |
-| TC-AM-020-02 | 等于最小值 | 最小值=35°C | 保存成功 |
-| TC-AM-020-03 | 等于最大值 | 最大值=50°C | 保存成功 |
-| TC-AM-020-04 | 高于最大值 | 最大值=51°C | 提示"温度范围为35-50°C" |
-| TC-AM-020-05 | 最大值小于最小值 | 最小值=45°C,最大值=40°C | 提示"最大值必须大于最小值" |
-
-**TC-AM-021:时间范围验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-AM-021-01 | 低于最小值 | 最小值=0分钟 | 提示"时间范围为1-30分钟" |
-| TC-AM-021-02 | 高于最大值 | 最大值=31分钟 | 提示"时间范围为1-30分钟" |
-
----
-
-## 三、方案管理测试用例(详细版)
-
-### 3.1 方案列表功能
-
-#### 3.1.1 列表显示验证
-
-**方案列表字段:**
-
-| 字段 | 说明 |
-|------|------|
-| 多选框 | 用于批量操作 |
-| 序号 | 列表序号 |
-| 方案ID | 如S001 |
-| 方案名称 | 方案名称 |
-| 模式类型 | 一键艾灸/专业模式/自定义模式/延年圣手 |
-| 功效类型 | 驱寒/祛湿/祛风/化瘀/活血/化痰/养颜/扶阳 |
-| 创作人 | ADMIN/用户姓名/专家姓名 |
-| 步骤数 | 治疗步骤数量 |
-| 状态 | 已发布/草稿/已下架 |
-| 创建时间 | YYYY-MM-DD |
-| 操作 | 查看/编辑/下架/删除 |
-
-#### 3.1.2 创作人显示规则验证
-
-**TC-SM-002:创作人显示-一键艾灸**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-002 |
-| 测试步骤 | 查看一键艾灸方案的创作人字段 |
-| 预期结果 | 显示"ADMIN" |
-| 数据库验证 | `SELECT creator_name FROM scheme WHERE mode='一键艾灸'` |
-
-**TC-SM-003:创作人显示-专业模式**
-
-| 用例ID | TC-SM-003 |
-|--------|------------|
-| 预期结果 | 显示"ADMIN"或管理员账号名 |
-
-**TC-SM-004:创作人显示-自定义模式**
-
-| 用例ID | TC-SM-004 |
-|--------|------------|
-| 前置条件 | 用户张三创建了自定义方案 |
-| 预期结果 | 显示"张三"(创建该方案的用户姓名) |
-
-**TC-SM-005:创作人显示-延年圣手模式**
-
-| 用例ID | TC-SM-005 |
-|--------|------------|
-| 前置条件 | 专家"张专家"发布了方案 |
-| 预期结果 | 显示"张专家"(专家姓名) |
-
----
-
-### 3.2 方案详情查看功能
-
-**TC-SM-012:查看方案详情页面结构**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-012 |
-| 测试步骤 | 点击方案列表的"查看"按钮 |
-| 预期结果 | 页面跳转到详情页,包含以下区域 |
-
-**方案详情页面结构:**
-
-```
-┌─────────────────────────────────────────────┐
-│ 方案基本信息                                  │
-├─────────────────────────────────────────────┤
-│ 方案ID | S001                               │
-│ 方案名称 | 一键艾灸(默认)                   │
-│ 模式类型 | 一键艾灸                          │
-│ 功效类型 | -                                 │
-│ 创作人 | ADMIN                               │
-│ 状态 | 已发布                                │
-│ 创建时间 | 2026-01-01 10:00:00               │
-│ 更新时间 | 2026-03-15 14:30:00              │
-│ 适用症状 | -                                 │
-│ 适用人群 | 不限                               │
-│ 适用年龄 | 1-120岁                           │
-│ 方案描述 | 系统默认一键艾灸方案...            │
-├─────────────────────────────────────────────┤
-│ 治疗步骤列表                                  │
-├─────────────────────────────────────────────┤
-│ 步骤 | 穴位 | 侧别 | 温度 | 时间 | 手法 | 备注│
-│ 1 | 大椎穴 | 中心 | 42°C | 5分钟 | 温和灸 | 基准穴位 │
-│ 2 | 身柱穴 | 中心 | 43°C | 5分钟 | 温和灸 | -       │
-│ ...                                          │
-├─────────────────────────────────────────────┤
-│ 方案统计                                      │
-├─────────────────────────────────────────────┤
-│ 总时长 | 30分钟                              │
-│ 使用人数 | 156人                            │
-│ 平均评分 | 4.8分                             │
-│ 最后使用时间 | 2026-04-01 09:30:00          │
-├─────────────────────────────────────────────┤
-│ 使用记录(最近10条)                          │
-├─────────────────────────────────────────────┤
-│ 序号 | 用户 | 设备 | 使用时间 | 时长 | 评分 │
-│ 1 | 张三 | AJY001 | 04-01 09:00 | 30分钟 | 5分 │
-└─────────────────────────────────────────────┘
-```
-
----
-
-### 3.3 新增方案功能
-
-#### 3.3.1 模板选择
-
-**TC-SM-016:新增方案-选择模板类型**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-016 |
-| 测试步骤 | 1. 点击"新增"按钮<br>2. 显示模板选择界面<br>3. 选择"一键艾灸"模板 |
-| 预期结果 | 进入一键艾灸方案编辑页面,预设督脉5穴 |
-
-**模板类型选择:**
-
-| 模板类型 | 说明 | 预设内容 |
-|----------|------|----------|
-| 一键艾灸 | 系统默认工艺 | 督脉5穴:大椎、身柱、至阳、命门、腰阳关 |
-| 专业模式 | 8种功效选择 | 根据选择的功效预设穴位组合 |
-| 自定义模式 | 自由选择 | 空白穴位列表 |
-| 延年圣手 | 专家方案模板 | 空白方案结构 |
-
----
-
-#### 3.3.2 方案信息填写
-
-**TC-SM-020:方案名称必填验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-SM-020-01 | 留空 | 方案名称="" | 提示"方案名称为必填项" |
-| TC-SM-020-02 | 超过长度 | 方案名称=101个字符 | 提示"方案名称不能超过100个字符" |
-
-**TC-SM-021:专业模式功效必选验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-SM-021-01 | 不选 | 功效类型="" | 提示"功效类型为必填项" |
-| TC-SM-021-02 | 选择 | 功效类型="驱寒" | 继续下一步 |
-
----
-
-#### 3.3.3 治疗步骤配置
-
-**步骤配置字段:**
-
-| 字段 | 类型 | 必填 | 说明 |
-|------|------|------|------|
-| 步骤序号 | number | 是 | 自动生成,可拖拽调整 |
-| 穴位选择 | 下拉搜索 | 是 | 从穴位库选择 |
-| 侧别 | 单选 | 是 | 单侧/双侧/左侧/右侧 |
-| 温度 | number | 是 | 35-50°C |
-| 时间 | number | 是 | 1-30分钟 |
-| 艾灸手法 | 下拉选择 | 是 | 一键艾灸/温和灸/雀啄灸/回旋灸/麻雀灸 |
-| 备注 | string | 否 | 最长100字符 |
-
-**TC-SM-023:温度范围验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-SM-023-01 | 低于最小值 | 温度=34°C | 提示"温度范围为35-50°C" |
-| TC-SM-023-02 | 最低值 | 温度=35°C | 保存成功 |
-| TC-SM-023-03 | 最高值 | 温度=50°C | 保存成功 |
-| TC-SM-023-04 | 高于最大值 | 温度=51°C | 提示"温度范围为35-50°C" |
-
-**TC-SM-024:时间范围验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-SM-024-01 | 低于最小值 | 时间=0分钟 | 提示"时间范围为1-30分钟" |
-| TC-SM-024-02 | 高于最大值 | 时间=31分钟 | 提示"时间范围为1-30分钟" |
-
-**TC-SM-025:总时长限制验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-025 |
-| 测试步骤 | 添加多个步骤,所有步骤时间总和超过60分钟 |
-| 预期结果 | 提示"方案总时长不能超过60分钟" |
-| 计算方式 | sum(每个步骤的时间) <= 60分钟 |
-
----
-
-### 3.4 方案编辑功能
-
-**TC-SM-029:编辑草稿方案**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-029 |
-| 测试步骤 | 1. 选择状态为"草稿"的方案<br>2. 点击"编辑"<br>3. 修改方案名称<br>4. 保存 |
-| 预期结果 | 1. 方案信息更新<br>2. 更新时间字段更新 |
-
-**TC-SM-030:编辑已发布方案**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-030 |
-| 测试步骤 | 1. 选择状态为"已发布"的方案<br>2. 点击"编辑"<br>3. 修改温度参数<br>4. 保存 |
-| 预期结果 | 1. 方案更新成功<br>2. 状态保持"已发布"(如需重新发布会提示) |
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AM-020 | 查看手法列表 | 进入手法管理页面 | 显示5种手法:一键艾灸、温和灸、雀啄灸、回旋灸、麻雀灸 |
+| AM-021 | 温度范围验证 | 最小值=34°C | 提示"温度范围为35-50°C" |
+| AM-022 | 时间范围验证 | 最大值=31分钟 | 提示"时间范围为1-30分钟" |
+| AM-023 | 禁用手法 | 点击"禁用" | 手法状态变为"禁用" |
+
+---
+
+## 三、方案管理
+
+### 3.1 方案列表
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SM-001 | 查看方案列表 | 进入方案管理页面 | 显示方案列表,包含ID、名称、模式、功效、创作人、步骤数、状态 |
+| SM-002 | 创作人显示-一键艾灸 | 查看一键艾灸方案 | 创作人显示"ADMIN" |
+| SM-003 | 创作人显示-专业模式 | 查看专业模式方案 | 创作人显示"ADMIN"或管理员名 |
+| SM-004 | 创作人显示-自定义模式 | 查看自定义方案 | 创作人显示用户姓名 |
+| SM-005 | 创作人显示-延年圣手 | 查看专家方案 | 创作人显示专家姓名 |
+| SM-006 | 按方案名称搜索 | 名称="祛湿" | 显示包含"祛湿"的方案 |
+| SM-007 | 按模式类型筛选 | 模式="专业模式" | 只显示专业模式方案 |
+| SM-008 | 按功效类型筛选 | 功效="驱寒" | 只显示驱寒功效方案 |
+| SM-009 | 按创作人搜索 | 创作人="ADMIN" | 显示ADMIN创建的方案 |
+| SM-010 | 按状态筛选 | 状态="草稿" | 只显示草稿状态的方案 |
+
+### 3.2 方案详情查看
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SM-020 | 查看方案详情 | 点击"查看"按钮 | 显示方案基本信息、治疗步骤、统计信息、使用记录 |
+
+### 3.3 新增方案
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SM-030 | 新增一键艾灸方案 | 选择一键艾灸模板,填写方案名称 | 方案创建成功,预设督脉5穴 |
+| SM-031 | 新增专业模式方案 | 选择专业模式,选择功效"驱寒" | 方案创建成功,预设穴位组合 |
+| SM-032 | 新增自定义模式方案 | 选择自定义模式,自由选择穴位 | 方案创建成功 |
+| SM-033 | 新增延年圣手方案 | 选择延年圣手模板,填写专家信息 | 方案创建成功 |
+| SM-034 | 方案名称必填验证 | 方案名称留空 | 提示"方案名称为必填项" |
+| SM-035 | 功效类型必填验证 | 模式=专业模式,功效类型不选 | 提示"功效类型为必填项" |
+| SM-036 | 适用症状必选验证 | 适用症状不选 | 提示"至少选择1项适用症状" |
+| SM-037 | 温度范围验证 | 温度=34°C | 提示"温度范围为35-50°C" |
+| SM-038 | 时间范围验证 | 时间=0分钟 | 提示"时间范围为1-30分钟" |
+| SM-039 | 总时长限制验证 | 步骤总时长>60分钟 | 提示"总时长不能超过60分钟" |
+| SM-040 | 至少1个步骤验证 | 不添加治疗步骤 | 提示"至少需要1个治疗步骤" |
+| SM-041 | 保存为草稿 | 填写部分信息,点击"保存为草稿" | 方案状态为"草稿" |
+| SM-042 | 发布方案 | 填写完整信息,点击"发布方案" | 方案状态为"已发布" |
+
+### 3.4 编辑方案
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SM-050 | 编辑草稿方案 | 修改方案信息 | 方案更新成功 |
+| SM-051 | 编辑已发布方案 | 修改信息 | 方案更新成功 |
+| SM-052 | 添加治疗步骤 | 点击"+ 添加步骤" | 新步骤添加成功 |
+| SM-053 | 删除治疗步骤 | 点击步骤的"删除" | 步骤删除成功 |
+| SM-054 | 至少保留1个步骤 | 已有1个步骤,点击删除 | 提示"至少保留1个步骤" |
 
 ### 3.5 方案状态操作
 
-**TC-SM-036:下架方案**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-SM-036 |
-| 测试步骤 | 1. 选择"已发布"状态的方案<br>2. 点击"下架"按钮<br>3. 确认 |
-| 预期结果 | 1. 方案状态变为"已下架"<br>2. 用户APP端不可见该方案 |
-| 数据库验证 | `SELECT status FROM scheme WHERE id='S001'` 返回"已下架" |
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SM-060 | 下架方案 | 点击"下架",确认 | 方案状态变为"已下架" |
+| SM-061 | 批量发布草稿 | 勾选多个草稿,点击"批量发布" | 所有选中方案状态变为"已发布" |
+| SM-062 | 批量下架 | 勾选多个已发布方案,点击"批量下架" | 所有选中方案状态变为"已下架" |
+| SM-063 | 批量删除草稿 | 勾选多个草稿,点击"批量删除" | 选中草稿删除成功 |
 
 ---
 
-## 四、设备管理测试用例(详细版)
-
-### 4.1 设备列表功能
+## 四、设备管理
 
-**TC-DM-001:设备列表显示字段**
+### 4.1 设备列表
 
-| 字段 | 说明 |
-|------|------|
-| 设备编号 | 主键,如AJY001 |
-| 设备名称 | 如艾灸椅-001 |
-| 设备型号 | AJY-2026/AJY-2025 |
-| 绑定用户数 | 数字 |
-| 绑定用户列表 | 显示用户名,悬停查看完整列表 |
-| 在线状态 | 在线/离线(实时更新) |
-| 固件版本 | 如v1.2.0 |
-| 最后在线时间 | YYYY-MM-DD HH:mm:ss |
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| DM-001 | 查看设备列表 | 进入设备管理页面 | 显示设备列表,包含编号、名称、型号、绑定用户数、在线状态、固件版本 |
+| DM-002 | 按设备编号搜索 | 编号="AJY001" | 显示该设备 |
+| DM-003 | 按设备名称搜索 | 名称="艾灸椅" | 显示匹配的设备 |
+| DM-004 | 按绑定用户搜索 | 用户="张三" | 显示绑定该用户的设备 |
+| DM-005 | 按在线状态筛选 | 状态="在线" | 只显示在线设备 |
 
-### 4.2 新增设备功能
+### 4.2 新增设备
 
-**TC-DM-007:成功新增设备**
-
-| 输入字段 | 测试数据 |
-|----------|----------|
-| 设备编号 | AJY003 |
-| 设备名称 | 艾灸椅-003 |
-| 设备型号 | AJY-2026 |
-| 设备序列号 | SN-AJY-003-20260315 |
-| 固件版本 | v1.2.0 |
-| 备注 | 测试设备 |
-
-**TC-DM-009:设备编号唯一性验证**
-
-| 用例ID | 测试场景 | 输入 | 预期结果 |
-|--------|----------|------|----------|
-| TC-DM-009-01 | 重复编号 | 设备编号="AJY001"(已存在) | 提示"设备编号已存在" |
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| DM-010 | 成功新增设备 | 编号=AJY003,名称=艾灸椅-003,型号=AJY-2026 | 设备创建成功 |
+| DM-011 | 设备编号必填验证 | 编号留空 | 提示"设备编号为必填项" |
+| DM-012 | 设备编号唯一性验证 | 编号="AJY001"(已存在) | 提示"设备编号已存在" |
 
 ### 4.3 设备用户管理
 
-**TC-DM-015:设备用户列表字段**
-
-| 字段 | 说明 |
-|------|------|
-| 用户ID | 如U001 |
-| 用户姓名 | 如张三 |
-| 手机号 | 138****1234 |
-| 绑定时间 | YYYY-MM-DD HH:mm:ss |
-| 是否主用户 | 是/否 |
-| 操作 | 设为主用户/解绑 |
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| DM-020 | 查看设备绑定用户 | 点击"用户管理" | 显示绑定该设备的用户列表 |
+| DM-021 | 添加用户到设备 | 选择用户,点击确定 | 用户绑定成功 |
+| DM-022 | 设置主用户 | 点击某用户的"设为主用户" | 该用户设为主用户 |
+| DM-023 | 解绑用户 | 点击"解绑",确认 | 用户与设备解除绑定 |
 
 ---
 
-## 五、系统管理测试用例(详细版)
+## 五、系统管理
 
 ### 5.1 管理员管理
 
-**TC-SY-001:管理员列表字段**
-
-| 字段 | 说明 |
-|------|------|
-| 管理员ID | 如A001 |
-| 用户名 | 登录账号 |
-| 姓名 | 真实姓名 |
-| 角色 | 超级管理员/运营人员/只读用户 |
-| 状态 | 启用/禁用 |
-| 最后登录时间 | YYYY-MM-DD HH:mm:ss |
-| 操作 | 编辑/禁用 |
-
-**TC-SY-002:新增管理员**
-
-| 输入字段 | 测试数据 |
-|----------|----------|
-| 用户名 | testadmin |
-| 密码 | Test123456 |
-| 姓名 | 测试管理员 |
-| 角色 | 运营人员 |
-| 状态 | 启用 |
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SY-001 | 查看管理员列表 | 进入管理员管理页面 | 显示管理员列表 |
+| SY-002 | 新增管理员 | 用户名=testadmin,密码=Test123456,姓名=测试管理员 | 管理员创建成功 |
+| SY-003 | 用户名唯一性验证 | 用户名="admin"(已存在) | 提示"用户名已存在" |
+| SY-004 | 密码格式验证 | 密码="123" | 提示"密码需8-20字符,含字母和数字" |
+| SY-005 | 禁用管理员 | 点击"禁用" | 状态变为"禁用" |
+| SY-006 | 启用管理员 | 点击"启用" | 状态变为"启用" |
 
 ### 5.2 操作日志
 
-**TC-SY-008:操作日志字段**
-
-| 字段 | 说明 |
-|------|------|
-| 序号 | 日志序号 |
-| 操作人 | 管理员姓名 |
-| 操作类型 | 新增/编辑/删除/导入/导出/登录 |
-| 操作模块 | 用户管理/穴位管理/方案管理/设备管理/系统管理 |
-| 操作内容 | 详细操作描述 |
-| IP地址 | 客户端IP |
-| 操作时间 | YYYY-MM-DD HH:mm:ss |
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| SY-010 | 查看操作日志 | 进入操作日志页面 | 显示操作日志列表 |
+| SY-011 | 按操作人筛选 | 选择"张三" | 只显示该操作人的日志 |
+| SY-012 | 按操作类型筛选 | 选择"新增" | 只显示新增类型日志 |
+| SY-013 | 按时间范围筛选 | 设置日期范围 | 显示该时间范围内的日志 |
+| SY-014 | 导出日志 | 点击"导出" | 下载Excel文件 |
 
 ---
 
-## 六、核心算法测试用例(详细版)
+## 六、核心算法
 
 ### 6.1 指寸估算算法
 
-#### 6.1.1 边界值测试
-
-**TC-AL-001:指寸估算-男性标准体型**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AL-001 |
-| 输入 | 肩宽=42cm,身长=85cm,性别=男 |
-| 算法 | 男性:肩宽权重0.6,身长权重0.4 |
-| 预期输出 | cun1≈2.2cm,误差范围±0.1cm |
-| 计算过程 | (42/42×0.6 + 85/85×0.4) × 2.2 = 2.2cm |
-
-**TC-AL-002:指寸估算-女性标准体型**
-
-| 输入 | 肩宽=36cm,身长=78cm,性别=女 |
-|------|------|
-| 预期输出 | cun1≈1.9cm,误差范围±0.1cm |
-
-#### 6.1.2 边界值测试
-
-| 用例ID | 输入 | 预期结果 |
-|--------|------|----------|
-| TC-AL-003 | 男性肩宽=36(最小),身长=75(最小) | cun1≈1.88cm |
-| TC-AL-004 | 男性肩宽=52(最大),身长=95(最大) | cun1≈2.54cm |
-| TC-AL-005 | 女性肩宽=32(最小),身长=70(最小) | cun1≈1.54cm |
-| TC-AL-006 | 女性肩宽=46(最大),身长=88(最大) | cun1≈2.26cm |
-
----
-
-### 6.2 穴位对照表生成算法
-
-**TC-AL-007:大椎穴坐标验证**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AL-007 |
-| 验证点 | 大椎穴作为基准点,坐标必须为(0,0) |
-| 验证SQL | `SELECT offset_x, offset_y FROM acupoint_table WHERE acupoint_id='dazhui'` |
-
-**TC-AL-008:督脉穴位验证**
-
-| 验证点 | 预期结果 |
-|--------|----------|
-| 督脉穴位X坐标 | 必须为0(只有纵向偏移) |
-| 侧别 | 中心 |
-
-**TC-AL-009:双侧穴位偏移验证**
-
-| 验证点 | 预期结果 |
-|--------|----------|
-| 左侧穴位X坐标 | 负值(如:-3.3cm) |
-| 右侧穴位X坐标 | 正值(如:3.3cm) |
-
----
-
-### 6.3 数据验证算法
-
-**TC-AL-010:数值范围验证-男性肩宽**
-
-| 输入值 | 验证结果 | 提示信息 |
-|--------|----------|----------|
-| 35 | 不通过 | 男性肩宽范围为36-52cm |
-| 36 | 通过 | - |
-| 44 | 通过 | - |
-| 52 | 通过 | - |
-| 53 | 不通过 | 男性肩宽范围为36-52cm |
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AL-001 | 男性标准体型估算 | 肩宽=42cm,身长=85cm,性别=男 | cun1≈2.2cm |
+| AL-002 | 女性标准体型估算 | 肩宽=36cm,身长=78cm,性别=女 | cun1≈1.9cm |
+| AL-003 | 男性大体型估算 | 肩宽=52cm,身长=95cm | cun1≈2.54cm |
+| AL-004 | 男性小体型估算 | 肩宽=36cm,身长=75cm | cun1≈1.88cm |
+| AL-005 | 女性大体型估算 | 肩宽=46cm,身长=88cm | cun1≈2.26cm |
+| AL-006 | 女性小体型估算 | 肩宽=32cm,身长=70cm | cun1≈1.54cm |
+| AL-007 | 有指寸不估算 | 提供指寸数据 | 使用实际指寸,不估算 |
+
+### 6.2 穴位对照表生成
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AL-010 | 生成12个穴位 | 完整体型数据 | 生成23个点(含双侧) |
+| AL-011 | 大椎穴为原点 | 任何数据 | 大椎穴坐标(0,0) |
+| AL-012 | 督脉只有纵向偏移 | 督脉穴位 | X坐标=0 |
+| AL-013 | 双侧穴位横向偏移 | 双侧穴位 | 左X负,右X正 |
+
+### 6.3 数据验证
+
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AL-020 | 男性肩宽边界-通过 | 肩宽=36 | 验证通过 |
+| AL-021 | 男性肩宽边界-不通过 | 肩宽=35 | 验证失败,提示范围36-52cm |
+| AL-022 | 女性身长边界-通过 | 身长=88 | 验证通过 |
+| AL-023 | 女性身长边界-不通过 | 身长=89 | 验证失败,提示范围70-88cm |
+| AL-024 | 指寸范围验证 | 一寸=1.2(女) | 验证失败,提示范围1.3-2.4cm |
 
 ### 6.4 置信度计算
 
-**TC-AL-014:置信度计算-不同数据完整度**
-
-| 数据完整度 | 置信度 | 精度 | 说明 |
-|------------|--------|------|------|
-| 仅肩宽+身长 | 50% | ±5cm | 估算指寸 |
-| + 一寸数据 | 65% | ±4cm | 部分指寸 |
-| + 一寸+1.5寸 | 80% | ±3cm | 较多指寸 |
-| 完整指寸数据 | 95% | ±2cm | 精确计算 |
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AL-030 | 仅肩宽身长 | 肩宽+身长 | 置信度50%,精度±5cm |
+| AL-031 | 部分指寸 | 肩宽+身长+一寸 | 置信度65%,精度±4cm |
+| AL-032 | 完整指寸 | 肩宽+身长+一寸+1.5寸+三寸 | 置信度95%,精度±2cm |
 
 ---
 
-## 七、接口测试用例(详细版)
+## 七、接口测试
 
 ### 7.1 用户管理接口
 
-#### 7.1.1 获取用户列表
-
-**接口信息**
-
-| 项目 | 内容 |
-|------|------|
-| 接口路径 | GET /api/users |
-| 请求方法 | GET |
-| 请求头 | Content-Type: application/json<br>Authorization: Bearer {token} |
-
-**请求参数**
-
-| 参数名 | 类型 | 必填 | 说明 | 示例值 |
-|--------|------|------|------|--------|
-| page | int | 否 | 页码,默认1 | 1 |
-| pageSize | int | 否 | 每页数量,默认10 | 10 |
-| name | string | 否 | 姓名模糊搜索 | 张 |
-| phone | string | 否 | 手机号模糊搜索 | 138 |
-| deviceNo | string | 否 | 设备编号搜索 | AJY001 |
-| gender | string | 否 | 性别筛选 | male/female |
-| acupointStatus | string | 否 | 穴位表状态 | generated/not_generated |
-
-**响应数据结构**
-
-```json
-{
-  "code": 200,
-  "message": "success",
-  "data": {
-    "list": [
-      {
-        "id": "U001",
-        "name": "张三",
-        "gender": "male",
-        "age": 35,
-        "phone": "13800138000",
-        "bodyData": {
-          "shoulderWidth": 42,
-          "bodyLength": 85,
-          "fingerWidth": {
-            "cun1": 2.2,
-            "cun1_5": 3.3,
-            "cun3": 6.5
-          }
-        },
-        "devices": [
-          {
-            "deviceId": "AJY001",
-            "deviceName": "艾灸椅-001",
-            "isPrimary": true
-          }
-        ],
-        "acupointStatus": "generated",
-        "createdAt": "2026-03-15T10:00:00Z"
-      }
-    ],
-    "total": 100,
-    "page": 1,
-    "pageSize": 10
-  }
-}
-```
-
-**TC-API-001:获取用户列表-成功场景**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-API-001 |
-| 测试步骤 | 1. 构造GET请求,添加Authorization头<br>2. 发送请求<br>3. 验证响应状态码和数据结构 |
-| 预期结果 | 1. 状态码200<br>2. 返回用户列表数据结构正确 |
-
-**TC-API-002:获取用户列表-分页参数**
-
-| 用例ID | 输入 | 预期结果 |
-|--------|------|----------|
-| TC-API-002-01 | page=1, pageSize=10 | 返回第1页,每页10条 |
-| TC-API-002-02 | page=2, pageSize=20 | 返回第2页,每页20条 |
-| TC-API-002-03 | page=999(超出总页数) | 返回空列表 |
-
-**TC-API-003:获取用户列表-筛选参数组合**
-
-| 用例ID | 输入 | 预期结果 |
-|--------|------|----------|
-| TC-API-003-01 | name=张&gender=male | 返回名称包含"张"且性别为"男"的用户 |
-| TC-API-003-02 | deviceNo=AJY001 | 返回绑定设备AJY001的用户 |
-
----
-
-#### 7.1.2 获取用户详情
-
-**接口信息**
-
-| 项目 | 内容 |
-|------|------|
-| 接口路径 | GET /api/users/{userId} |
-| 请求方法 | GET |
-
-**路径参数**
-
-| 参数名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| userId | string | 是 | 用户ID |
-
-**响应数据结构**
-
-```json
-{
-  "code": 200,
-  "message": "success",
-  "data": {
-    "id": "U001",
-    "name": "张三",
-    "gender": "male",
-    "age": 35,
-    "phone": "13800138000",
-    "bodyData": {
-      "shoulderWidth": 42,
-      "bodyLength": 85,
-      "fingerWidth": {
-        "cun1": 2.2,
-        "cun1_5": 3.3,
-        "cun3": 6.5
-      }
-    },
-    "devices": [...],
-    "acupointTable": [
-      {
-        "acupointId": "dazhui",
-        "name": "大椎穴",
-        "side": "center",
-        "offsetX": 0,
-        "offsetY": 0
-      }
-    ],
-    "createdAt": "2026-03-15T10:00:00Z",
-    "updatedAt": "2026-03-15T10:00:00Z"
-  }
-}
-```
-
----
-
-#### 7.1.3 新增用户
-
-**接口信息**
-
-| 项目 | 内容 |
-|------|------|
-| 接口路径 | POST /api/users |
-| 请求方法 | POST |
-| Content-Type | application/json |
-
-**请求body**
-
-```json
-{
-  "name": "张三",
-  "gender": "male",
-  "age": 35,
-  "phone": "13800138000",
-  "bodyData": {
-    "shoulderWidth": 42,
-    "bodyLength": 85,
-    "fingerWidth": {
-      "cun1": 2.2,
-      "cun1_5": 3.3,
-      "cun3": 6.5
-    }
-  }
-}
-```
-
-**响应数据结构**
-
-```json
-{
-  "code": 201,
-  "message": "用户创建成功",
-  "data": {
-    "id": "U001",
-    "name": "张三",
-    "gender": "male",
-    "age": 35,
-    "phone": "13800138000",
-    "bodyData": {...},
-    "createdAt": "2026-04-03T10:00:00Z"
-  }
-}
-```
-
-**错误响应示例**
-
-| 状态码 | 错误码 | 错误信息 |
-|--------|--------|----------|
-| 400 | INVALID_PHONE | 手机号格式错误 |
-| 400 | PHONE_EXISTS | 手机号已存在 |
-| 400 | VALIDATION_ERROR | 字段验证失败,详细见errors |
-| 401 | UNAUTHORIZED | 未授权 |
-| 403 | FORBIDDEN | 无权限 |
-
----
-
-#### 7.1.4 生成穴位坐标
-
-**接口信息**
-
-| 项目 | 内容 |
-|------|------|
-| 接口路径 | POST /api/users/{userId}/acupoint-coordinates |
-| 请求方法 | POST |
-
-**响应数据结构**
-
-```json
-{
-  "code": 200,
-  "message": "success",
-  "data": {
-    "userId": "U001",
-    "bodyData": {...},
-    "fingerWidthUsed": {
-      "cun1": 2.2,
-      "cun1_5": 3.3,
-      "cun3": 6.5
-    },
-    "acupoints": [
-      {
-        "acupointId": "dazhui",
-        "name": "大椎穴",
-        "side": "center",
-        "offsetX": 0,
-        "offsetY": 0,
-        "offsetInCun": 0,
-        "cunType": "cun1"
-      }
-    ],
-    "confidence": 95,
-    "accuracy": "±2cm",
-    "generatedAt": "2026-04-03T10:00:00Z"
-  }
-}
-```
-
----
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| API-001 | 获取用户列表 | GET /api/users?page=1&pageSize=10 | 状态码200,返回用户列表 |
+| API-002 | 获取用户详情 | GET /api/users/U001 | 状态码200,返回用户详情 |
+| API-003 | 新增用户 | POST /api/users(body含用户信息) | 状态码201,返回创建的用户 |
+| API-004 | 更新用户 | PUT /api/users/U001 | 状态码200,返回更新后的用户 |
+| API-005 | 生成穴位坐标 | POST /api/users/U001/acupoint-coordinates | 状态码200,返回穴位坐标数据 |
 
 ### 7.2 方案管理接口
 
-#### 7.2.1 获取方案列表
-
-**接口信息**
-
-| 项目 | 内容 |
-|------|------|
-| 接口路径 | GET /api/schemes |
-| 请求方法 | GET |
-
-**请求参数**
-
-| 参数名 | 类型 | 必填 | 说明 |
-|--------|------|------|------|
-| page | int | 否 | 页码 |
-| pageSize | int | 否 | 每页数量 |
-| mode | string | 否 | 模式类型筛选 |
-| efficacyType | string | 否 | 功效类型筛选 |
-| creator | string | 否 | 创作人筛选 |
-| status | string | 否 | 状态筛选 |
-
-**响应数据结构**
-
-```json
-{
-  "code": 200,
-  "message": "success",
-  "data": {
-    "list": [
-      {
-        "id": "S001",
-        "schemeName": "一键艾灸(默认)",
-        "mode": "一键艾灸",
-        "efficacyType": null,
-        "creatorType": "admin",
-        "creatorName": "ADMIN",
-        "stepsCount": 5,
-        "status": "published",
-        "createdAt": "2026-01-01T00:00:00Z"
-      }
-    ],
-    "total": 50,
-    "page": 1,
-    "pageSize": 10
-  }
-}
-```
-
----
-
-#### 7.2.2 获取方案详情
-
-**接口路径** | GET /api/schemes/{schemeId} |
-
-**响应数据结构**
-
-```json
-{
-  "code": 200,
-  "message": "success",
-  "data": {
-    "id": "S001",
-    "schemeName": "一键艾灸(默认)",
-    "mode": "一键艾灸",
-    "efficacyType": null,
-    "creatorType": "admin",
-    "creatorName": "ADMIN",
-    "symptoms": [],
-    "targetGender": "all",
-    "ageRange": {
-      "min": 1,
-      "max": 120
-    },
-    "description": "系统默认一键艾灸方案...",
-    "steps": [
-      {
-        "stepOrder": 1,
-        "acupointId": "dazhui",
-        "acupointName": "大椎穴",
-        "side": "center",
-        "temperature": 42,
-        "duration": 300,
-        "techniqueId": "gentle",
-        "techniqueName": "温和灸",
-        "remark": "基准穴位"
-      }
-    ],
-    "status": "published",
-    "statistics": {
-      "totalDuration": 1800,
-      "usageCount": 156,
-      "averageRating": 4.8,
-      "lastUsedAt": "2026-04-01T09:30:00Z"
-    },
-    "createdAt": "2026-01-01T00:00:00Z",
-    "updatedAt": "2026-03-15T14:30:00Z"
-  }
-}
-```
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| API-010 | 获取方案列表 | GET /api/schemes | 状态码200,返回方案列表 |
+| API-011 | 获取方案详情 | GET /api/schemes/S001 | 状态码200,返回方案详情含步骤 |
+| API-012 | 创建方案 | POST /api/schemes(body含方案信息) | 状态码201,返回创建的方案 |
+| API-013 | 发布方案 | POST /api/schemes/S001/publish | 状态码200,方案状态=已发布 |
+| API-014 | 同步圣手方案 | POST /api/users/U001/devices/AJY001/expert-sync | 状态码200,同步8个方案到设备 |
 
 ---
 
-#### 7.2.3 创建方案
-
-**接口路径** | POST /api/schemes |
-
-**请求body**
-
-```json
-{
-  "schemeName": "春季祛湿方案",
-  "mode": "专业模式",
-  "efficacyType": "祛湿",
-  "symptoms": ["身体困重", "大便黏腻"],
-  "targetGender": "all",
-  "ageRange": {
-    "min": 18,
-    "max": 60
-  },
-  "description": "针对湿气重的人群设计的祛湿方案",
-  "steps": [
-    {
-      "stepOrder": 1,
-      "acupointId": "dazhui",
-      "acupointName": "大椎穴",
-      "side": "center",
-      "temperature": 45,
-      "duration": 480,
-      "techniqueId": "gentle",
-      "techniqueName": "温和灸"
-    }
-  ]
-}
-```
+## 八、数据库测试
 
----
-
-#### 7.2.4 发布方案
-
-**接口路径** | POST /api/schemes/{schemeId}/publish |
-
-**响应**
-
-```json
-{
-  "code": 200,
-  "message": "方案发布成功",
-  "data": {
-    "id": "S001",
-    "status": "published",
-    "publishedAt": "2026-04-03T10:00:00Z"
-  }
-}
-```
-
----
-
-#### 7.2.5 同步圣手方案到设备
-
-**接口路径** | POST /api/users/{userId}/devices/{deviceId}/expert-sync |
-
-**响应**
-
-```json
-{
-  "code": 200,
-  "message": "同步成功",
-  "data": {
-    "userId": "U001",
-    "deviceId": "AJY001",
-    "syncedSchemes": [
-      {
-        "slot": 1,
-        "schemeId": "S001",
-        "schemeName": "张专家驱寒方案",
-        "syncedAt": "2026-04-03T10:00:00Z"
-      }
-    ],
-    "totalSynced": 8
-  }
-}
-```
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| DB-001 | 唯一性约束-手机号 | 插入重复手机号 | 报错:手机号已存在 |
+| DB-002 | 唯一性约束-设备编号 | 插入重复设备编号 | 报错:设备编号已存在 |
+| DB-003 | 主设备唯一性 | 同一用户设置两个主设备 | 自动解除原主设备主属性 |
+| DB-004 | 逻辑删除 | 删除用户 | deleted字段变为1 |
+| DB-005 | 外键级联 | 删除用户下的设备绑定 | 绑定关系解除 |
+| DB-006 | 数据类型验证 | 插入超出范围的肩宽 | 报错:数据超出范围 |
 
 ---
 
-## 八、数据库测试用例
-
-### 8.1 用户表测试
-
-**表名:user**
-
-| 字段名 | 类型 | 约束 | 测试验证 |
-|--------|------|------|----------|
-| id | varchar(32) | PK, 自增 | 唯一性验证 |
-| name | varchar(50) | NOT NULL | 长度验证 |
-| gender | enum('male','female') | NOT NULL | 枚举值验证 |
-| age | int | NOT NULL, 1-120 | 范围验证 |
-| phone | varchar(11) | NOT NULL, UNIQUE | 格式+唯一性 |
-| shoulder_width | decimal(5,1) | NOT NULL | 范围验证 |
-| body_length | decimal(5,1) | NOT NULL | 范围验证 |
-| cun1 | decimal(3,1) | NULL | 范围验证 |
-| cun1_5 | decimal(3,1) | NULL | 范围验证 |
-| cun3 | decimal(3,1) | NULL | 范围验证 |
-| deleted | tinyint | DEFAULT 0 | 逻辑删除 |
-| created_at | datetime | DEFAULT CURRENT_TIMESTAMP | 时间戳 |
-| updated_at | datetime | ON UPDATE CURRENT_TIMESTAMP | 时间戳 |
-
-### 8.2 设备表测试
-
-**表名:device**
-
-| 字段名 | 类型 | 约束 | 测试验证 |
-|--------|------|------|----------|
-| device_id | varchar(32) | PK | 设备编号唯一性 |
-| device_name | varchar(100) | NOT NULL | 长度验证 |
-| model | varchar(32) | NOT NULL | 枚举值验证 |
-| serial_number | varchar(50) | UNIQUE | 唯一性验证 |
-| firmware_version | varchar(20) | NOT NULL | 格式验证 |
-| status | enum('online','offline') | DEFAULT 'offline' | 状态验证 |
-| last_online_at | datetime | NULL | 时间更新 |
-
-### 8.3 设备用户绑定表测试
-
-**表名:device_binding**
-
-| 字段名 | 类型 | 约束 | 测试验证 |
-|--------|------|------|----------|
-| id | int | PK, AUTO_INCREMENT | - |
-| user_id | varchar(32) | NOT NULL, FK | 外键验证 |
-| device_id | varchar(32) | NOT NULL, FK | 外键验证 |
-| is_primary | tinyint | DEFAULT 0 | 主设备唯一性 |
-| bound_at | datetime | DEFAULT CURRENT_TIMESTAMP | 时间戳 |
-| deleted | tinyint | DEFAULT 0 | 逻辑删除 |
-
-**TC-DB-001:一个用户只能有一个主设备**
+## 九、验收测试
 
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-DB-001 |
-| 测试步骤 | 1. 用户U001已绑定设备AJY001为主设备<br>2. 设置AJY002为主设备 |
-| 预期结果 | AJY001自动变为非主设备,AJY002变为主设备 |
-| SQL验证 | `SELECT is_primary FROM device_binding WHERE user_id='U001'` 返回1条is_primary=1 |
+| 测试编号 | 功能点 | 输入 | 输出 |
+|----------|--------|------|------|
+| AT-001 | 穴位定位精度 | 完整指寸数据,生成坐标 | 误差≤2cm |
+| AT-002 | 穴位库动态扩展 | 新增穴位,在方案中使用 | 穴位可正常使用 |
+| AT-003 | 8种专业模式 | 创建8种功效方案 | 均可创建和发布 |
+| AT-004 | 工艺语言生成 | 创建专家方案 | 生成设备可执行的工艺语言 |
+| AT-005 | API响应时间 | 调用核心API 100次 | 平均响应时间<200ms |
+| AT-006 | 症状推荐覆盖率 | 测试常见症状 | 推荐覆盖率≥80% |
 
 ---
 
-## 九、验收测试用例(详细版)
-
-### 9.1 功能验收
-
-**TC-AT-001:穴位定位精度测试**
+## 测试用例统计
 
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AT-001 |
-| 测试目的 | 验证指寸数据完整时,穴位定位精度≤2cm |
-| 测试步骤 | 1. 准备测试用户,指寸数据完整<br>2. 执行穴位坐标生成<br>3. 使用测量工具测量实际穴位位置<br>4. 对比计算值与实测值 |
-| 验收标准 | 误差≤2cm |
-| 测试数据 | 肩宽=42cm,身长=85cm,一寸=2.2cm,1.5寸=3.3cm,三寸=6.5cm |
-
-**TC-AT-005:API响应时间测试**
-
-| 项目 | 内容 |
-|------|------|
-| 用例ID | TC-AT-005 |
-| 测试步骤 | 1. 使用性能测试工具(如JMeter/Postman)<br>2. 连续调用核心API 100次<br>3. 记录每次响应时间<br>4. 计算平均响应时间 |
-| 验收标准 | 平均响应时间<200ms |
-| 测试接口 | /api/users, /api/schemes, /api/acupoints |
-
----
-
-## 附录
-
-### 附表1.1:用户管理测试数据
-
-| user_id | name | gender | age | phone | device_no | shoulder_width | body_length | acupoint_status | created_at |
-|---------|------|--------|-----|-------|-----------|----------------|--------------|-----------------|------------|
-| U001 | 张三 | male | 35 | 13800138000 | AJY001,AJY002 | 42 | 85 | generated | 2026-03-15 |
-| U002 | 李四 | female | 33 | 13900139000 | AJY001 | 36 | 78 | generated | 2026-03-18 |
-| U003 | 王五 | male | 62 | 13700137000 | - | 40 | 82 | not_generated | 2026-03-20 |
-| U004 | 赵六 | female | 28 | 13600136000 | AJY003 | 34 | 75 | generated | 2026-03-22 |
-
-### 附表1.2:穴位测试数据
-
-| acupoint_id | name | meridian | efficacy | positioning | offset_cun | side | status |
-|-------------|------|----------|----------|-------------|------------|------|--------|
-| dazhui | 大椎穴 | 督脉 | 驱寒,祛湿 | relative | 0 | center | active |
-| shenzhu | 身柱穴 | 督脉 | 止咳平喘,安神 | relative | 3 | center | active |
-| fengmen | 风门穴 | 膀胱经 | 祛风解表 | relative | 1.5 | both | active |
-
-### 附表1.3:方案测试数据
-
-| scheme_id | scheme_name | mode | creator_name | steps_count | status | created_at |
-|-----------|--------------|------|---------------|--------------|--------|------------|
-| S001 | 一键艾灸(默认) | 一键艾灸 | ADMIN | 5 | published | 2026-01-01 |
-| S002 | 春季祛湿方案 | 专业模式 | ADMIN | 4 | published | 2026-03-20 |
-| S003 | 个人调理方案 | 自定义模式 | 张三 | 3 | draft | 2026-03-25 |
-| S004 | 张专家驱寒方案 | 延年圣手 | 张专家 | 5 | published | 2026-03-28 |
-
----
-
-## 测试用例统计(更新版)
-
-| 模块 | P0 | P1 | P2 | 合计 |
-|------|-----|-----|-----|------|
-| 用户管理 | 25 | 15 | 5 | 45 |
-| 穴位管理 | 18 | 10 | 2 | 30 |
-| 方案管理 | 30 | 18 | 5 | 53 |
-| 设备管理 | 15 | 10 | 6 | 31 |
-| 系统管理 | 8 | 8 | 3 | 19 |
-| 核心算法 | 15 | 5 | 0 | 20 |
-| 接口测试 | 12 | 8 | 2 | 22 |
-| 数据库测试 | 5 | 3 | 1 | 9 |
-| 验收测试 | 6 | 4 | 0 | 10 |
-| **合计** | **134** | **81** | **24** | **239** |
-
----
-
-## 测试环境要求
-
-| 环境 | 要求 |
-|------|------|
-| 后端服务 | Spring Boot 2.7+ / Java 17 |
-| 数据库 | MySQL 8.0+ |
-| 缓存 | Redis 6.0+ |
-| API测试工具 | Postman / Apifox |
-| 性能测试 | JMeter |
-| 浏览器 | Chrome 90+, Edge 90+ |
-| 测试数据 | 需准备完整的测试数据集(见附录) |
+| 模块 | 用例数 |
+|------|--------|
+| 用户管理 | 44 |
+| 穴位管理 | 22 |
+| 方案管理 | 34 |
+| 设备管理 | 19 |
+| 系统管理 | 11 |
+| 核心算法 | 20 |
+| 接口测试 | 10 |
+| 数据库测试 | 6 |
+| 验收测试 | 6 |
+| **合计** | **172** |