4. 压测场景库设计原则:场景分类、覆盖率与可复用性

压测场景库是分布式事务集成测试的核心资产。设计原则决定了场景库能否系统性地暴露事务一致性问题、安全漏洞以及性能瓶颈。本节从场景分类、场景覆盖率和场景可复用性三个维度展开,确保场景库具备完备性、可度量性与工程化交付能力。

4.1 场景分类:四象限驱动

场景分类采用正常、异常、边界、安全四象限模型,覆盖分布式事务全生命周期。每个象限对应不同的测试目标与风险暴露面。

分类 测试目标 典型场景示例 预期结果
正常 验证核心事务路径在预期负载下的正确性与性能 两阶段提交(2PC)正常提交、TCC 正常 Confirm 事务最终一致,响应时间在 SLA 内
异常 模拟组件故障、网络分区、超时、资源耗尽 协调器宕机、参与者超时未响应、消息队列积压 事务回滚或补偿成功,不产生脏数据
边界 探索事务在极限条件下的行为拐点 事务超时阈值临界值、最大并发参与者数、单条消息体 1MB 系统在边界处行为可预测,不崩溃
安全 验证事务上下文中的权限隔离与数据防篡改 未授权参与者伪造事务请求、事务日志注入、令牌过期重放 权限校验失败,事务被拒绝或告警
实践建议:每个象限至少设计 3 个基础场景。安全场景往往被压测团队忽略,建议与安全工程师联合评审,将 OWASP 分布式事务相关攻击模式纳入场景库。
压测场景分类四象限模型 压测场景分类四象限 正常场景 2PC 正常提交 TCC Confirm 成功 Saga 正向补偿 消息最终一致 异常场景 协调器宕机 参与者超时 网络分区 消息丢失 边界场景 超时阈值临界 最大参与者数 消息体大小极限 并发数拐点 安全场景 未授权事务请求 令牌重放攻击 事务日志注入 权限绕过 异常/边界 正常/安全

4.2 场景覆盖率:量化与度量

场景覆盖率是衡量场景库完备性的关键指标。我们采用三层覆盖率模型,从功能、代码与风险三个维度进行量化。

  • 功能覆盖率:每个分布式事务协议(2PC、TCC、Saga、消息事务)至少覆盖正常、异常、边界、安全各 1 个场景。
  • 代码覆盖率:压测场景应触发事务协调器、参与者、补偿逻辑、超时处理等核心代码路径。建议行覆盖率 ≥ 70%,分支覆盖率 ≥ 60%。
  • 风险覆盖率:基于历史故障库与威胁建模,识别高风险场景(如脑裂、双主、补偿幂等失效),确保场景库覆盖已识别风险的 90% 以上。
覆盖率维度 度量方式 推荐阈值 工具/方法
功能覆盖率 场景数 / 协议组合数 ≥ 80% 场景矩阵评审
代码覆盖率 JaCoCo / Cobertura 报告 行 ≥ 70%,分支 ≥ 60% 集成测试 + 代码插桩
风险覆盖率 已覆盖风险项 / 总风险项 ≥ 90% 风险登记册 + 场景映射
常见陷阱:仅关注功能覆盖率而忽略风险覆盖率,会导致场景库“看起来全面”但无法发现生产环境中的关键故障。建议每季度基于线上故障复盘更新风险登记册,并反向补充场景。

4.3 场景可复用性:参数化与模板化

可复用性决定了场景库的维护成本与扩展效率。设计原则包括参数化、模板化与分层抽象。

  • 参数化:将事务超时时间、参与者数量、消息体大小、重试次数等提取为外部参数,避免硬编码。同一场景可通过参数组合衍生出多个压测用例。
  • 模板化:定义场景模板(如“2PC 超时模板”、“TCC 补偿模板”),填充具体业务数据即可生成新场景。模板包含前置条件、执行步骤、断言规则与清理脚本。
  • 分层抽象:将场景库分为基础层(协议原子操作)、业务层(具体业务事务流)与组合层(多事务交织)。基础层场景可被业务层与组合层复用。
压测场景可复用性分层架构 场景可复用性分层架构 组合层场景 多事务交织 · 跨服务编排 · 混合协议 业务层场景 订单创建事务 · 账户转账 · 库存扣减 基础层场景 2PC Prepare/Commit · TCC Try/Confirm · Saga 补偿 复用方向 基础层 → 业务层 → 组合层

4.4 场景库设计原则总结

将上述三个维度整合为可落地的设计原则清单,供架构评审与持续优化使用。

  1. 完备性优先:四象限分类确保无遗漏,每个象限至少 3 个场景。
  2. 覆盖率可度量:功能、代码、风险三层覆盖率纳入 CI/CD 门禁,低于阈值则阻断发布。
  3. 复用性驱动:参数化 + 模板化 + 分层抽象,避免场景重复建设。
  4. 安全内建:安全场景与正常场景同等地位,不因压测压力大而裁剪安全校验。
  5. 持续演进:场景库与线上故障、威胁模型、协议版本同步更新,每迭代至少评审一次。