# 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 | 初始版本 | 测试专家 |
