以测试金字塔分层,用 Docker 保证环境一致,用Testcontainers做组件/集成测试,用契约测试解耦服务间验证最后接入CI/CD自动执行。
测试分层
单元测试:在构建阶段容器内执行,依赖全部 Mock,追求快。
组件测试:核心层。用 Testcontainers 启动被测服务和真实依赖,如数据库、Redis、MQ,黑盒验证单服务行为。
契约测试:消费者驱动。消费者发布契约到 Pact Broker,提供者在 CI 中验证契约,服务可独立部署。
集成/E2E 测试:用 Docker Compose 编排完整环境,所有服务 healthcheck 通过后再跑测试,工具可选 Playwright/Cypress。
性能测试:Locust 或 JMeter 容器化,master/worker 模式运行。
环境编排
Docker Compose 适合 E2E:统一编排基础设施、应用、测试运行器。
Testcontainers 适合组件/集成:按测试动态创建容器,用完即毁。
WireMock 模拟外部 API 或未就绪服务,支持延迟、错误注入、录制回放。
重点:必须用 healthcheck和depends_on condition控制启动顺序。
测试数据
每次测试从干净状态开始。
数据初始化脚本与容器启动绑定,或使用独立 data-seeder。
并行测试用独立数据库/schema 隔离。
可用模板数据库或 tmpfs 加速重置。
CI/CD 集成
流水线建议四阶段:
构建加单元测试
组件测试加契约测试
集成、E2E 测试
性能测试
并行隔离方式:
Docker Compose:每个任务独立 project name。
Kubernetes:每次 CI 用独立 ephemeral namespace。
测试结束自动销毁环境。
推荐工具
单元测试:JUnit 5 、pytest 、Jest
组件测试:Testcontainers加RestAssured
契约测试:Pact加Pact Broker
服务虚拟化:WireMock
E2E:Playwright 、Cypress
性能:Locust 、JMeter
报告:Allure
实践
环境一致性优先,Docker 消除环境差异。
不要把验证都压在 E2E 上,主体靠组件测试和契约测试。
Testcontainers 是容器化微服务测试的核心工具。
契约测试让服务能独立部署。
数据必须自动初始化、自动隔离、自动清理。
健康检查通过再执行测试,测试后销毁环境。