测试体系(QA / Quality Engineering)
目标:让质量前移、让缺陷止于发布之前
P0(测试基础)
├── 测试平台
├── 测试用例管理
├── 测试环境管理
P1(自动化)
├── 自动化测试(API / UI / E2E)
├── 测试数据平台
├── Mock / 虚拟服务
P2(规模化)
├── 性能 / 全链路压测
├── 缺陷管理 & 质量分析
├── 测试左移 / 右移
P3(质量工程)
├── 灰度实验 / A/B 测试
├── 质量度量 & 门禁
├── 测试资产复用
相关开源项目:
数据工厂:https://github.com/houbb/data-factory
性能压测:https://github.com/houbb/junitperf
chat
下面我将 Mock / 虚拟服务(Service Virtualization)作为一个企业级基础设施能力来完整展开,而不是停留在“造几个假接口”的层面。
整体目标只有一句话:
通过服务虚拟化,让测试从“依赖真实系统”升级为“可编排、可控的系统行为模拟”。
一、Mock / 虚拟服务的核心定位
1️⃣ 一句话定义
Mock / 虚拟服务 = 可配置、可编排、可观测的“系统行为替身”
它模拟的不是“返回值”,而是:
- 协议行为
- 时序行为
- 异常行为
- 性能行为
2️⃣ 它解决的根本问题
| 真实问题 | Mock / 虚拟服务的解法 |
|---|---|
| 下游系统未完成 | 提前模拟 |
| 下游系统不稳定 | 测试解耦 |
| 复杂异常难复现 | 行为注入 |
| 测试成本高 | 本地/测试替身 |
一句话总结:
让测试不再被“别人系统的节奏”牵着走。
二、Mock 与 Stub 的本质区别(必须澄清)
| 维度 | Stub | Mock / 虚拟服务 |
|---|---|---|
| 返回 | 固定 | 可规则化 |
| 状态 | 无状态 | 有状态 |
| 场景 | 单接口 | 业务流程 |
| 异常 | 不支持 | 可注入 |
| 管理 | 脚本级 | 平台级 |
真正的 Mock 是“行为模拟”,不是“假数据返回”。
三、Mock / 虚拟服务在测试体系中的位置
自动化测试
├── API / UI / E2E
│
├── 测试数据平台(控制内部状态)
│
└── Mock / 虚拟服务(控制外部行为)
分工非常清晰:
- 测试数据平台:我系统内部“长什么样”
- Mock 服务:外部系统“怎么对我反应”
四、Mock / 虚拟服务的核心能力拆解
1️⃣ 协议级模拟(Protocol Virtualization)
支持的协议类型:
- HTTP / REST
- gRPC
- Dubbo
- MQ(Kafka / RocketMQ)
- WebSocket
能力点
- 协议一致性校验
- Header / Metadata 模拟
- 编码格式一致(JSON / Protobuf)
2️⃣ 请求匹配与响应规则引擎(Rule Engine)
匹配维度
- URL / Method
- Header
- Body 字段
- 上下文状态
响应能力
- 静态响应
- 动态模板(变量替换)
- 条件响应(if / else)
示例
if order.amount > 1000:
return "REVIEW_REQUIRED"
else:
return "PASS"
3️⃣ 状态机与场景编排(Stateful Mock)
这是区分“玩具 Mock”和“工程级虚拟服务”的核心能力
示例场景
请求1 → 返回处理中
请求2 → 返回成功
请求3 → 返回已完成
能力
- 状态迁移
- 状态持久化
- 状态重置
4️⃣ 异常与故障注入(Fault Injection)
可注入的行为
- 超时
- 慢响应
- 错误码
- 非法数据
价值
- 覆盖真实线上故障
- 提前暴露容错问题
5️⃣ 性能行为模拟(Performance Simulation)
- 固定延迟
- 随机抖动
- 限流
- 并发限制
用于:
- 性能测试前置
- 超时 / 重试策略验证
6️⃣ 场景版本与环境切换
- 场景版本化
- 不同环境使用不同 Mock 行为
- 灰度 / AB 场景支持
五、Mock 平台的系统架构设计
1️⃣ 逻辑架构
Mock / 虚拟服务平台
├── 协议适配层
├── 请求匹配引擎
├── 场景 & 状态管理
├── 故障注入模块
├── 行为脚本引擎
├── 管理控制台
└── API / SDK
2️⃣ 与真实服务的切换机制(非常关键)
| 方式 | 说明 |
|---|---|
| 配置开关 | 推荐 |
| 服务发现路由 | 进阶 |
| 网关拦截 | 企业级 |
原则
Mock 的启停不能改代码。
六、Mock / 虚拟服务的典型使用场景
场景 1:自动化测试
- 下游未完成
- 只验证本系统逻辑
场景 2:并行开发
- 前后端解耦
- 多团队协作
场景 3:异常演练
- 验证降级 / 重试
- 提升系统韧性
七、治理与工程规范(否则必乱)
1️⃣ 场景治理
- 命名规范
- 负责人
- 生命周期管理
2️⃣ 防止 Mock 漂移
- 定期与真实服务对齐
- 合约测试(Contract Test)
八、成熟度分级
| 等级 | 特征 |
|---|---|
| L1 | 本地 Stub |
| L2 | 接口 Mock |
| L3 | 场景 Mock |
| L4 | 故障注入 |
| L5 | 行为级虚拟化 |
九、总结一句话
Mock / 虚拟服务不是为了“假”,而是为了“可控的真实”。
