ether-docs/04-TESTING/TEST-PLAN.md

22 KiB
Raw Blame History

Ether 物业管理系统 - 测试计划

文档版本: v1.0 创建日期: 2026-05-18 适用范围: Ether PMS 全系统测试


一、测试策略

1.1 测试目标

  • 确保所有已实现功能的API接口正确性API测试通过率 >= 95%
  • 确保核心业务流程端到端可用E2E测试通过率 >= 90%
  • 建立TDD开发规范新功能必须先写测试再实现
  • 为6大业务域建立完整的测试用例体系
  • 覆盖5条跨域业务流程的端到端验证

1.2 测试范围

6大业务域

业务域 模块 核心功能 已实现需求数
身份与权限域 module-auth 用户/角色/权限/部门/认证/审计 37
空间与项目域 module-mdm 项目/空间节点/巡检标准 23
设备与资产域 module-asset 设备台账/扩展表/健康评分/故障/归属 28
运营与服务域 module-wo + module-mdm 工单/维保/巡检/备件/能耗 36
财务与收费域 module-finance(待建) 收费项目/账单/支付/退款 0
前端交互域 ether-admin 登录/权限/项目切换/各模块页面 14

5条跨域业务流程

  1. 业主报修全流程(认证 -> 空间定位 -> 工单创建 -> 派单 -> 执行 -> 验收)
  2. 设备全生命周期管理(采购 -> 安装 -> 运行监控 -> 维保 -> 报废)
  3. 预防性维保调度流程(计划 -> 周期调度 -> 任务生成 -> 执行 -> 验收 -> 设备联动)
  4. 巡检异常处理流程(模板 -> 签到 -> 异常上报 -> 工单 -> 处理 -> 复检)
  5. 能耗计费流程(计量点 -> 抄表 -> 费用计算 -> 账单 -> 缴费)

1.3 测试层级

测试层级 工具 目标 执行频率
单元测试 JUnit 5 + Mockito Service层业务逻辑、算法验证 每次提交
API接口测试 Shell curl脚本 REST API正确性、状态码、响应格式 每日构建
E2E端到端测试 Playwright + TypeScript 用户操作流程、跨域业务闭环 每日构建

1.4 TDD开发规范

强制要求所有新功能开发必须遵循TDD流程。

1. 红(Red)   - 先编写失败的测试用例
2. 绿(Green) - 编写最小代码使测试通过
3. 重构(Refactor) - 优化代码结构,保持测试通过

TDD准入规则

  • 新增功能必须先编写测试用例无测试用例的PR不予合并
  • Bug修复必须先编写复现测试验证修复后测试通过
  • 重构必须确保既有测试全部通过

二、测试环境

2.1 后端测试环境

项目 配置
框架 Spring Boot 3.x Test
单元测试 JUnit 5 + Mockito
集成测试 Spring Boot Test + @WebMvcTest / @SpringBootTest
数据库 H2内存数据库(单元测试) / PostgreSQL Testcontainers(集成测试)
后端地址 http://localhost:8080
认证方式 JWT Token (Authorization: Bearer {token})

2.2 前端测试环境

项目 配置
单元测试 Vitest
E2E测试 Playwright
管理后台地址 http://localhost:5175
浏览器 Chromium (CI) / Chrome (本地)

2.3 测试数据管理

测试数据准备

  • 每个测试脚本开头通过API创建所需测试数据
  • 使用固定的测试账号admin / admin123
  • 测试项目使用固定编码前缀TEST-
  • 测试数据命名规范:[TEST]-[模块]-[功能]-[序号]

测试数据清理

  • 每个测试脚本结尾删除创建的测试数据
  • 使用唯一标识避免数据冲突
  • API测试使用独立项目隔离数据

三、API接口测试

3.1 测试框架选型

方案 选定 说明
Shell curl脚本 轻量级无额外依赖适合CI环境
Postman Collection 需要GUI不适合自动化CI
Newman 备选 可从Postman Collection导出运行

3.2 测试脚本组织

04-TESTING/api/
  auth/          - 认证授权域API测试
    test-auth.sh
  space/         - 空间与项目域API测试
    test-space.sh
  asset/         - 设备与资产域API测试
    test-asset.sh
  ops/           - 运营与服务域API测试
    test-ops.sh
  finance/       - 财务与收费域API测试
    test-finance.sh
  run-all.sh     - 执行全部API测试
  run-module.sh  - 执行指定模块API测试

3.3 测试脚本规范

每个API测试脚本必须包含

  1. 前置条件 - 登录获取Token、创建依赖数据
  2. 请求 - curl发送HTTP请求携带正确的Header
  3. 断言 - 检查HTTP状态码、响应JSON字段
  4. 清理 - 删除测试创建的数据

脚本结构

#!/bin/bash
BASE_URL="http://localhost:8080/api"
TOKEN=""

login() { ... }

test_XXX() {
  local response=$(curl -s -w "\n%{http_code}" ...)
  local body=$(echo "$response" | head -n -1)
  local status=$(echo "$response" | tail -n 1)
  assert_eq "$status" "200" "test_XXX"
}

cleanup() { ... }

login
test_XXX
cleanup
print_summary

3.4 测试脚本目录结构

04-TESTING/api/
  auth/test-auth.sh          - 认证授权域API测试
  space/test-space.sh        - 空间与项目域API测试
  asset/test-asset.sh        - 设备与资产域API测试
  ops/test-ops.sh            - 运营与服务域API测试
  finance/test-finance.sh    - 财务与收费域API测试
  run-all.sh                 - 执行全部API测试
  run-module.sh              - 执行指定模块API测试

四、E2E端到端测试

4.1 测试框架选型

项目 配置
框架 Playwright
语言 TypeScript
运行器 Playwright Test
浏览器 Chromium
设计模式 Page Object Model

4.2 测试场景设计

5条跨域业务流程

编号 流程名称 涉及域 关键步骤
E2E-CROSS-001 业主报修全流程 auth+space+ops 登录->选项目->定位设备->创建工单->派单->执行->完成->验收
E2E-CROSS-002 设备全生命周期 asset+ops 创建设备->关联空间->录入扩展表->健康评分->创建维保->完成->报废
E2E-CROSS-003 预防性维保调度 ops+asset 创建维保计划->创建维保任务->分配->执行->完成->验收->设备联动
E2E-CROSS-004 巡检异常处理 ops+asset 创建巡检模板->执行巡检->上报异常->创建工单->处理->复检
E2E-CROSS-005 能耗计费流程 ops+finance 创建计量点->抄表录入->费用计算->生成账单->缴费

各域核心操作

测试场景
auth 登录/登出/Token刷新/密码修改/角色分配
space 项目创建/空间树构建/节点CRUD
asset 设备创建/扩展表管理/健康评分查询
ops 工单全流程/维保任务/备件出入库
finance 收费项目/账单生成/支付登记

4.3 Page Object模式设计

pages/
  LoginPage.ts        - 登录页:用户名/密码输入、登录按钮、错误提示
  DashboardPage.ts    - 仪表盘:菜单导航、项目选择器、数据概览
  WorkOrderPage.ts    - 工单页:列表/创建/详情/派单/执行/完成/验收
  EquipmentPage.ts    - 设备页:列表/创建/详情/健康评分
  SpacePage.ts        - 空间页:空间树/节点管理
  MaintenancePage.ts  - 维保页:计划列表/任务列表

4.4 测试脚本目录结构

04-TESTING/e2e/
  specs/
    auth/
      login.spec.ts          - 登录流程E2E测试
    space/
      project.spec.ts        - 项目管理E2E测试
    asset/
      equipment.spec.ts      - 设备管理E2E测试
    ops/
      work-order.spec.ts     - 工单管理E2E测试
    finance/
      billing.spec.ts        - 财务管理E2E测试
    cross-domain/
      owner-repair.spec.ts   - 业主报修全流程E2E测试
      equipment-lifecycle.spec.ts  - 设备全生命周期E2E测试
      maintenance-schedule.spec.ts - 预防性维保调度E2E测试
  fixtures/
    test-data.json           - 测试数据
  pages/
    LoginPage.ts             - 登录页Page Object
    DashboardPage.ts         - 仪表盘Page Object
  playwright.config.ts       - Playwright配置
  run-all.sh                 - 执行全部E2E测试
  run-module.sh              - 执行指定模块E2E测试

五、测试用例清单

5.1 身份与权限域

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-AUTH-001 用户登录-正常 用户已存在 POST /api/auth/login {username, password} 200, 返回token/userId/roles P0
TC-AUTH-002 用户登录-密码错误 用户已存在 POST /api/auth/login {username, wrong_pwd} 401, 返回错误信息 P0
TC-AUTH-003 用户登录-锁定 连续5次失败 连续5次错误密码登录 账户锁定10分钟 P0
TC-AUTH-004 Token刷新 已登录 POST /api/auth/refresh 200, 返回新Token P0
TC-AUTH-005 获取当前用户 已登录 GET /api/auth/me 200, 返回用户信息 P0
TC-AUTH-006 用户登出 已登录 POST /api/auth/logout 200 P0
TC-AUTH-007 创建用户 管理员已登录 POST /api/auth/users {username, password, userType} 201, 返回用户ID P0
TC-AUTH-008 查询用户列表 管理员已登录 GET /api/auth/users?page=0&size=10 200, 返回分页数据 P0
TC-AUTH-009 更新用户 用户已存在 PUT /api/auth/users/{id} {realName, phone} 200, 返回更新后数据 P0
TC-AUTH-010 删除用户 用户已存在 DELETE /api/auth/users/{id} 200 P1
TC-AUTH-011 修改密码 用户已登录 PUT /api/auth/users/{id}/password 200 P0
TC-AUTH-012 弱密码拒绝 管理员已登录 POST创建用户 password=123456 400, 拒绝弱密码 P0
TC-AUTH-013 创建角色 管理员已登录 POST /api/auth/roles {code, name, type} 201 P0
TC-AUTH-014 角色权限分配 角色/权限已存在 POST /api/auth/roles/{id}/permissions 200 P0
TC-AUTH-015 创建权限 管理员已登录 POST /api/auth/permissions {code, name, type} 201 P0
TC-AUTH-016 部门树查询 部门已存在 GET /api/auth/depts/tree 200, 返回树形结构 P1
TC-AUTH-017 部门删除约束 部门有子部门 DELETE /api/auth/depts/{id} 400, 拒绝删除 P0
TC-AUTH-018 项目成员管理 项目/用户已存在 添加/查询/移除项目成员 各操作返回正确结果 P0
TC-AUTH-019 住户认证流程 住户已存在 UNVERIFIED->PENDING->VERIFIED 状态正确流转 P1
TC-AUTH-020 审计日志查询 操作已产生日志 GET /api/auth/audit-logs 200, 返回日志列表 P1

5.2 空间与项目域

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-SPACE-001 创建项目 管理员已登录 POST /api/mdm/projects {code, name, projectType} 201, 返回项目ID P0
TC-SPACE-002 查询项目列表 项目已存在 GET /api/mdm/projects 200, 返回分页数据 P0
TC-SPACE-003 项目状态流转 项目状态PENDING PUT /api/mdm/projects/{id}/status {status: ACTIVE} 200 P0
TC-SPACE-004 项目删除检查 项目有应收费用 GET /api/mdm/projects/{id}/delete-check canDelete=false P0
TC-SPACE-005 项目配置管理 项目已存在 GET/PUT /api/mdm/projects/{id}/config 配置正确读写 P1
TC-SPACE-006 创建空间节点 项目已存在 POST /api/mdm/space-nodes {name, nodeType} 201 P0
TC-SPACE-007 获取空间树 节点已创建 GET /api/mdm/space-nodes/project/{id}/tree 200, 返回树形结构 P0
TC-SPACE-008 空间节点删除检查 节点有子节点 GET /api/mdm/space-nodes/{id}/delete-check 返回子节点数 P0
TC-SPACE-009 空间节点级联删除 节点有子节点 DELETE /api/mdm/space-nodes/{id}/cascade 200, 子节点全部删除 P0
TC-SPACE-010 巡检标准项CRUD 管理员已登录 创建/查询/更新/删除巡检标准项 各操作返回正确结果 P0
TC-SPACE-011 巡检模板管理 标准项已存在 创建/查询/更新/复制巡检模板 各操作返回正确结果 P1

5.3 设备与资产域

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-ASSET-001 创建设备 项目/空间已存在 POST /api/asset/equipment {equipmentCode, name, type} 201 P0
TC-ASSET-002 按项目查询设备 设备已存在 GET /api/asset/equipment/by-project/{projectId} 200, 返回设备列表 P0
TC-ASSET-003 按空间查询设备 设备已关联空间 GET /api/asset/equipment/by-space/{spaceNodeId} 200, 返回设备列表 P0
TC-ASSET-004 设备批量删除 多个设备已存在 POST /api/asset/equipment/batch-delete {ids} 200 P1
TC-ASSET-005 电梯扩展表管理 电梯设备已存在 GET/PUT /api/asset/equipment/{id}/elevator 扩展表正确读写 P0
TC-ASSET-006 暖通扩展表管理 暖通设备已存在 GET/PUT /api/asset/equipment/{id}/hvac 扩展表正确读写 P0
TC-ASSET-007 消防扩展表管理 消防设备已存在 GET/PUT /api/asset/equipment/{id}/fire 扩展表正确读写 P0
TC-ASSET-008 能源计量扩展表管理 能源设备已存在 GET/PUT /api/asset/equipment/{id}/energy 扩展表正确读写 P0
TC-ASSET-009 设备Excel导入 准备xlsx文件 POST /api/asset/equipment/import 返回successCount/failCount P1
TC-ASSET-010 设备Excel导出 设备已存在 GET /api/asset/equipment/export?projectId={id} 返回xlsx文件 P1
TC-ASSET-011 健康评分查询 设备已存在 GET /api/asset/equipment/{id}/health 200, 返回健康度/等级 P1
TC-ASSET-012 故障记录 设备已存在 POST /api/asset/equipment/{id}/failures 201, 自动计算时长 P0
TC-ASSET-013 归属主体CRUD 管理员已登录 创建/查询/更新/删除归属主体 各操作返回正确结果 P1
TC-ASSET-014 设备统计 设备已存在 GET /api/asset/equipment/statistics/by-type 200, 返回统计数据 P1

5.4 运营与服务域

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-OPS-001 创建工单 项目/设备已存在 POST /api/wo/work-orders {title, source, type} 201, workNo自动生成 P0
TC-OPS-002 工单派单 工单状态PENDING POST /api/wo/work-orders/{id}/assign 200, 状态变ASSIGNED P0
TC-OPS-003 工单开始执行 工单状态ASSIGNED POST /api/wo/work-orders/{id}/start 200, 状态变IN_PROGRESS P0
TC-OPS-004 工单完成 工单状态IN_PROGRESS POST /api/wo/work-orders/{id}/complete 200, 状态变COMPLETED P0
TC-OPS-005 工单验收 工单状态COMPLETED POST /api/wo/work-orders/{id}/verify {rating} 200, 状态变VERIFIED P0
TC-OPS-006 工单取消-待分配 工单状态PENDING POST /api/wo/work-orders/{id}/cancel 200, 状态变CANCELLED P1
TC-OPS-007 工单取消-已完成 工单状态COMPLETED POST /api/wo/work-orders/{id}/cancel 400, 拒绝取消 P0
TC-OPS-008 工单统计 工单已存在 GET /api/wo/work-orders/statistics 200, 返回统计数据 P1
TC-OPS-009 创建维保任务 设备已存在 POST /api/wo/maintenance-tasks {equipmentId, type} 201 P0
TC-OPS-010 维保任务状态流转 任务状态PENDING assign->start->complete->verify 状态正确流转 P0
TC-OPS-011 维保任务自动优先级 创建紧急维修任务 POST创建type=EMERGENCY priority自动为URGENT P0
TC-OPS-012 维保任务完成后设备联动 任务关联设备 完成维保任务 设备维保商/下次巡检日期更新 P0
TC-OPS-013 备件入库 备件已存在 POST /api/ops/spare-parts/in-stock 200, currentStock增加 P0
TC-OPS-014 备件出库 备件库存充足 POST /api/ops/spare-parts/out-stock 200, currentStock减少 P0
TC-OPS-015 备件出库-库存不足 备件库存不足 POST出库数量>库存 400, 拒绝出库 P0
TC-OPS-016 低库存预警 备件currentStock<safeStock GET /api/ops/spare-parts/low-stock 返回低库存备件列表 P1
TC-OPS-017 能耗抄表录入 计量点已存在 POST /api/ops/energy/consumption 201, 自动计算消耗量和费用 P0
TC-OPS-018 能耗抄表-读数递减 上次读数100 POST currentReading=50 400, 拒绝递减读数 P0
TC-OPS-019 维保计划管理 管理员已登录 创建/查询/更新维保计划 各操作返回正确结果 P1
TC-OPS-020 巡检模板管理 管理员已登录 创建/查询/更新/复制巡检模板 各操作返回正确结果 P1

5.5 财务与收费域

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-FIN-001 创建收费项目 模块已实现 POST /api/finance/fee-items 201 P0
TC-FIN-002 查询收费项目 收费项目已存在 GET /api/finance/fee-items 200 P0
TC-FIN-003 生成账单 收费项目/业主已存在 POST /api/finance/fee-bills/generate 201 P0
TC-FIN-004 账单状态流转 账单已存在 UNPAID->PARTIAL_PAID->PAID 状态正确流转 P0
TC-FIN-005 线下收款登记 账单已存在 POST /api/finance/fee-payments 201 P0
TC-FIN-006 退款申请 支付已完成 POST /api/finance/fee-refunds 201 P1
TC-FIN-007 滞纳金计算 账单逾期 自动计算滞纳金 金额正确 P1

5.6 前端交互域

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-FE-001 登录页面-正常登录 系统可访问 输入用户名密码->点击登录 跳转至仪表盘 P0
TC-FE-002 登录页面-错误密码 系统可访问 输入错误密码->点击登录 显示错误提示 P0
TC-FE-003 项目选择 已登录 点击项目选择器->选择项目 页面数据刷新 P0
TC-FE-004 权限控制 不同角色用户 访问无权限页面/按钮 隐藏或禁用 P0
TC-FE-005 用户管理页面 管理员已登录 列表/创建/编辑/删除用户 各操作正常 P0
TC-FE-006 设备管理页面 管理员已登录 列表/创建/详情/导入 各操作正常 P0
TC-FE-007 工单管理页面 管理员已登录 列表/创建/派单/执行/验收 各操作正常 P0

5.7 跨域业务流程

用例ID 名称 前置条件 测试步骤 预期结果 优先级
TC-CROSS-001 业主报修全流程 业主/设备/维保人员已存在 登录->选项目->创建工单->派单->执行->完成->验收 工单状态PENDING->VERIFIED P0
TC-CROSS-002 设备全生命周期 项目/空间已存在 创建设备->关联空间->录入扩展表->健康评分->维保->报废 设备状态ACTIVE->SCRAPPED P0
TC-CROSS-003 预防性维保调度 设备/维保计划已存在 创建计划->创建任务->分配->执行->完成->验收 任务完成+设备信息更新 P0
TC-CROSS-004 巡检异常处理 巡检模板/设备已存在 创建模板->执行巡检->上报异常->创建工单->处理 异常问题解决 P0
TC-CROSS-005 能耗计费流程 计量点/收费项目已存在 创建计量点->抄表->费用计算->生成账单->缴费 账单状态PAID P0

六、测试执行与报告

6.1 单模块测试执行

# API测试
./04-TESTING/api/run-module.sh auth
./04-TESTING/api/run-module.sh space
./04-TESTING/api/run-module.sh asset
./04-TESTING/api/run-module.sh ops
./04-TESTING/api/run-module.sh finance

# E2E测试
./04-TESTING/e2e/run-module.sh auth
./04-TESTING/e2e/run-module.sh space
./04-TESTING/e2e/run-module.sh asset
./04-TESTING/e2e/run-module.sh ops
./04-TESTING/e2e/run-module.sh finance
./04-TESTING/e2e/run-module.sh cross-domain

6.2 全量测试执行

# API全量测试
./04-TESTING/api/run-all.sh

# E2E全量测试
./04-TESTING/e2e/run-all.sh

6.3 串联测试执行

跨域流程测试需要按顺序执行,确保数据依赖正确:

# 业主报修全流程
./04-TESTING/e2e/run-module.sh cross-domain

6.4 测试报告生成

API测试报告

  • 脚本执行后自动输出测试摘要PASS/FAIL/总计/通过率)
  • 详细日志输出到 04-TESTING/reports/api-{module}-{date}.log

E2E测试报告

  • Playwright HTML报告04-TESTING/reports/e2e-report/
  • 执行命令:npx playwright test --reporter=html
  • 报告内容:通过率、失败截图、执行耗时

报告指标

  • 总用例数 / 通过数 / 失败数 / 跳过数
  • 通过率 = 通过数 / 总用例数 * 100%
  • 失败分析:按失败原因分类(断言失败/超时/环境问题)

6.5 测试报告输出目录

04-TESTING/reports/
  api-auth-YYYYMMDD.log
  api-space-YYYYMMDD.log
  api-asset-YYYYMMDD.log
  api-ops-YYYYMMDD.log
  api-finance-YYYYMMDD.log
  e2e-report/
    index.html
    trace/
    screenshots/

七、测试准入准出标准

7.1 准入标准

代码提交测试必须满足以下条件:

准入项 要求
代码审查 PR必须经过至少1人审查通过
单元测试 新增/修改代码必须有对应单元测试
编译通过 mvn clean install -DskipTests 无错误
类型检查 npx vue-tsc --noEmit 无错误
API文档 新增/修改接口必须更新API文档

7.2 准出标准

版本发布必须满足以下条件:

准出项 要求
API测试通过率 >= 95%
E2E测试通过率 >= 90%
P0缺陷 0个
P1缺陷 0个
P2缺陷 不超过5个需有修复计划
单元测试覆盖率 核心Service层 >= 80%
性能测试 关键接口响应时间 < 500ms

缺陷优先级定义

级别 定义 修复时限
P0 系统崩溃/数据丢失/安全漏洞 4小时内
P1 核心功能不可用/业务流程阻断 24小时内
P2 功能异常但有规避方案 3个工作日内
P3 UI显示问题/体验优化 下个迭代