Appearance
测试策略
**本文引用的文件** - [jest.config.js](file://dm/lemes-web/jest.config.js) - [lemes-web/package.json](file://dm/lemes-web/package.json) - [lemes-web/.travis.yml](file://dm/lemes-web/.travis.yml) - [lemes-web/AGENTS.md](file://dm/AGENTS.md) - [lemes-cloud/pom.xml](file://lemes-cloud/pom.xml) - [lemes-business-devicemate/pom.xml](file://lemes-cloud/lemes-business-devicemate/pom.xml) - [lemes-cloud/AGENTS.md](file://lemes-cloud/AGENTS.md) - [lemes-framework-datasource/DataBaseAdapter.java](file://lemes-cloud/lemes-framework/lemes-framework-datasource/src/main/java/com/lenovo/lemes/datasource/adapter/DataBaseAdapter.java) - [lemes-framework-datasource/DynamicDbName.java](file://lemes-cloud/lemes-framework/lemes-framework-datasource/src/main/java/com/lenovo/lemes/datasource/constants/DynamicDbName.java) - [lemes-business-devicemate/AGENTS.md](file://lemes-cloud/lemes-business-devicemate/AGENTS.md)目录
引言
本测试策略面向 DeviceMate 微服务架构与多端应用(Vue 前端、UniApp 移动端)的测试实践,覆盖单元测试、集成测试与端到端测试,结合测试金字塔模型,明确 Mock 策略、测试数据管理、服务间通信测试、数据库测试与外部依赖模拟方案,并给出用例设计指南、覆盖率与质量门禁建议,以及性能、安全与兼容性测试的实施方案,帮助测试工程师与开发团队建立系统化、可落地的质量保障体系。
项目结构
DeviceMate 由三层构成:
- 前端层:lemes-web(Vue 2 + ElementUI)、devicemate-app(UniApp)
- 微服务层:lemes-cloud(Spring Cloud + Spring Boot + MyBatis Plus + Nacos + Redis + PostgreSQL)
- 运维与测试支撑:Jest 单测、Travis CI、Maven/Surefire 插件、Docker/Kubernetes 部署
图表来源
章节来源
核心组件
- 前端测试基础设施
- Jest 单元测试配置与匹配规则、覆盖率收集范围、快照序列化器、资源转换器
- Vue CLI 提供的 test:unit 与 test:ci 脚本
- Travis CI 触发测试脚本
- 后端测试基础设施
- Maven 项目聚合与模块划分,Surefire 插件配置(当前默认跳过测试)
- Spring Boot Starter Test、JUnit、Lombok 等依赖
- 动态数据源适配与多库常量定义
- 测试运行与质量门禁
- 前端:Jest 配置 + CI 流水线
- 后端:Maven 构建 + 测试开关与失败忽略策略
章节来源
- jest.config.js:1-27
- lemes-web/package.json:8-14
- lemes-web/.travis.yml:1-5
- lemes-cloud/pom.xml:255-285
- lemes-framework-datasource/DataBaseAdapter.java:11-15
- lemes-framework-datasource/DynamicDbName.java:9-17
架构总览
测试金字塔在 DeviceMate 的落地要点:
- 底层:单元测试(Jest/Vue 单测 + JUnit/Spring 测试),强调快速反馈与高覆盖率
- 中层:集成测试(服务间通信、数据库访问、外部依赖模拟)
- 顶层:端到端测试(跨端用户旅程、真实浏览器/移动端环境)
详细组件分析
前端测试:Jest 配置与用例组织
- 测试匹配与执行
- 使用 Vue CLI 的 test:unit 脚本触发 Jest
- 测试文件匹配模式:tests/unit/**/.spec.(js|jsx|ts|tsx) 或 tests/.(js|jsx|ts|tsx)
- 转换与别名
- .vue 文件使用 vue-jest,静态资源使用 jest-transform-stub,JS 使用 babel-jest
- 模块别名 @ 映射至 src 目录
- 覆盖率与报告
- 收集范围覆盖 utils 与 components,排除鉴权与请求工具
- 输出 lcov 与 text-summary 报告
- CI 集成
- Travis CI 使用 npm run test 触发测试
图表来源
章节来源
后端测试:Maven 与 Spring 生态
- 模块与依赖
- lemes-cloud 聚合工程,包含网关、认证、框架、通用服务与 DeviceMate 业务域
- 业务域进一步拆分为 device/store/common/workflow 服务
- 测试依赖
- Spring Boot Starter Test、JUnit、Lombok
- 业务域引入 Swagger、EasyPOI、Redisson、Gson、校验组件等
- 测试执行
- Surefire 插件当前配置为跳过测试并忽略失败,需在 CI 中显式开启
- 建议在 CI 中使用 -DskipTests=false -DtestFailureIgnore=false
图表来源
章节来源
数据库与动态数据源测试
- 动态数据源适配
- 接口定义不同数据库方言的适配方法,便于在测试中切换数据源
- 多库常量
- 定义 nabftools/prom/maas 等库名常量,便于测试多租户或多库场景
- 测试建议
- 使用内存库或测试专用库,结合事务回滚或测试表隔离
- 在集成测试中通过适配器选择 MySQL/DB2/PGSQL,确保跨库一致性
图表来源
- lemes-framework-datasource/DataBaseAdapter.java:11-15
- lemes-framework-datasource/DynamicDbName.java:9-17
章节来源
- lemes-framework-datasource/DataBaseAdapter.java:11-15
- lemes-framework-datasource/DynamicDbName.java:9-17
服务间通信测试
- 测试目标
- 验证网关路由、认证中心鉴权、服务间 Feign/HTTP 调用链路
- 策略
- 使用 Mock 服务或容器化依赖(Nacos、Redis、DB)进行集成测试
- 对外依赖(如第三方接口)采用桩或替身对象
- 质量门禁
- 服务启动后进行健康检查与链路探测,失败即阻断发布
[此图为概念流程图,不对应具体源码文件,故不提供图表来源]
测试数据管理
- 前端
- 使用 Jest 快照与测试夹具(fixtures)管理 UI/数据状态
- 后端
- 使用内存库或测试专用库,配合事务回滚或测试表隔离
- 通过 @DirtiesContext 或 @Transactional 控制测试隔离与清理
- 通用
- 建立种子数据与工厂方法,保证测试可重复性与可维护性
[本节为通用实践说明,不直接分析具体文件,故不提供章节来源]
依赖分析
- 前端依赖
- Jest、vue-jest、babel-jest、jest-transform-stub、快照序列化器
- CI 通过 Travis 触发测试脚本
- 后端依赖
- Spring Boot Test、JUnit、Lombok
- 动态数据源适配与多库常量
- 构建与测试
- Maven 聚合工程,模块化拆分;Surefire 插件当前跳过测试,建议在 CI 中启用
图表来源
- jest.config.js:1-27
- lemes-web/package.json:8-14
- lemes-web/.travis.yml:1-5
- lemes-cloud/pom.xml:15-28
- lemes-business-devicemate/pom.xml:19-24
- lemes-framework-datasource/DataBaseAdapter.java:11-15
- lemes-framework-datasource/DynamicDbName.java:9-17
章节来源
性能考虑
- 前端
- 使用 Jest 快速执行单元测试,避免加载真实 DOM
- 对异步组件与网络请求进行 Mock,减少 IO 延迟
- 后端
- 在集成测试中使用内存库与本地缓存,缩短测试时间
- 并发测试建议在独立环境执行,避免共享资源竞争
- 通用
- 建立性能基线与回归阈值,结合 CI 报告进行趋势监控
[本节为通用指导,不直接分析具体文件,故不提供章节来源]
故障排查指南
- 前端
- 若 Jest 无法识别 .vue 文件,检查 vue-jest 与 babel-jest 版本与 jest.config.js 的 transform 配置
- 若覆盖率缺失,核对 collectCoverageFrom 与 moduleNameMapper 的路径映射
- 后端
- 若测试被跳过,检查 Maven Surefire 插件配置,确保在 CI 中启用测试
- 若依赖未就绪,确认 Nacos、Redis、数据库容器已启动并通过健康检查
- 通用
- 使用最小化测试集定位问题,逐步缩小范围
- 记录前置条件(依赖版本、环境变量、配置文件)以便复现
章节来源
- jest.config.js:7-14
- lemes-web/package.json:8-14
- lemes-cloud/pom.xml:347-353
- lemes-cloud/AGENTS.md:75-79
结论
DeviceMate 的测试策略应以测试金字塔为核心,前端以 Jest 为基础,后端以 Spring 测试与 Maven 为支撑,结合 Mock 与外部依赖模拟,建立完善的单元、集成与端到端测试体系。通过明确的覆盖率与质量门禁、规范的测试数据管理与服务间通信测试,确保在微服务架构下的稳定性与可维护性。
附录
测试金字塔与工具选型
- 单元测试
- 前端:Jest + vue-jest + 快照
- 后端:JUnit + Spring Boot Test
- 集成测试
- 前端:Jest + Mock 服务/容器化依赖
- 后端:@SpringBootTest + Testcontainers/嵌入式容器
- 端到端测试
- Web:Cypress/Puppeteer
- 移动端:Appium/Android Emulator/iOS Simulator
用例设计指南
- 前端
- 覆盖核心交互、边界输入、错误分支与可访问性
- 使用快照稳定 UI 回归
- 后端
- 覆盖控制器、服务、数据访问层
- 关注异常路径、幂等性与并发安全
- 服务间
- 覆盖鉴权、限流、熔断与降级路径
- 使用契约测试(如 Pact)保障接口一致性
覆盖率与质量门禁
- 建议覆盖率门槛
- 行为覆盖率:≥80%
- 分支覆盖率:≥70%
- 质量门禁
- 代码审查通过 + 单元测试全量通过 + 集成测试通过 + 覆盖率达标 + CI 报告通过
性能测试、安全测试与兼容性测试
- 性能
- 基准测试与回归测试,关注响应时间与吞吐量
- 安全
- 渗透测试与依赖漏洞扫描,强化认证与授权
- 兼容性
- 多浏览器、多终端、多语言与多数据库版本验证