录制重放而非模拟:Pseudogress 如何绕过 PostgreSQL 测试成本
原创录制重放而非模拟:Pseudogress 如何绕过 PostgreSQL 测试成本
核心机制:虚拟数据库的录制与重放
测试代码里最烦人的东西,数据库算一个。真实 PostgreSQL 有连接数上限,多租户场景开几十个测试实例,成本跟着涨,开发机也扛不住。常见的做法是 mock 一个替身数据库,提前把响应写好,客户端连上来照单回答。可 mock 写出来的响应,和真实数据库的行为往往对不上。Pseudogress 这个项目换了一条路,先对真实数据库跑一遍,把回答录下来,之后在测试时重放 来源:GitHub。
Pseudogress 在单个服务器上模拟许多虚拟 PostgreSQL 数据库,一个虚拟数据库就是客户端连接的一个名称。class 通过模式匹配名称,给数据库提供录制响应、用户、延迟和故障 来源:GitHub。运行 pseudogress record 进入录制模式,把每个 class 的连接转发到真实 PostgreSQL,记录它回答了什么,收到 SIGINT 或 SIGTERM 时写入录制数据 来源:GitHub。运行 pseudogress replay 进入重放模式,从录制中回答客户端,并应用每个 class 设置的延迟和故障 来源:GitHub。录制数据配一个 times 文件,都排过序,放进版本控制后只在回答变化时变动 来源:GitHub。
构建走 Nix 或 Cargo。nix-build 可以,nix-shell --run 'cargo build --release' 也行,产物在 result/bin/pseudogress 来源:GitHub。端口配 0 会自动挑一个空闲的,监听地址打印到 stderr 来源:GitHub。当前版本 0.1.0,首次发布,作者明确表示配置和录制格式在 1.0 之前可能变更 来源:GitHub。项目还年轻,文档里写着目标场景是 load-test 多租户 PostgREST 来源:GitHub。
量化性能与作者判断:绕过限额、自定义延迟
Pseudogress 要解决的问题很具体。单个服务器上模拟许多虚拟 PostgreSQL 数据库,绕过真实数据库的限额和成本 来源:GitHub。目标场景是 load-test 多租户 PostgREST,README 里写的是支持“thousands of databases and connections” 来源:GitHub。测试想开多少租户就开多少,不受真实实例数量的约束。
项目名里的 high performance 需要重新理解。作者强调这个性能体现在可自定义延迟(latency you choose)上,真实数据库的吞吐能力不在它的计划里 来源:GitHub。测试者想模拟慢查询,就把延迟调大;想测正常情况,就调小。这比让 mock 去猜真实数据库的响应时间靠谱,因为录制阶段已经把真实行为记下来了。
有个反直觉的地方。mock 通常意味着预先模拟 SQL 响应,但 Pseudogress 先对真实 PostgreSQL 录制、再重放,因此能真实反映数据库行为 来源:GitHub。仓库目前有 26 个提交,包含 Cargo.lock、flake.nix、default.nix 等构建文件 来源:GitHub。它把数据库的复杂性留给了录制阶段,测试阶段只管重放。
多源交叉验证:HN 标题与 GitHub 描述的对比
HN 帖子标题写的是“Show HN: Pseudogress,high performance PostgreSQL mock for testing” 来源:HN,GitHub README 的描述则是“simulates many virtual PostgreSQL databases on one server” 来源:GitHub。两处措辞有差别。标题是发布时的宣传口径,强调 mock 的高性能;README 更贴近实际用途,落在模拟多虚拟数据库这件事上。这个差异在早期项目里常见。
社区的反应目前很安静。HN 帖子只有 1 个点、0 条评论 来源:HN,项目还处在早期。GitHub 仓库显示版本 0.1.0 是 the first release,与 Show HN 的发布行为一致 来源:GitHub。一个首次发布的工具,没人评论,不奇怪。我见过不少类似项目,发布时默默无闻,后来被需要它的人翻出来。
配置层面,record mode 与 replay mode 共享同一份配置和 class 模式 来源:GitHub。构建层面,flake.nix 和 package.nix 的存在说明项目以 Nix 作为构建系统,Cargo.toml 同时保留,两套工具链并存 来源:GitHub。管理 API 没有认证,谁能访问到它,谁就能读指标、改延迟和故障、结束连接,作者建议绑定到 localhost 或私有网络 来源:GitHub。这让我觉得作者对构建环境考虑得比较周全,至少不会让习惯 Cargo 的人为难。
原文:
Show HN: Pseudogress – high performance PostgreSQL mock for testing · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年10月27日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





