集成测试通过条件:别等上线才发现模块连不上

做项目时,你是不是也遇到过这种尴尬:每个模块单独跑都好好的,一合到一起就报错、卡死、数据对不上?比如用户登录模块能验密码,订单模块能生成单,可一登录就下单,直接 500 —— 这就是集成测试没过的真实写照。

集成测试不是“跑一遍就算数”

很多人把集成测试当成走个过场:接口调通了、页面能打开、不崩溃,就点“通过”。其实,真正的通过条件得盯住三件事:接口能通、数据能对、逻辑能转。

1. 所有预设接口调用成功,且返回符合约定

不只是 HTTP 状态码是 200,还得看响应体。比如用户中心返回的 user_id 是字符串还是数字?订单服务传过去的 amount 单位是“分”还是“元”?前后端约定错了,集成阶段立马露馅。

常见坑:
• 调用支付网关时,测试环境用了模拟地址,但实际集成时忘了切回正式地址;
• 微服务间用 JSON 通信,某个字段从 "status": 1 改成 "status": "active",消费方没同步更新解析逻辑。

2. 跨模块数据流转完整、一致、可追溯

举个例子:用户在前端提交一笔订单,订单号生成后,要同步写进库存系统扣减、推送到消息队列发通知、再存进日志服务留痕。集成测试得验证这整条链路上——

  • 库存表里对应商品的 stock 确实减了 1;
  • 消息队列里有且仅有一条 order_created 事件;
  • 日志中该订单的 trace_id 全链路一致。

漏掉任意一环,都不算通过。

3. 业务关键路径无阻断、无异常降级

不是所有功能都要测全,但核心路径必须稳。比如电商场景下,“加购 → 结算 → 支付 → 成功跳转”这一串动作,中间任何一步抛出未捕获异常、超时未处理、或静默失败(比如支付回调没收到但前端显示“已支付”),都属于未通过。

一个实用判断法:打开浏览器开发者工具的 Network 面板,手动走一遍主流程,盯着每条请求的 Status、Response、Timing —— 如果哪次出现红色错误、Pending 卡住、或者 Response 里写着 {"code": 500, "msg": "unknown error"},那就别急着打勾。

怎么快速验证是否真过了?

建议在 CI 流水线里加三道硬卡点:

1. 接口契约检查:用 Pact 或 OpenAPI Validator 校验各服务提供的 Swagger 文档与实际响应是否一致;
2. 数据一致性快照:在流程起始和结束分别查 DB,比对关键字段(如余额、库存、状态);
3. 日志关键词扫描:grep -q "ORDER_CREATED" service-a.log && grep -q "STOCK_DEDUCTED" service-b.log

别信“我本地测过了”,集成环境才是真实战场。数据库是共享的?缓存是共用的?配置中心的开关开没开?这些细节,往往比代码本身更决定集成成败。

记住:集成测试通过,不是“没报错”,而是“该发生的都发生了,不该发生的都没发生”。