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

487 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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显示问题/体验优化 | 下个迭代 |