4. 压测场景库设计原则:场景分类、覆盖率与可复用性
压测场景库是分布式事务集成测试的核心资产。设计原则决定了场景库能否系统性地暴露事务一致性问题、安全漏洞以及性能瓶颈。本节从场景分类、场景覆盖率和场景可复用性三个维度展开,确保场景库具备完备性、可度量性与工程化交付能力。
4.1 场景分类:四象限驱动
场景分类采用正常、异常、边界、安全四象限模型,覆盖分布式事务全生命周期。每个象限对应不同的测试目标与风险暴露面。
| 分类 | 测试目标 | 典型场景示例 | 预期结果 |
|---|---|---|---|
| 正常 | 验证核心事务路径在预期负载下的正确性与性能 | 两阶段提交(2PC)正常提交、TCC 正常 Confirm | 事务最终一致,响应时间在 SLA 内 |
| 异常 | 模拟组件故障、网络分区、超时、资源耗尽 | 协调器宕机、参与者超时未响应、消息队列积压 | 事务回滚或补偿成功,不产生脏数据 |
| 边界 | 探索事务在极限条件下的行为拐点 | 事务超时阈值临界值、最大并发参与者数、单条消息体 1MB | 系统在边界处行为可预测,不崩溃 |
| 安全 | 验证事务上下文中的权限隔离与数据防篡改 | 未授权参与者伪造事务请求、事务日志注入、令牌过期重放 | 权限校验失败,事务被拒绝或告警 |
实践建议:每个象限至少设计 3 个基础场景。安全场景往往被压测团队忽略,建议与安全工程师联合评审,将 OWASP 分布式事务相关攻击模式纳入场景库。
4.2 场景覆盖率:量化与度量
场景覆盖率是衡量场景库完备性的关键指标。我们采用三层覆盖率模型,从功能、代码与风险三个维度进行量化。
- 功能覆盖率:每个分布式事务协议(2PC、TCC、Saga、消息事务)至少覆盖正常、异常、边界、安全各 1 个场景。
- 代码覆盖率:压测场景应触发事务协调器、参与者、补偿逻辑、超时处理等核心代码路径。建议行覆盖率 ≥ 70%,分支覆盖率 ≥ 60%。
- 风险覆盖率:基于历史故障库与威胁建模,识别高风险场景(如脑裂、双主、补偿幂等失效),确保场景库覆盖已识别风险的 90% 以上。
| 覆盖率维度 | 度量方式 | 推荐阈值 | 工具/方法 |
|---|---|---|---|
| 功能覆盖率 | 场景数 / 协议组合数 | ≥ 80% | 场景矩阵评审 |
| 代码覆盖率 | JaCoCo / Cobertura 报告 | 行 ≥ 70%,分支 ≥ 60% | 集成测试 + 代码插桩 |
| 风险覆盖率 | 已覆盖风险项 / 总风险项 | ≥ 90% | 风险登记册 + 场景映射 |
常见陷阱:仅关注功能覆盖率而忽略风险覆盖率,会导致场景库“看起来全面”但无法发现生产环境中的关键故障。建议每季度基于线上故障复盘更新风险登记册,并反向补充场景。
4.3 场景可复用性:参数化与模板化
可复用性决定了场景库的维护成本与扩展效率。设计原则包括参数化、模板化与分层抽象。
- 参数化:将事务超时时间、参与者数量、消息体大小、重试次数等提取为外部参数,避免硬编码。同一场景可通过参数组合衍生出多个压测用例。
- 模板化:定义场景模板(如“2PC 超时模板”、“TCC 补偿模板”),填充具体业务数据即可生成新场景。模板包含前置条件、执行步骤、断言规则与清理脚本。
- 分层抽象:将场景库分为基础层(协议原子操作)、业务层(具体业务事务流)与组合层(多事务交织)。基础层场景可被业务层与组合层复用。
4.4 场景库设计原则总结
将上述三个维度整合为可落地的设计原则清单,供架构评审与持续优化使用。
- 完备性优先:四象限分类确保无遗漏,每个象限至少 3 个场景。
- 覆盖率可度量:功能、代码、风险三层覆盖率纳入 CI/CD 门禁,低于阈值则阻断发布。
- 复用性驱动:参数化 + 模板化 + 分层抽象,避免场景重复建设。
- 安全内建:安全场景与正常场景同等地位,不因压测压力大而裁剪安全校验。
- 持续演进:场景库与线上故障、威胁模型、协议版本同步更新,每迭代至少评审一次。