Keploy record 的 mock 存储格式 yaml 和 gob 怎么选?
【免费下载链接】keployOpen-source platform for creating safe, isolated production sandboxes for API, integration, and E2E testing.项目地址: https://gitcode.com/GitHub_Trending/ke/keploy
用keploy record录制应用流量时,Keploy 会把捕获到的依赖响应存成 mock 文件,供后续keploy test重放。落盘格式有两种:yaml(默认,写成mocks.yaml)和gob(写成mocks.gob)。选择依据是KEPLOY_MOCK_FORMAT环境变量(取值yaml或gob)或keploy.yml里的record.mockFormat配置项,两者同时存在时环境变量优先。
选型的决策依据来自 docs/env-vars.md 中对这两种格式的说明,以及keploy record的标准用法(见 README)。
两种格式的差异
| 配置值 | 落盘文件 | 特性 |
|---|---|---|
未设置 /yaml | mocks.yaml | 默认。人类可读;兼容所有现有 keploy 工具链、CI diff 和 PR review 工作流 |
gob | mocks.gob | 二进制。高吞吐场景下 record client 约省 28% CPU;不便于 grep/diff;没有跨 Go 版本的稳定性契约——pkg/models/*中依赖gob.Register的 struct 变更可能破坏对旧mocks.gob的重放。文件带魔法头版本标记(keploy-gob-v1),破坏性变更会 bump 后缀,旧文件在读取时快速失败 |
两点值得注意:
- "约 28% CPU 节省"只在高吞吐录制场景下成立,是文档给出的量化依据;
- gob 没有跨版本稳定性契约,意味着今天录的
mocks.gob在未来某个 keploy/Go 结构变更后可能无法重放,而mocks.yaml没有这个问题。
怎么选
- 默认选
yaml(即什么都不配置)。只要 mock 文件需要被团队成员直接阅读、在 CI 中做 diff、或作为 PR review 的一部分,yaml 是文档明确兼容的工作流。 - 选
gob当且仅当录制端 CPU 是瓶颈、流量吞吐高,并且你的团队接受 mock 文件不可读、不可 diff,接受旧mocks.gob可能在新版本下无法重放。
如果你只是想临时对比 gob 的效果,用环境变量做一次 ad-hoc 运行即可,不需要改配置文件。
配置方法
临时切换:环境变量(ad-hoc 实验)
KEPLOY_MOCK_FORMAT=gob keploy record -c "./my-app"其中./my-app替换为你实际的应用启动命令,与 README 中keploy record -c "CMD_TO_RUN_APP"的用法一致。
适用条件与限制:KEPLOY_MOCK_FORMAT是进程全局的——在 shell 里 export 之后,该 shell 启动的每一次 keploy 调用都会带上它。文档明确说明正是因此才提供了配置文件字段:配置项只作用于具体的某次运行,并且在 code review 时可见。所以环境变量适合一次性实验,不适合作为团队默认。
团队固定默认:keploy.yml
record: mockFormat: gob该字段对应源码 config/config.go 中的MockFormat(""或"yaml"为默认,"gob"写二进制mocks.gob)。环境变量设置后优先于该字段。
结果验证
- 运行
keploy record结束后,检查 test-set 目录下的落盘文件:yaml 格式生成mocks.yaml,gob 格式生成mocks.gob,文件名即扩展名就是格式的直接证据。 - 重放侧无需额外配置:读取路径按文件扩展名自动探测;同一 test-set 目录里两种文件都存在时,
mocks.gob优先被使用。 - 如果想确认 mock 内容(yaml 路径),可以打开
mocks.yaml查看每个 mock 的spec.metadata.type,格式参见 docs/explanation/mock-lifetimes.md 中"Inspecting a recording"一节给出的文档示例。
限制与边界
- gob 的 CPU 收益(约 28%)是高吞吐录制下的数字,不要在低流量场景预期同样收益。
- gob 文件不可 grep/diff,PR review 中无法直接比对 mock 变化。
- gob 无跨 Go 版本稳定性契约;破坏性变更通过
keploy-gob-v1魔法头后缀 bump 来隔离,旧文件读取时快速失败而不是静默出错。 - 环境变量在 shell 中 export 会泄漏到该 shell 之后启动的所有 keploy 调用(包括标准模式录制),长期生效请走
record.mockFormat。
如果你的场景是"默认 CI 友好 + 偶尔做高吞吐录制的 CPU 对比实验",推荐组合是:keploy.yml不设置mockFormat(保持 yaml),需要实验时用KEPLOY_MOCK_FORMAT=gob keploy record -c "..."单次覆盖。
【免费下载链接】keployOpen-source platform for creating safe, isolated production sandboxes for API, integration, and E2E testing.项目地址: https://gitcode.com/GitHub_Trending/ke/keploy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考