Files
hzdyjs/docs/测试文档/后勤管理/物业管理/维修分类/维修分类功能完整测试方案.md
T
zlwu 249b1dfeb4 feat: 完善项目开发规范和测试文档体系
📝 主要改进:
• Cursor配置模块化:拆分为前端、后端、移动端、文档、API测试5个专门规范文件
• API文档重新组织:按业务模块拆分到docs/开发文档/API/目录下
• 新增维修分类功能完整测试方案和自动化测试脚本
• 后端热启动脚本完善,支持Linux/Windows双平台
• 强化文档同步更新规范,确保代码与文档一致性

🔧 技术改进:
• 优化Cursor AI工作流程和代码生成质量
• 完善API测试规范(AES+RSA双重加密登录方法)
• 提升开发效率和代码质量标准化程度

�� 测试覆盖:
• 维修分类管理功能端到端测试验证通过
• 包含页面加载、CRUD操作、搜索功能等核心测试用例

更新时间:2025-07-01
2025-07-01 17:53:05 +08:00

14 KiB

维修分类功能完整测试方案

🎯 测试概览

测试时间: 2025-07-01
测试工具: Cursor + Playwright MCP
测试范围: 物业管理 > 维修分类完整功能测试
测试类型: 端到端自动化测试
预计执行时间: 45-60 分钟

📋 测试准备

1. 环境要求

  • ✅ 系统正常运行 (前端: http://localhost:80, 后端: http://localhost:8080)
  • ✅ 测试用户账号 (admin/admin123)
  • ✅ Cursor 编辑器已安装 Playwright MCP 插件
  • ✅ 浏览器环境 (Chrome/Edge)

2. 测试数据准备

{
    "testCategories": [
        {
            "categoryName": "测试电路维修",
            "categoryCode": "TEST_ELECTRIC_001",
            "categoryDescription": "测试用电路维修分类",
            "skillLevel": "2",
            "estimatedDuration": "120",
            "standardCost": "200.00"
        },
        {
            "categoryName": "测试水暖维修",
            "categoryCode": "TEST_PLUMBING_001",
            "categoryDescription": "测试用水暖维修分类",
            "skillLevel": "2",
            "estimatedDuration": "150",
            "standardCost": "300.00"
        }
    ]
}

🧪 测试执行计划

阶段一:基础功能测试 (15 分钟)

TC001: 页面加载和基础展示测试

测试目标: 验证维修分类页面正常加载和数据展示

Playwright MCP 执行步骤:

  1. 导航到测试页面
// 在Cursor中使用Playwright MCP
await browser.navigate('http://localhost:80/hq/pm/repairCategory');
  1. 验证页面加载
// 等待页面完全加载
await browser.waitFor(2000);

// 验证页面标题
const pageTitle = await browser.snapshot();
// 检查页面是否包含"维修分类"字样
  1. 验证核心元素存在
  • 搜索框
  • 新增按钮
  • 表格区域
  • 分页组件

验证要点:

  • ✅ 页面在 3 秒内完全加载
  • ✅ 标题显示"维修分类"
  • ✅ 数据表格正常展示
  • ✅ 操作按钮可见且可点击

TC002: 数据列表展示测试

测试目标: 验证维修分类数据正确展示

执行步骤:

  1. 检查默认数据加载
  2. 验证表格列显示完整
  3. 验证数据格式正确性

验证要点:

  • ✅ 表格列标题正确 (分类名称、编码、状态等)
  • ✅ 数据行显示完整
  • ✅ 分页信息正确

阶段二:CRUD 操作测试 (20 分钟)

TC003: 新增维修分类测试

测试目标: 验证新增维修分类功能完整性

Playwright MCP 执行步骤:

  1. 点击新增按钮
// 获取页面快照识别新增按钮
const snapshot = await browser.snapshot();
// 点击"新增"按钮
await browser.click('新增按钮', "button[contains(text(), '新增')]");
  1. 填写表单信息
// 等待弹窗出现
await browser.waitFor(1000);

// 填写分类名称
await browser.type('分类名称输入框', "input[placeholder*='分类名称']", '测试电路维修');

// 填写分类编码
await browser.type('分类编码输入框', "input[placeholder*='分类编码']", 'TEST_ELECTRIC_001');

// 填写描述信息
await browser.type('描述输入框', "textarea[placeholder*='描述']", '测试用电路维修分类');

// 选择技能等级
await browser.click('技能等级下拉', "select[placeholder*='技能等级']");
await browser.selectOption('技能等级选项', 'select', ['2']);

// 填写预估时长
await browser.type('预估时长输入框', "input[placeholder*='预估时长']", '120');

// 填写标准成本
await browser.type('标准成本输入框', "input[placeholder*='标准成本']", '200.00');
  1. 提交表单
// 点击确定按钮
await browser.click('确定按钮', "button[contains(text(), '确定')]");

// 等待操作完成
await browser.waitFor(2000);
  1. 验证新增结果
// 检查成功提示消息
const snapshot = await browser.snapshot();
// 验证是否显示"操作成功"提示

// 检查列表中是否包含新增的数据
// 搜索新增的分类
await browser.type('搜索框', "input[placeholder*='分类名称']", '测试电路维修');
await browser.click('搜索按钮', "button[contains(text(), '搜索')]");
await browser.waitFor(1000);

验证要点:

  • ✅ 表单验证规则正确执行
  • ✅ 必填字段验证有效
  • ✅ 数据格式验证正确
  • ✅ 新增操作成功提示
  • ✅ 新增数据在列表中可见

TC004: 编辑维修分类测试

测试目标: 验证编辑维修分类功能

执行步骤:

  1. 定位编辑目标
// 在表格中找到刚创建的分类行
const snapshot = await browser.snapshot();
// 点击对应行的编辑按钮
await browser.click('编辑按钮', "button[contains(text(), '修改')]");
  1. 修改表单信息
// 等待编辑弹窗
await browser.waitFor(1000);

// 修改分类名称
await browser.type('分类名称输入框', "input[placeholder*='分类名称']", '测试电路维修-已修改');

// 修改描述
await browser.type('描述输入框', "textarea[placeholder*='描述']", '已修改的测试用电路维修分类');

// 修改预估时长
await browser.type('预估时长输入框', "input[placeholder*='预估时长']", '150');
  1. 保存修改
await browser.click('确定按钮', "button[contains(text(), '确定')]");
await browser.waitFor(2000);

验证要点:

  • ✅ 编辑表单预填充原数据
  • ✅ 修改操作执行成功
  • ✅ 修改后数据正确更新

TC005: 删除维修分类测试

测试目标: 验证删除维修分类功能和安全性

执行步骤:

  1. 执行删除操作
// 定位到要删除的行
const snapshot = await browser.snapshot();
// 点击删除按钮
await browser.click('删除按钮', "button[contains(text(), '删除')]");

// 等待确认弹窗
await browser.waitFor(500);
  1. 确认删除
// 在确认弹窗中点击确定
await browser.click('确认删除', "button[contains(text(), '确定')]");
await browser.waitFor(2000);
  1. 验证删除结果
// 搜索已删除的分类,确认不再存在
await browser.type('搜索框', "input[placeholder*='分类名称']", '测试电路维修-已修改');
await browser.click('搜索按钮', "button[contains(text(), '搜索')]");
await browser.waitFor(1000);

// 验证搜索结果为空
const snapshot = await browser.snapshot();

验证要点:

  • ✅ 删除确认机制有效
  • ✅ 删除操作执行成功
  • ✅ 数据物理删除或逻辑删除正确

阶段三:树形结构测试 (10 分钟)

TC006: 树形结构展示测试

测试目标: 验证维修分类树形结构正确展示

执行步骤:

  1. 创建父级分类
// 新增父级分类
await browser.click('新增按钮', "button[contains(text(), '新增')]");
await browser.waitFor(1000);

await browser.type('分类名称输入框', "input[placeholder*='分类名称']", '测试父级分类');
await browser.type('分类编码输入框', "input[placeholder*='分类编码']", 'TEST_PARENT_001');
await browser.type('描述输入框', "textarea[placeholder*='描述']", '测试用父级分类');

await browser.click('确定按钮', "button[contains(text(), '确定')]");
await browser.waitFor(2000);
  1. 创建子级分类
// 定位到父级分类行,点击新增子类按钮
const snapshot = await browser.snapshot();
await browser.click('新增子类按钮', "button[contains(text(), '新增子类')]");
await browser.waitFor(1000);

await browser.type('分类名称输入框', "input[placeholder*='分类名称']", '测试子级分类');
await browser.type('分类编码输入框', "input[placeholder*='分类编码']", 'TEST_CHILD_001');

// 验证父级已自动选中
const snapshot2 = await browser.snapshot();

await browser.click('确定按钮', "button[contains(text(), '确定')]");
await browser.waitFor(2000);
  1. 验证树形结构
// 检查树形展示
const snapshot = await browser.snapshot();
// 验证父子关系正确显示
// 验证展开/折叠功能

验证要点:

  • ✅ 父子级关系正确建立
  • ✅ 树形结构正确展示
  • ✅ 展开/折叠功能正常
  • ✅ 层级缩进正确显示

阶段四:搜索和过滤测试 (8 分钟)

TC007: 搜索功能测试

测试目标: 验证各种搜索条件的有效性

执行步骤:

  1. 按分类名称搜索
await browser.type('分类名称搜索', "input[placeholder*='分类名称']", '电路');
await browser.click('搜索按钮', "button[contains(text(), '搜索')]");
await browser.waitFor(1000);

// 验证搜索结果
const snapshot = await browser.snapshot();
  1. 按分类编码搜索
// 重置搜索条件
await browser.click('重置按钮', "button[contains(text(), '重置')]");
await browser.waitFor(1000);

await browser.type('分类编码搜索', "input[placeholder*='分类编码']", 'ELECTRIC');
await browser.click('搜索按钮', "button[contains(text(), '搜索')]");
await browser.waitFor(1000);
  1. 按状态过滤
await browser.click('状态下拉', "select[placeholder*='状态']");
await browser.selectOption('状态选项', 'select', ['1']);
await browser.click('搜索按钮', "button[contains(text(), '搜索')]");
await browser.waitFor(1000);

验证要点:

  • ✅ 搜索结果准确匹配
  • ✅ 多条件组合搜索有效
  • ✅ 重置功能正常工作
  • ✅ 过滤条件正确应用

阶段五:权限控制测试 (5 分钟)

TC008: 权限验证测试

测试目标: 验证不同角色的权限控制

执行步骤:

  1. 管理员权限验证
// 当前为admin登录,验证所有功能可用
const snapshot = await browser.snapshot();
// 检查新增、编辑、删除按钮都可见
  1. 普通用户权限验证 (如果有不同角色)
// 注:这里需要切换到普通用户登录测试
// 验证权限限制是否生效

验证要点:

  • ✅ 操作按钮显示/隐藏正确
  • ✅ 权限验证有效执行
  • ✅ 无权限操作被正确拦截

阶段六:异常情况测试 (7 分钟)

TC009: 数据验证测试

测试目标: 验证各种异常输入的处理

执行步骤:

  1. 必填字段验证
// 尝试提交空表单
await browser.click('新增按钮', "button[contains(text(), '新增')]");
await browser.waitFor(1000);
await browser.click('确定按钮', "button[contains(text(), '确定')]");

// 验证错误提示
const snapshot = await browser.snapshot();
  1. 数据格式验证
// 测试无效的数据格式
await browser.type('分类编码输入框', "input[placeholder*='分类编码']", '特殊字符@#$');
await browser.type('预估时长输入框', "input[placeholder*='预估时长']", 'abc');
await browser.type('标准成本输入框', "input[placeholder*='标准成本']", '-100');

await browser.click('确定按钮', "button[contains(text(), '确定')]");
// 验证格式验证错误提示
  1. 重复数据验证
// 尝试创建重复编码的分类
await browser.type('分类编码输入框', "input[placeholder*='分类编码']", 'ELECTRIC');
// 验证重复性验证

验证要点:

  • ✅ 必填字段验证有效
  • ✅ 数据格式验证正确
  • ✅ 重复性验证生效
  • ✅ 错误提示清晰准确

📊 测试执行清单

执行前检查

  • 系统环境正常运行
  • 测试数据已准备
  • Playwright MCP 插件已安装
  • 测试用户账号可用

测试执行记录

测试用例 预期结果 实际结果 状态 备注
TC001: 页面加载测试 页面正常加载,元素完整显示 待执行
TC002: 数据列表展示 数据正确展示,格式规范 待执行
TC003: 新增分类测试 新增操作成功,数据保存 待执行
TC004: 编辑分类测试 编辑操作成功,数据更新 待执行
TC005: 删除分类测试 删除操作成功,数据移除 待执行
TC006: 树形结构测试 树形关系正确,展示正常 待执行
TC007: 搜索功能测试 搜索结果准确,过滤有效 待执行
TC008: 权限控制测试 权限验证有效,控制正确 待执行
TC009: 异常情况测试 异常处理正确,提示清晰 待执行

🎯 测试成功标准

功能性标准

  • ✅ 所有 CRUD 操作正常执行
  • ✅ 树形结构正确展示和操作
  • ✅ 搜索过滤功能准确有效
  • ✅ 数据验证规则正确执行

易用性标准

  • ✅ 用户界面友好直观
  • ✅ 操作响应及时顺畅
  • ✅ 错误提示清晰准确
  • ✅ 交互流程合理高效

稳定性标准

  • ✅ 无系统错误或崩溃
  • ✅ 数据一致性良好
  • ✅ 并发操作稳定
  • ✅ 异常恢复能力强

📋 问题记录模板

问题报告格式

**问题编号**: BUG-001
**问题标题**: [简短描述]
**测试用例**: TC001
**严重级别**: 高/中/低
**问题描述**:

-   操作步骤:
-   预期结果:
-   实际结果:
    **重现步骤**:

1. ...
2. ...
   **影响范围**:
   **修复建议**:
   **发现时间**: 2025-07-01
   **发现人员**: [测试人员]

📈 测试结果分析

执行后填写

测试覆盖率: _%
通过率: _%
发现问题数: *个
严重问题数: *个

总体评估

功能完整性: [优秀/良好/一般/需改进]
系统稳定性: [优秀/良好/一般/需改进]
用户体验: [优秀/良好/一般/需改进]

改进建议

  1. [基于测试结果的改进建议]
  2. [性能优化建议]
  3. [用户体验优化建议]

测试执行人员: [测试人员姓名]
测试完成时间: [实际完成时间]
文档路径: docs/测试文档/后勤管理/物业管理/维修分类/维修分类功能完整测试方案.md