联调与集成测试
版本说明:本文基于 Claude Code 与 OpenCode 的多服务联调实践撰写,适用于企业级开发团队。
适用对象:中高级开发者、测试工程师、技术负责人。
前置知识:第20篇测试编写、第23篇跨服务联动。
技术版本:Java 17、Spring Boot 3.2、WireMock 3.x、Docker Compose V2、JUnit 5。本文代码基于这些版本验证,其他版本可能需要调整。
一、联调的挑战与AI的价值
单元测试验证的是单个服务的逻辑正确性,但服务之间的交互是否正确——接口参数是否匹配、数据格式是否一致、异常传播是否符合预期——需要通过联调来验证。
Testkube 的微服务测试指南指出,微服务的测试金字塔中,集成测试(包括联调测试)占据了关键位置,因为它验证的是服务之间的交互行为 。Webomates 的分析进一步指出,AI 在复杂微服务架构中的测试策略包括契约测试、自愈脚本和智能测试生成,能有效提升联调效率 。
AI 在联调中的价值主要体现在三个方面:
| 环节 | AI 的贡献 |
|---|---|
| 环境搭建 | 自动生成 Docker Compose 配置和服务启动脚本 |
| Mock 策略 | 智能识别哪些外部依赖需要 Mock、如何 Mock |
| 问题定位 | 分析跨服务日志链路,快速定位根因 |
| 测试生成 | 根据接口契约自动生成跨服务集成测试 |
但 AI 的能力有边界:它无法解决网络不通、权限不足、环境配置缺失这类基础设施问题。联调的第一步永远是确保环境可用。
二、第一步:生成联调环境配置
环境配置的标准化
联调环境需要明确以下信息:
| 配置项 | 说明 | AI 能做的事 |
|---|---|---|
| 服务列表 | 参与联调的所有服务 | 根据项目结构自动识别 |
| 启动顺序 | 服务之间的依赖关系 | 根据接口调用关系推导 |
| 配置文件 | 各服务的环境变量 | 读取已有配置,生成本地版 |
| 外部依赖 | 数据库、Redis、消息队列 | 识别哪些需要真实、哪些需要 Mock |
| 端口映射 | 避免端口冲突 | 自动分配不冲突的端口 |
让AI生成Docker Compose配置
把参与联调的服务列表交给 AI,让它生成 Docker Compose 配置:
# AI 生成的联调环境配置(示例)
# 注意:Docker Compose V2 已废弃 version 字段,无需指定
services:
order-service:
build: ./order-service
ports:
- "8081:8080"
environment:
- DB_HOST=mysql
- REDIS_HOST=redis
- COUPON_SERVICE_URL=http://coupon-service:8082
depends_on:
- mysql
- redis
coupon-service:
build: ./coupon-service
ports:
- "8082:8080"
environment:
- DB_HOST=mysql
- REDIS_HOST=redis
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=testpwd
volumes:
- ./init-sql:/docker-entrypoint-initdb.d
redis:
image: redis:7-alpine
ports:
- "6379:6379"
启动联调环境:
# 启动所有服务(后台运行)
docker compose up -d
# 查看服务状态,确认全部启动成功
docker compose ps
# 查看日志排查启动问题
docker compose logs -f order-service
停止并清理环境:
docker compose down -v
关键技巧: 在提示词中告诉 AI 哪些服务需要真实运行、哪些需要 Mock。比如"MySQL 和 Redis 用真实服务,第三方支付网关用 WireMock Mock"。这样 AI 生成的配置才符合实际需求。
三、第二步:Mock外部依赖
AI 编程知识库会员专享内容
开通后解锁「联调与集成测试」全文,AI 编程知识库全年访问
扫码添加企业微信,找大熊掌门开通会员

添加后说明想开通的会员类型即可