24 KiB
24 KiB
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 测试目标
主要目标
- 业务流程覆盖: 验证所有核心业务流程端到端正确执行
- 边界条件覆盖: 验证系统在边界条件下的正确性和稳定性
- 数据一致性覆盖: 验证数据在各模块间的正确流转和一致性
- 测试覆盖率达到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依赖配置
<!-- 测试依赖 -->
<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)
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)
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. 创建工单 2. 分配工单 3. 接受工单 4. 开始处理 5. 完成工单 6. 验收通过 7. 关闭工单 |
每个状态转换正确,流程记录完整 |
| TC-INT-WORK-002 | 工单转派流程 | 1. 创建并分配工单 2. 转派给其他人员 3. 新人员接受处理 |
转派记录正确,通知发送正确 |
| TC-INT-WORK-003 | 工单挂起恢复流程 | 1. 创建并开始处理工单 2. 挂起工单 3. 恢复工单 4. 继续处理 |
挂起时间记录正确,状态转换正确 |
| TC-INT-WORK-004 | 工单退回重新分配流程 | 1. 创建并分配工单 2. 处理人退回 3. 重新分配 4. 新人处理 |
退回原因记录正确,重新分配成功 |
| TC-INT-WORK-005 | 工单验收不通过流程 | 1. 完成工单 2. 验收不通过 3. 重新处理 4. 再次验收 |
状态回退正确,处理记录完整 |
4.1.2 设备管理关联流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-INT-ASSET-001 | 设备报修到维修完成流程 | 1. 扫描设备二维码 2. 创建报修工单 3. 处理工单 4. 更新设备状态 |
工单与设备关联正确,设备状态更新 |
| TC-INT-ASSET-002 | 设备维修历史查询 | 1. 创建多个设备工单 2. 完成处理 3. 查询设备维修历史 |
维修历史完整,统计准确 |
4.1.3 巡检管理流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-INT-INSP-001 | 巡检计划执行流程 | 1. 创建巡检计划 2. 生成巡检任务 3. 执行巡检 4. 上报异常 5. 创建整改工单 |
任务生成正确,异常上报成功 |
| TC-INT-INSP-002 | 巡检异常转工单流程 | 1. 巡检发现异常 2. 自动创建工单 3. 处理工单 4. 关联巡检记录 |
工单自动创建,关联关系正确 |
4.1.4 投诉建议处理流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-INT-COMP-001 | 投诉处理完整流程 | 1. 提交投诉 2. 指派处理人 3. 处理投诉 4. 回复处理结果 5. 用户评价 |
流程完整,评价记录正确 |
| TC-INT-COMP-002 | 投诉升级处理流程 | 1. 提交投诉 2. 超时未处理 3. 自动升级 4. 上级处理 |
升级机制正确,通知发送 |
4.1.5 满意度调查流程测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-INT-SAT-001 | 满意度调查创建到统计流程 | 1. 创建满意度调查 2. 发送调查邀请 3. 用户填写 4. 统计分析 |
调查数据完整,统计准确 |
| TC-INT-SAT-002 | 工单满意度评价流程 | 1. 完成工单 2. 发送评价邀请 3. 用户评价 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. 创建工单 2. 触发异常 3. 验证数据回滚 |
工单和流程记录全部回滚 |
| TC-TRANS-002 | 批量操作事务一致性 | 1. 批量创建工单 2. 部分失败 3. 验证全部回滚 |
要么全部成功,要么全部回滚 |
| TC-TRANS-003 | 跨服务事务一致性 | 1. 创建工单并发送通知 2. 通知发送失败 3. 验证补偿机制 |
最终数据一致 |
4.3.2 关联数据一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-REL-001 | 用户删除关联数据处理 | 1. 用户有工单记录 2. 尝试删除用户 3. 验证处理结果 |
正确处理关联数据 |
| TC-REL-002 | 项目删除级联处理 | 1. 项目有工单、设备、巡检记录 2. 尝试删除项目 3. 验证级联处理 |
正确处理级联删除或拒绝 |
| TC-REL-003 | 设备状态与工单状态同步 | 1. 创建设备维修工单 2. 处理工单 3. 验证设备状态 |
设备状态正确同步 |
4.3.3 并发一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-CONC-001 | 工单并发分配 | 多个管理员同时分配同一工单 | 只有一个分配成功 |
| TC-CONC-002 | 库存并发扣减 | 多个操作同时扣减设备备件库存 | 库存扣减正确,不超扣 |
| TC-CONC-003 | 统计数据并发更新 | 多个工单同时完成,更新统计数据 | 统计数据准确 |
4.3.4 缓存一致性测试
| 用例ID | 测试场景 | 测试步骤 | 期望结果 |
|---|---|---|---|
| TC-CACHE-001 | 权限缓存更新 | 1. 修改用户权限 2. 验证缓存更新 |
权限缓存正确更新 |
| TC-CACHE-002 | 项目信息缓存同步 | 1. 修改项目信息 2. 验证各服务缓存同步 |
缓存正确同步 |
五、测试执行计划
5.1 测试执行阶段
| 阶段 | 内容 | 时间 | 负责人 |
|---|---|---|---|
| 第一阶段 | 单元测试补充与修复 | 2天 | 开发团队 |
| 第二阶段 | 后端集成测试编写与执行 | 3天 | 测试团队 |
| 第三阶段 | 前端E2E测试编写与执行 | 3天 | 测试团队 |
| 第四阶段 | 端到端业务流程测试 | 2天 | 测试团队 |
| 第五阶段 | 性能测试与安全测试 | 2天 | 测试团队 |
| 第六阶段 | 测试报告编写与评审 | 1天 | 测试团队 |
5.2 测试执行命令
后端测试执行
# 执行所有测试
mvn clean test
# 执行指定模块测试
cd ether-ops && mvn test
# 执行集成测试
mvn verify -Pintegration-test
# 生成覆盖率报告
mvn jacoco:report
# 查看覆盖率
open target/site/jacoco/index.html
前端测试执行
# 执行单元测试
npm run test
# 执行E2E测试
npm run test:e2e
# 执行E2E测试(UI模式)
npm run test:e2e:ui
# 查看测试报告
npm run test:e2e:report
5.3 持续集成配置
# .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 测试报告结构
# 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 参考文档
文档维护: 本文档随项目进展持续更新,每次测试执行后更新测试结果。
版本历史:
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2026-02-14 | 初始版本 | 测试专家 |