提交 680aa248 authored 作者: 陈泽健's avatar 陈泽健

feat(test): 实现根据PRD文档自动生成测试用例功能

- 新增PRD解析功能,支持从Markdown文档中提取需求条目
- 实现交互式PRD选择,支持多文档合并生成用例到同一sheet
- 添加需求分类算法,自动识别异常场景、安全鉴权等功能类别
- 实现测试步骤和预期结果的智能生成,基于PRD内容提取
- 支持用例编号前缀和模块名称的灵活配置
- 添加时间戳命名的输出文件生成功能
- 重构服务自检文档,新增Linux shell脚本支持
- 移除手动JSON配置文件依赖,直接从PRD文档生成用例数据
上级 f9cccbd9
[
{
"序号": 1,
"功能模块": "通用模块",
"功能类别": "异常场景",
"用例编号": "TC-001",
"功能描述": "权限组管理接口文档",
"用例等级": "中",
"功能编号": "",
"用例名称": "权限组管理接口文档",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. ## 1. 分页查询权限组; 2. **接口描述**:根据公司编号、权限组名称、启用状态等条件进行分页查询,支持模糊匹配权限组名称,按创建时间倒序排列; 3. **接口描述**:执行物理删除操作,同时级联删除部门关联、角色关联、用户关联表中的数据,使用事务确保删除操作的原子性。基础权限组(is_base=1)不可删除。; 4. ## 7. 查询绑定关系; 5. **接口描述**:查询权限组已绑定的关联对象,支持按类型筛选或返回全部类型; 6. ## 8. 查询用户最终权限",
"JSON": "",
"预期结果": "**请求头**:需要携带有效的 Token 认证; **响应示例**:; **响应示例**(成功):; **响应示例**(包含基础权限组):; > - departmentIds、roleIds、userIds 至少需要传入一种类型(可为空数组); **响应示例**(不传relationType,返回全部):",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 2,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-002",
"功能描述": "**直接绑定**:查询sys_permission_group_user中user_id=用户ID的权限组",
"用例等级": "中",
"功能编号": "1",
"用例名称": "**直接绑定**:查询sys_permission_group_user中user_id=用户ID的权限组",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "**直接绑定**:查询sys_permission_group_user中user_id=用户ID的权限组 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 3,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-003",
"功能描述": "**部门绑定**:查询sys_permission_group_department中department_id=用户所属部门ID的权限组",
"用例等级": "中",
"功能编号": "2",
"用例名称": "**部门绑定**:查询sys_permission_group_department中department_id=用户所属部门ID的权限组",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "**部门绑定**:查询sys_permission_group_department中department_id=用户所属部门ID的权限组 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 4,
"功能模块": "通用模块",
"功能类别": "异常场景",
"用例编号": "TC-004",
"功能描述": "**角色绑定**:查询sys_permission_group_role中role_id=用户所属角色ID的权限组",
"用例等级": "中",
"功能编号": "3",
"用例名称": "**角色绑定**:查询sys_permission_group_role中role_id=用户所属角色ID的权限组",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. | A_SELECT_EMPTY | 查询结果为空 |; 2. *文档生成时间:2026年1月12日*",
"JSON": "",
"预期结果": "**响应示例**:; | 200 | 成功 |; | 值 | 说明 | 对应表 |",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
}
]
\ No newline at end of file
[
{
"序号": 34,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-034",
"功能描述": "自定义权限控制指令实现",
"用例等级": "中",
"功能编号": "",
"用例名称": "自定义权限控制指令实现",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "自定义权限控制指令实现 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 35,
"功能模块": "通用模块",
"功能类别": "功能测试",
"用例编号": "TC-035",
"功能描述": "办公室管理页面地址: `src\\views\\Backend\\MeetingRoom\\OfficeManage\\index.vue`",
"用例等级": "中",
"功能编号": "1",
"用例名称": "办公室管理页面地址: `src\\views\\Backend\\MeetingRoom\\OfficeManage\\index.vue`",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "办公室管理页面地址: `src\\views\\Backend\\MeetingRoom\\OfficeManage\\index.vue` 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 36,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-036",
"功能描述": "自定义权限控制指令地址:`src\\utils\\permission.js`",
"用例等级": "中",
"功能编号": "2",
"用例名称": "自定义权限控制指令地址:`src\\utils\\permission.js`",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "自定义权限控制指令地址:`src\\utils\\permission.js` 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 37,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-037",
"功能描述": "权限数据结构`src\\constant\\permissionList.js`",
"用例等级": "中",
"功能编号": "3",
"用例名称": "权限数据结构`src\\constant\\permissionList.js`",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "权限数据结构`src\\constant\\permissionList.js` 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 38,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-038",
"功能描述": "权限控制指令通过`src\\main.js`挂载成`v-permission`使用",
"用例等级": "中",
"功能编号": "4",
"用例名称": "权限控制指令通过`src\\main.js`挂载成`v-permission`使用",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "权限控制指令通过`src\\main.js`挂载成`v-permission`使用 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 39,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-039",
"功能描述": "实现自定义权限控制指令",
"用例等级": "中",
"功能编号": "1",
"用例名称": "实现自定义权限控制指令",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "实现自定义权限控制指令 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 40,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-040",
"功能描述": "先将权限数据结构存储在localStorage的userPermission中,模拟用户已经获取到当前的拥有权限",
"用例等级": "中",
"功能编号": "1",
"用例名称": "先将权限数据结构存储在localStorage的userPermission中,模拟用户已经获取到当前的拥有权限",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "先将权限数据结构存储在localStorage的userPermission中,模拟用户已经获取到当前的拥有权限 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 41,
"功能模块": "通用模块",
"功能类别": "功能测试",
"用例编号": "TC-041",
"功能描述": "我在办公室管理的页面line:16添加了v-permission=\"'functionType_82.create'\",帮我根据判断实现:如果userPermission的functionType_82.create为1,则显示按钮,并将functionType_82.create作为id赋予给按钮,为0或者不存在则将按钮移出dom",
"用例等级": "中",
"功能编号": "2",
"用例名称": "我在办公室管理的页面line:16添加了v-permission=\"'functionType_82.create'\",帮我根据判断实现:如果userPermission的functionType_82.create为1,则显示按钮,并将functionType_82.create作为id赋予给按钮,为0或者不存在则将按钮移出dom",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "我在办公室管理的页面line:16添加了v-permission=\"'functionType_82.create'\",帮我根据判断实现:如果userPermission的functionType_82.create为1,则显示按钮,并将functionType_82.create作为id赋予给按钮,为0或者不存在则将按钮移出dom 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
},
{
"序号": 42,
"功能模块": "通用模块",
"功能类别": "安全/鉴权",
"用例编号": "TC-042",
"功能描述": "自定义权限控制的生命周期等问题可以参考`E:\\Project\\ubains-unified-platform\\src\\common\\permission.js`",
"用例等级": "中",
"功能编号": "3",
"用例名称": "自定义权限控制的生命周期等问题可以参考`E:\\Project\\ubains-unified-platform\\src\\common\\permission.js`",
"预置条件": "1. 环境已部署; 2. 具备执行权限; 3. 必要依赖/配置已准备",
"操作步骤": "1. 按 PRD 描述执行该功能/流程; 2. 采集相关日志/输出; 3. 记录实际结果",
"JSON": "",
"预期结果": "自定义权限控制的生命周期等问题可以参考`E:\\Project\\ubains-unified-platform\\src\\common\\permission.js` 按 PRD 约定产出正确结果(请补充具体断言点)",
"测试结果": "",
"测试结论": "",
"日志截屏": "",
"备注": ""
}
]
\ No newline at end of file
...@@ -13,14 +13,15 @@ ...@@ -13,14 +13,15 @@
## 🎯 功能实现总览 ## 🎯 功能实现总览
### 服务自检 (`check_server_health.ps1`) ### 服务自检 (`check_server_health.ps1`和`check_server_health.sh`)
脚本路径:E:\GithubData\自动化\ubains-module-test\辅助工具\脚本工具\服务自检\check_server_health.ps1 脚本路径:AuxiliaryTool\ScriptTool\ServiceSelfInspection\check_server_health.ps1
脚本路径:AuxiliaryTool\ScriptTool\ServiceSelfInspection\check_server_health.sh
#### 检测需求 #### 检测需求
##### 1、SSH连接(✅ 已实现): ##### 1、SSH连接(✅ 已实现):
功能描述: 功能描述:
负责与目标服务器建立 SSH 连接,支持多种连接方式,作为所有后续检测和修复操作的基础。 负责与目标服务器建立 SSH 连接,支持多种连接方式,作为所有后续检测和修复操作的基础。(sh脚本不需要做连接!!!)
具体要求: 具体要求:
1)支持两种接入方式: 1)支持两种接入方式:
......
# 根据PRD需求文档生成用例
## 1. 概述
需求文档生成用例,根据PRD需求文档快速生成测试用例,提升测试效率,确保测试覆盖率。
## 2. 需求文档读取
PRD需求文档统一路径为:Docs/开发PRD目录
执行脚本时通过交互型输入需要生成测试用例的PRD文档编号,并且如果是多选时则生成再同一个sheet表中,sheet表的命名为输入的测试用例的名称。
## 3. 需求文档解析
读取开发的PRD文档,解析出各个功能模块及其对应的测试点,重点关注逻辑层面的测试需求。输出测试用例的初步结构。
## 4. 测试用例生成
根据解析出的测试点,再参考测试用例模板,对测试点进行测试用例的生成,生成对应的测试用例,涵盖功能测试、边界测试、异常测试等。生成的用例存放在:AuxiliaryTool/用例生成/用例文件。
生成的测试用例名称通过交互型输入名称后追加时间来命名。
\ No newline at end of file
此差异已折叠。
# 权限管理页面新增开发
## 📋 概述
1. 权限管理页面地址: `src\views\Backend\Admin\PermissionManage\index.vue`
2. 相关API文档地址:`Docs\Api\API_权限组管理接口文档.md`
3. 新增/修改权限组弹窗地址:`src\views\Backend\Admin\PermissionManage\components\AddEditDialog\index.vue`
4. 权限绑定弹窗地址:`src\views\Backend\Admin\PermissionManage\components\BindDialog\index.vue`
5. 自定义权限控制指令v-permission地址:`src\utils\permission.js`
## 🎯 任务
1. ✅ 在权限管理页面遵循`Docs\PRD\_PRD_规范文档_新建页面.md`并标准化初始化页面,在`src\router.js`注册路由
2. ✅ 参考页面`src\views\Backend\Admin\Role\index.vue`的设计在初始化后的权限管理页新增功能
3. ✅ 将权限管理页面的新增/修改权限组弹窗和绑定弹窗分别抽离成组件放置在`src\views\Backend\Admin\PermissionManage\components`中,注意数据的传输,并优化一下样式
4. ✅ 实现权限组添加权限
5. ✅ 在新增/修改权限组弹窗继续实现任务4的要求
6. ✅ 帮我参考API接口文档,实现权限组的增删改查、禁用/启用功能,绑定功能先不实现
7. ✅ 进入权限管理页面时,帮我请求API接口文档的接口`/permissionGroup/getAllPermissions`获取所有配置项,然后将`src\views\Backend\Admin\PermissionManage\components\PermissionConfig\index.vue`的permissionList替换为接口请求到的真实数据
8. ✅ 重构权限绑定弹窗及补充功能实现
9. 数据结构调整
### 权限页面基础功能
1. 实现功能时提供了API接口,但先不进行对接,先在前端用虚拟数据实现并预留操作方法等,等我要接口对接时再进行接口对接
2. 支持模糊搜索,支持基础的增删改查
3. el-table的主要显示字段获取参考相关API文档的"分页查询权限组"接口,显示字段groupName、isEnable、createTime,支持多选,支持分页,操作有修改、删除、绑定
### 权限组添加权限要求
1. 实现功能时提供了API接口,但先不进行对接,先在前端用虚拟数据实现并预留操作方法等,等我要接口对接时再进行接口对接
2. 我在`src\constant\permissionList.js`模拟了权限数据,帮我使用el-checkbox进行显示
3. 文本显示逻辑:在国际化文件中新建permission子集,通过key值匹配显示文本:例如view=i18n文件中的`permission.view`
4. 页面显示:要同时显示名称和勾选框,比如
```json
functionType_82: {
view: 0,
create: 0,
update: 0,
delete: 0,
},
```
要显示为"办公室管理:查看 新增 编辑 删除"
### 重构权限绑定弹窗及补充功能实现要求
1. 弹窗页面重构,当前的设计不符合产品的功能要求,具体功能要求:权限组支持同时绑定多个用户、角色、部门,取消权限配置功能
2. 页面样式自由发挥,符合系统主题即可,优先使用UI/UX Pro Max
3. 参考`@src/views/Backend/Account/User/index.vue:930-984 `实现用户数据请求获取
4. 参考`@src/views/Backend/Account/User/index.vue:986-1010 `实现角色数据的请求获取
5. 参考`@src/views/Backend/Account/User/index.vue:263-273 ``@src/views/Backend/Account/User/index.vue:1055-1068 `实现部门数据的请求获取
6. 根据权限api文档的`/permissionGroup/bindRelation`实现权限绑定
### 数据结构调整页面相关实现
1. 当前接口的数据结构
## 国际化
遵循`Docs\PRD\_PRD_规范文档_国际化.md`规范
## 接口请求
当涉及到接口请求时,需要严格遵循`Docs\PRD\_PRD_规范文档_接口请求.md`规范
\ No newline at end of file
# 自定义权限控制指令实现
## 📋 概述
1. 办公室管理页面地址: `src\views\Backend\MeetingRoom\OfficeManage\index.vue`
2. 自定义权限控制指令地址:`src\utils\permission.js`
3. 权限数据结构`src\constant\permissionList.js`
4. 权限控制指令通过`src\main.js`挂载成`v-permission`使用
## 🎯 任务
1. 实现自定义权限控制指令
### 自定义权限控制指令实现要求
1. 先将权限数据结构存储在localStorage的userPermission中,模拟用户已经获取到当前的拥有权限
2. 我在办公室管理的页面line:16添加了v-permission="'functionType_82.create'",帮我根据判断实现:如果userPermission的functionType_82.create为1,则显示按钮,并将functionType_82.create作为id赋予给按钮,为0或者不存在则将按钮移出dom
3. 自定义权限控制的生命周期等问题可以参考`E:\Project\ubains-unified-platform\src\common\permission.js`
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论