# 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. **清理** - 删除测试创建的数据

**脚本结构**：

```bash
#!/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 单模块测试执行

```bash
# 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 全量测试执行

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

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

### 6.3 串联测试执行

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

```bash
# 业主报修全流程
./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显示问题/体验优化 | 下个迭代 |
