ether-docs/06-TESTING/reports/INTEGRATION_TEST_PLAN.md

622 lines
24 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-02-14
**测试负责人**: 测试专家
**项目技术栈**: Spring Boot 3.x + Java 17 + PostgreSQL + Vue 3 + TypeScript
---
## 一、测试范围和目标
### 1.1 测试范围
#### 后端服务模块
| 模块 | 服务 | 主要功能 | 测试优先级 |
|------|------|----------|------------|
| ether-auth | 认证服务 | 用户登录、权限验证、JWT Token管理 | P0 |
| ether-mdm | 主数据管理 | 项目管理、业主管理、空间管理、设备管理 | P0 |
| ether-ops | 运营调度 | 工单管理、巡检管理、投诉建议、满意度调查、问卷调查、智能派单 | P0 |
| ether-asset | 资产管理 | 设备资产管理、维保计划 | P1 |
| ether-finance | 财务计费 | 费用管理、账单管理、支付管理 | P1 |
| ether-gateway | API网关 | 路由转发、认证拦截、限流熔断 | P1 |
#### 前端功能模块
| 模块 | 主要功能 | 测试优先级 |
|------|----------|------------|
| 登录认证 | 登录、登出、Token刷新、密码修改 | P0 |
| 用户管理 | 用户CRUD、角色分配、状态管理 | P0 |
| 角色权限 | 角色CRUD、权限分配、数据权限 | P0 |
| 项目管理 | 项目CRUD、成员管理、项目切换 | P0 |
| 工单管理 | 工单全生命周期管理、分配、处理、验收 | P0 |
| 设备管理 | 设备CRUD、二维码、维修历史 | P1 |
| 巡检管理 | 巡检计划、巡检任务、巡检记录 | P1 |
| 投诉建议 | 投诉提交、处理流程、统计分析 | P1 |
| 满意度调查 | 调查创建、回应收集、统计分析 | P1 |
| 问卷调查 | 问卷创建、回应收集、结果分析 | P1 |
| 智能派单 | 派单规则、算法匹配、负载均衡 | P1 |
| 运营大屏 | 数据可视化、实时监控 | P2 |
| 综合报表 | 多维度统计、报表导出 | P2 |
### 1.2 测试目标
#### 主要目标
1. **业务流程覆盖**: 验证所有核心业务流程端到端正确执行
2. **边界条件覆盖**: 验证系统在边界条件下的正确性和稳定性
3. **数据一致性覆盖**: 验证数据在各模块间的正确流转和一致性
4. **测试覆盖率达到99%**: 代码覆盖率、功能覆盖率、场景覆盖率
#### 质量目标
| 指标 | 目标值 | 说明 |
|------|--------|------|
| 代码覆盖率 | >= 99% | Jacoco计算包含行覆盖和分支覆盖 |
| 功能覆盖率 | 100% | 所有功能点均有测试用例 |
| 接口覆盖率 | 100% | 所有API接口均有集成测试 |
| 业务场景覆盖率 | 100% | 所有业务场景均有E2E测试 |
| 缺陷修复率 | 100% | 所有发现的缺陷必须修复 |
---
## 二、测试策略和方法
### 2.1 测试层次架构
```
┌─────────────────────────────────────────────────────────────┐
│ E2E 端到端测试 │
│ (Playwright/Puppeteer - 用户真实操作场景) │
├─────────────────────────────────────────────────────────────┤
│ API 集成测试 │
│ (Spring Boot Test - 服务间交互验证) │
├─────────────────────────────────────────────────────────────┤
│ 组件集成测试 │
│ (MockMvc - Controller层集成测试) │
├─────────────────────────────────────────────────────────────┤
│ 数据集成测试 │
│ (Testcontainers - 真实数据库测试) │
└─────────────────────────────────────────────────────────────┘
```
### 2.2 测试方法
#### 2.2.1 后端集成测试
| 测试类型 | 工具 | 适用场景 |
|----------|------|----------|
| 服务集成测试 | Spring Boot Test + H2/Testcontainers | 验证服务内部组件集成 |
| API集成测试 | MockMvc | 验证Controller层API行为 |
| 数据集成测试 | Testcontainers + PostgreSQL | 验证数据库操作正确性 |
| 消息集成测试 | RabbitMQ Test | 验证消息队列交互 |
| 契约测试 | Spring Cloud Contract | 验证服务间接口契约 |
#### 2.2.2 前端集成测试
| 测试类型 | 工具 | 适用场景 |
|----------|------|----------|
| 组件测试 | Vitest + Vue Test Utils | 验证Vue组件行为 |
| E2E测试 | Playwright | 验证用户完整操作流程 |
| API Mock测试 | MSW | 验证前端API调用逻辑 |
| 视觉回归测试 | Playwright Snapshot | 验证UI一致性 |
### 2.3 测试数据策略
#### 测试数据分类
| 数据类型 | 说明 | 管理方式 |
|----------|------|----------|
| 基础数据 | 用户、角色、权限、项目 | 测试前初始化 |
| 业务数据 | 工单、设备、巡检记录 | 测试中动态创建 |
| 边界数据 | 极限值、特殊字符、空值 | 测试用例内定义 |
| 脏数据 | 不完整、不一致数据 | 异常场景测试 |
#### 数据隔离策略
- 每个测试类使用独立的事务,测试后自动回滚
- 使用独立的测试数据库,与开发/生产环境隔离
- 测试数据使用固定ID避免冲突
---
## 三、测试环境配置
### 3.1 环境架构
```
┌─────────────────────────────────────────────────────────────┐
│ 测试环境 (Test) │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ PostgreSQL │ │ RabbitMQ │ │ Redis │ │
│ │ (Test DB) │ │ (Test MQ) │ │ (Test Cache)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Spring Boot Services │ │
│ │ ether-auth | ether-mdm | ether-ops | ether-finance │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Frontend (Vue 3 + Vite) │ │
│ │ localhost:5173 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 3.2 后端测试配置
#### Maven依赖配置
```xml
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- H2内存数据库快速测试 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<!-- Testcontainers真实数据库测试 -->
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>1.19.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.19.7</version>
<scope>test</scope>
</dependency>
<!-- 测试覆盖率 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
</plugin>
```
#### 测试配置文件 (application-test.yml)
```yaml
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=PostgreSQL
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
show-sql: false
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
format_sql: true
flyway:
enabled: false
logging:
level:
com.ether: DEBUG
org.springframework.test: INFO
```
### 3.3 前端测试配置
#### Playwright配置 (playwright.config.ts)
```typescript
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './tests',
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: [
['html', { outputFolder: 'playwright-report' }],
['json', { outputFile: 'test-results/results.json' }]
],
use: {
baseURL: 'http://localhost:5173',
trace: 'on-first-retry',
screenshot: 'only-on-failure',
video: 'retain-on-failure',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
{
name: 'firefox',
use: { ...devices['Desktop Firefox'] },
},
{
name: 'webkit',
use: { ...devices['Desktop Safari'] },
},
],
webServer: {
command: 'npm run dev',
url: 'http://localhost:5173',
reuseExistingServer: !process.env.CI,
timeout: 120000,
},
});
```
### 3.4 测试账号配置
| 账号类型 | 用户名 | 密码 | 角色 | 用途 |
|---------|--------|------|------|------|
| 超级管理员 | admin | Admin@123 | SUPER_ADMIN | 全功能测试 |
| 项目管理员 | project_admin | Project@123 | PROJECT_ADMIN | 项目级管理测试 |
| 运维人员 | worker_user | Worker@123 | WORKER | 工单处理测试 |
| 普通用户 | normal_user | Normal@123 | USER | 基础功能测试 |
| 巡检人员 | inspector_user | Inspector@123 | INSPECTOR | 巡检任务测试 |
---
## 四、测试用例设计
### 4.1 业务流程测试用例
#### 4.1.1 工单管理完整流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-INT-WORK-001 | 工单创建到关闭完整流程 | 1. 创建工单<br>2. 分配工单<br>3. 接受工单<br>4. 开始处理<br>5. 完成工单<br>6. 验收通过<br>7. 关闭工单 | 每个状态转换正确,流程记录完整 |
| TC-INT-WORK-002 | 工单转派流程 | 1. 创建并分配工单<br>2. 转派给其他人员<br>3. 新人员接受处理 | 转派记录正确,通知发送正确 |
| TC-INT-WORK-003 | 工单挂起恢复流程 | 1. 创建并开始处理工单<br>2. 挂起工单<br>3. 恢复工单<br>4. 继续处理 | 挂起时间记录正确,状态转换正确 |
| TC-INT-WORK-004 | 工单退回重新分配流程 | 1. 创建并分配工单<br>2. 处理人退回<br>3. 重新分配<br>4. 新人处理 | 退回原因记录正确,重新分配成功 |
| TC-INT-WORK-005 | 工单验收不通过流程 | 1. 完成工单<br>2. 验收不通过<br>3. 重新处理<br>4. 再次验收 | 状态回退正确,处理记录完整 |
#### 4.1.2 设备管理关联流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-INT-ASSET-001 | 设备报修到维修完成流程 | 1. 扫描设备二维码<br>2. 创建报修工单<br>3. 处理工单<br>4. 更新设备状态 | 工单与设备关联正确,设备状态更新 |
| TC-INT-ASSET-002 | 设备维修历史查询 | 1. 创建多个设备工单<br>2. 完成处理<br>3. 查询设备维修历史 | 维修历史完整,统计准确 |
#### 4.1.3 巡检管理流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-INT-INSP-001 | 巡检计划执行流程 | 1. 创建巡检计划<br>2. 生成巡检任务<br>3. 执行巡检<br>4. 上报异常<br>5. 创建整改工单 | 任务生成正确,异常上报成功 |
| TC-INT-INSP-002 | 巡检异常转工单流程 | 1. 巡检发现异常<br>2. 自动创建工单<br>3. 处理工单<br>4. 关联巡检记录 | 工单自动创建,关联关系正确 |
#### 4.1.4 投诉建议处理流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-INT-COMP-001 | 投诉处理完整流程 | 1. 提交投诉<br>2. 指派处理人<br>3. 处理投诉<br>4. 回复处理结果<br>5. 用户评价 | 流程完整,评价记录正确 |
| TC-INT-COMP-002 | 投诉升级处理流程 | 1. 提交投诉<br>2. 超时未处理<br>3. 自动升级<br>4. 上级处理 | 升级机制正确,通知发送 |
#### 4.1.5 满意度调查流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-INT-SAT-001 | 满意度调查创建到统计流程 | 1. 创建满意度调查<br>2. 发送调查邀请<br>3. 用户填写<br>4. 统计分析 | 调查数据完整,统计准确 |
| TC-INT-SAT-002 | 工单满意度评价流程 | 1. 完成工单<br>2. 发送评价邀请<br>3. 用户评价<br>4. 统计展示 | 评价关联正确,统计准确 |
### 4.2 边界条件测试用例
#### 4.2.1 数据边界测试
| 用例ID | 测试场景 | 边界条件 | 期望结果 |
|--------|----------|----------|----------|
| TC-BOUND-001 | 工单标题长度边界 | 最小(1字符)、最大(100字符)、超长(101字符) | 边界内成功,超长拒绝 |
| TC-BOUND-002 | 分页查询边界 | 第0页、第1页、超出范围页、每页0条、每页100条 | 正确处理边界值 |
| TC-BOUND-003 | 日期范围边界 | 开始日期等于结束日期、跨年查询、未来日期 | 正确处理各种日期场景 |
| TC-BOUND-004 | 数值边界 | 最小值、最大值、负数、零、超大数 | 正确验证数值范围 |
| TC-BOUND-005 | 并发数量边界 | 单用户最大会话数、单项目最大成员数 | 正确限制数量 |
#### 4.2.2 状态边界测试
| 用例ID | 测试场景 | 边界条件 | 期望结果 |
|--------|----------|----------|----------|
| TC-STATE-001 | 工单状态非法转换 | 从"已关闭"状态尝试"开始处理" | 拒绝非法状态转换 |
| TC-STATE-002 | 用户状态边界操作 | 锁定用户尝试登录、删除有工单的用户 | 正确处理状态限制 |
| TC-STATE-003 | 项目状态边界操作 | 归档项目尝试创建工单 | 正确处理项目状态限制 |
#### 4.2.3 输入边界测试
| 用例ID | 测试场景 | 边界条件 | 期望结果 |
|--------|----------|----------|----------|
| TC-INPUT-001 | 特殊字符输入 | SQL注入字符、XSS脚本、HTML标签 | 正确过滤或转义 |
| TC-INPUT-002 | 空值输入 | 空字符串、null值、空白字符 | 正确处理空值 |
| TC-INPUT-003 | 格式校验边界 | 错误邮箱格式、错误手机号格式、错误日期格式 | 正确校验格式 |
| TC-INPUT-004 | 文件上传边界 | 超大文件、非法格式、空文件 | 正确处理上传边界 |
### 4.3 数据一致性测试用例
#### 4.3.1 事务一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-TRANS-001 | 工单创建事务回滚 | 1. 创建工单<br>2. 触发异常<br>3. 验证数据回滚 | 工单和流程记录全部回滚 |
| TC-TRANS-002 | 批量操作事务一致性 | 1. 批量创建工单<br>2. 部分失败<br>3. 验证全部回滚 | 要么全部成功,要么全部回滚 |
| TC-TRANS-003 | 跨服务事务一致性 | 1. 创建工单并发送通知<br>2. 通知发送失败<br>3. 验证补偿机制 | 最终数据一致 |
#### 4.3.2 关联数据一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-REL-001 | 用户删除关联数据处理 | 1. 用户有工单记录<br>2. 尝试删除用户<br>3. 验证处理结果 | 正确处理关联数据 |
| TC-REL-002 | 项目删除级联处理 | 1. 项目有工单、设备、巡检记录<br>2. 尝试删除项目<br>3. 验证级联处理 | 正确处理级联删除或拒绝 |
| TC-REL-003 | 设备状态与工单状态同步 | 1. 创建设备维修工单<br>2. 处理工单<br>3. 验证设备状态 | 设备状态正确同步 |
#### 4.3.3 并发一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-CONC-001 | 工单并发分配 | 多个管理员同时分配同一工单 | 只有一个分配成功 |
| TC-CONC-002 | 库存并发扣减 | 多个操作同时扣减设备备件库存 | 库存扣减正确,不超扣 |
| TC-CONC-003 | 统计数据并发更新 | 多个工单同时完成,更新统计数据 | 统计数据准确 |
#### 4.3.4 缓存一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|--------|----------|----------|----------|
| TC-CACHE-001 | 权限缓存更新 | 1. 修改用户权限<br>2. 验证缓存更新 | 权限缓存正确更新 |
| TC-CACHE-002 | 项目信息缓存同步 | 1. 修改项目信息<br>2. 验证各服务缓存同步 | 缓存正确同步 |
---
## 五、测试执行计划
### 5.1 测试执行阶段
| 阶段 | 内容 | 时间 | 负责人 |
|------|------|------|--------|
| 第一阶段 | 单元测试补充与修复 | 2天 | 开发团队 |
| 第二阶段 | 后端集成测试编写与执行 | 3天 | 测试团队 |
| 第三阶段 | 前端E2E测试编写与执行 | 3天 | 测试团队 |
| 第四阶段 | 端到端业务流程测试 | 2天 | 测试团队 |
| 第五阶段 | 性能测试与安全测试 | 2天 | 测试团队 |
| 第六阶段 | 测试报告编写与评审 | 1天 | 测试团队 |
### 5.2 测试执行命令
#### 后端测试执行
```bash
# 执行所有测试
mvn clean test
# 执行指定模块测试
cd ether-ops && mvn test
# 执行集成测试
mvn verify -Pintegration-test
# 生成覆盖率报告
mvn jacoco:report
# 查看覆盖率
open target/site/jacoco/index.html
```
#### 前端测试执行
```bash
# 执行单元测试
npm run test
# 执行E2E测试
npm run test:e2e
# 执行E2E测试(UI模式)
npm run test:e2e:ui
# 查看测试报告
npm run test:e2e:report
```
### 5.3 持续集成配置
```yaml
# .github/workflows/integration-test.yml
name: Integration Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
backend-tests:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_DB: ether_test
POSTGRES_USER: test
POSTGRES_PASSWORD: test
ports:
- 5432:5432
rabbitmq:
image: rabbitmq:3-management
ports:
- 5672:5672
- 15672:15672
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Run Backend Tests
run: mvn clean verify -Pintegration-test
- name: Upload Coverage Report
uses: codecov/codecov-action@v3
frontend-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install Dependencies
run: cd ether-ui-admin && npm ci
- name: Run E2E Tests
run: cd ether-ui-admin && npm run test:e2e
- name: Upload Test Results
uses: actions/upload-artifact@v3
with:
name: playwright-report
path: ether-ui-admin/playwright-report/
```
---
## 六、测试报告模板
### 6.1 测试报告结构
```markdown
# Ether 智慧物业管理平台 - 集成测试报告
## 1. 测试概览
- 执行时间
- 测试环境
- 测试范围
- 测试结果汇总
## 2. 测试执行详情
### 2.1 后端测试结果
- 单元测试统计
- 集成测试统计
- 覆盖率报告
### 2.2 前端测试结果
- 组件测试统计
- E2E测试统计
## 3. 业务流程测试结果
- 工单管理流程
- 设备管理流程
- 巡检管理流程
- ...
## 4. 边界条件测试结果
- 数据边界测试
- 状态边界测试
- 输入边界测试
## 5. 数据一致性测试结果
- 事务一致性
- 关联数据一致性
- 并发一致性
## 6. 缺陷统计
- 缺陷列表
- 缺陷分布
- 缺陷趋势
## 7. 风险与建议
- 测试风险
- 改进建议
```
### 6.2 测试指标统计
| 指标 | 计算方式 | 目标值 |
|------|----------|--------|
| 测试通过率 | 通过用例数/总用例数 * 100% | >= 95% |
| 代码覆盖率 | 已覆盖代码行/总代码行 * 100% | >= 99% |
| 缺陷密度 | 缺陷数/代码行数 * 1000 | <= 0.5 |
| 缺陷修复率 | 已修复缺陷数/总缺陷数 * 100% | 100% |
| 回归通过率 | 回归通过数/回归总数 * 100% | 100% |
---
## 七、风险管理
### 7.1 测试风险识别
| 风险 | 影响 | 概率 | 应对措施 |
|------|------|------|----------|
| 测试环境不稳定 | 高 | 中 | 准备备用环境,使用容器化 |
| 测试数据准备困难 | 中 | 中 | 编写数据准备脚本,使用数据工厂 |
| 第三方服务不可用 | 高 | 低 | 使用Mock服务替代 |
| 测试时间不足 | 高 | 中 | 优先测试核心功能,自动化测试 |
| 测试覆盖率不足 | 高 | 低 | 持续监控覆盖率,补充测试用例 |
### 7.2 质量门禁
#### 代码提交门禁
- 单元测试通过率 >= 95%
- 新代码覆盖率 >= 80%
- 无严重代码质量问题
#### 合并请求门禁
- 所有测试用例通过
- 代码覆盖率 >= 99%
- 代码审查通过
- 无未解决的缺陷
#### 发布门禁
- 集成测试全部通过
- E2E测试全部通过
- 性能测试达标
- 安全测试通过
- 无严重及以上缺陷
---
## 八、附录
### 8.1 测试工具清单
| 工具 | 版本 | 用途 |
|------|------|------|
| JUnit 5 | 5.10.x | Java单元测试 |
| Spring Boot Test | 3.2.x | Spring集成测试 |
| Testcontainers | 1.19.x | 容器化测试 |
| MockMvc | - | API测试 |
| Jacoco | 0.8.x | 代码覆盖率 |
| Vitest | 4.0.x | Vue单元测试 |
| Playwright | 1.58.x | E2E测试 |
| Puppeteer | 24.x | 浏览器自动化 |
### 8.2 参考文档
- [Spring Boot Testing](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing)
- [Testcontainers Documentation](https://www.testcontainers.org/)
- [Playwright Documentation](https://playwright.dev/)
- [Ether项目测试用例](./测试用例/README.md)
- [Ether项目需求文档](./01-需求文档/产品需求说明书.md)
---
**文档维护**: 本文档随项目进展持续更新,每次测试执行后更新测试结果。
**版本历史**:
| 版本 | 日期 | 修改内容 | 修改人 |
|------|------|----------|--------|
| v1.0 | 2026-02-14 | 初始版本 | 测试专家 |