4. 集成验收测试执行步骤

适用场景

  • 微服务或模块化系统在完成单元测试、模块集成后,需验证跨模块交互正确性。
  • 依赖外部服务(第三方API、数据库、消息队列)未完全就绪,需隔离测试的场景。
  • 涉及数据在多个子系统间流转的关键业务流程(如订单、支付、库存)上线前验证。
  • 需要模拟网络超时、服务不可用、参数异常等边界条件以验证系统健壮性。

前置条件

  • 环境就绪:集成测试环境已部署并连通,各被测模块版本与生产目标对齐。
  • 测试数据准备:至少包含正常业务数据、边界数据、异常触发数据各一套。
  • 依赖模拟工具:已安装并配置 Mock 服务(如 WireMock、MockServer)或 Stub 桩。
  • 测试脚本/用例:基于接口文档和业务场景编写的验收测试用例已评审通过。
  • 监控与日志:链路追踪(如 SkyWalking)、业务日志采集、API 网关日志已可实时查看。

操作步骤

  1. 接口验证
    • 按照接口文档逐项校验请求/响应的字段、类型、必选/可选、枚举值范围。
    • 验证 HTTP 状态码、响应头(Content-Type、Cache-Control 等)是否正确。
    • 使用契约测试工具(如 Pact)或 Postman/Swagger 自动断言。
    • 示例:校验用户服务查询接口
    GET /api/v1/users/1001
    期望响应:
    {
      "code": 0,
      "data": {
        "userId": 1001,
        "userName": "测试用户A",
        "status": "ACTIVE",
        "createTime": "2025-01-15T10:00:00Z"
      }
    }
    实际断言:status 200, body.data.userId 等于 1001
  2. 数据流转
    • 模拟典型业务场景(如创建订单→扣库存→生成支付单),追踪数据在A→B→C服务中的完整变化。
    • 通过数据库查询、消息队列消费端日志、缓存(Redis)访问记录验证中间状态。
    • 必要时使用“数据快照”工具比对预期值和实际值。
    • 重点验证:事务一致性、幂等性、数据版本号更新。
  3. 依赖服务模拟
    • 对未就绪或高开销的第三方依赖(如短信、支付网关)配置 Mock 返回固定响应或延时响应。
    • 对关键依赖(如结算中心)提供 Stub 桩,模拟成功、失败、超时三种场景。
    • 记录 Mock 调用次数、参数和返回值,确保被测模块正确调用依赖。
    • 示例:用 WireMock 模拟支付回调
    # WireMock 存根配置(Java DSL 示例)
    stubFor(post(urlPathEqualTo("/payment/callback"))
      .withHeader("Authorization", containing("Bearer"))
      .willReturn(aResponse()
        .withStatus(200)
        .withHeader("Content-Type", "application/json")
        .withBody("{\"status\":\"SUCCESS\",\"payId\":\"P20250301001\"}")
        .withFixedDelay(1000)));
  4. 异常场景
    • 输入异常:空值、超长字符串、特殊字符、类型错误。
    • 依赖异常:Mock 返回 5xx、连接超时、响应格式错误。
    • 并发异常:同一数据同时进行读取与修改,验证锁或乐观锁机制。
    • 幂等异常:重复发送同一请求(如重复支付回调),验证防重放逻辑。
    • 每个异常场景需确认:业务方收到明确错误码、错误描述,系统不崩溃、数据不脏写。
集成验收测试执行流程图 集成验收测试执行流程 开始测试 1. 接口验证 请求/响应字段、状态码、契约检查 2. 数据流转 业务场景全链路数据一致性验证 3. 依赖服务模拟 Mock/Stub 成功、失败、超时场景 4. 异常场景 输入异常、依赖异常、并发/幂等异常 全部通过? 测试通过 不通过 修复后重新验证 循环迭代反馈 任何步骤失败,修复后从步骤1重跑

输入 / 输出物

类型 名称 规格或内容 责任人
输入 接口文档(Swagger/OpenAPI) 涵盖所有对外接口的请求/响应定义 API 研发工程师
输入 集成测试用例 包含正常、异常、边界场景的脚本与预期 测试工程师
输入 Mock/Stub 配置文件 WireMock mapping JSON、MockServer 期望配置 测试工程师 / 运维
输出 集成测试报告 通过/失败统计、失败详情、覆盖率、延迟分布 测试工程师
输出 日志与链路追踪快照 关键业务 TraceId 及对应时间戳、状态码 测试工程师 / 运维
输出 异常场景复现步骤及截图 用于缺陷登记和回归验证 测试工程师

责任边界

角色 职责 不负责
测试工程师 编写并执行集成测试用例;配置 Mock;记录缺陷并发起修复跟踪 代码修正、环境部署(仅协助)
研发工程师 提供接口文档、修复缺陷、配合分析数据流转异常 不直接修改测试脚本(可评审)
运维 / DevOps 保障集成测试环境稳定;提供 Mock 服务部署与监控 不参与测试用例设计
发布经理 根据集成测试报告裁决是否进入发布评审阶段 不执行具体测试

记录材料

  • 集成测试执行日志:包含每条用例的开始/结束时间、执行结果、失败断言详情。
  • Mock 调用记录:WireMock 请求日志(请求 URL、参数、响应状态、延迟)。
  • 数据库变更快照:关键表中受影响的记录的 before/after 截图或 SQL 日志。
  • 异常场景缺陷单:每个异常必须关联一个 Jira / 禅道缺陷,附带复现步骤、预期与实际结果。
  • 测试报告签字确认:测试负责人、研发负责人、发布经理三方确认。

异常处理

常见异常及应对措施:
  • 接口响应不匹配:优先确认接口文档版本是否最新;若文档正确则标记为缺陷,要求研发修复。
  • 数据流转中数据丢失或重复:检查事务边界、消息队列 ack 机制、幂等实现;必要时增加断点日志。
  • Mock 服务响应未按预期返回:验证 Mock Stub 配置是否加载成功,检查端口及请求匹配规则。
  • 异常场景触发系统崩溃:立即暂停测试,保留现场(dump、日志),优先排查内存/线程安全问题。
  • 环境网络抖动导致超时:区分是应用超时还是环境问题;可重试 3 次,若仍失败则记录为环境异常,由运维排查。
注意: 所有异常处理必须记录到测试报告中,不得隐瞒或跳过。若因时间紧迫需跳过一个异常场景,必须由发布经理书面批准并在下一轮集成测试中补测。

验收标准

  • 所有接口验证用例 100% 通过(包含正常、边界、异常请求)。
  • 至少 3 条核心业务数据流转链路被完整覆盖,且数据最终状态与预期一致。
  • 依赖服务模拟至少覆盖成功、失败、超时三种场景,无因 Mock 配置错误导致的误判。
  • 异常场景测试通过率 ≥95%,未通过的异常用例必须有明确的缺陷单且已评估为低风险或已在修复中。
  • 测试报告完整、清晰,包含执行时间、通过率、失败详情、异常场景复现步骤。
  • 所有记录的缺陷单状态为“已关闭”或“已标记为低风险可发布”,并得到发布经理确认。