写过 wrapt、维护过 mod_wsgi、也参与过 New Relic Python agent 开发的 Graham Dumpleton,2026 年 8 月底发布了新库 Wrapture。它把 wrapt 那套函数猴子补丁的思路往外扩了一圈:不只是替换返回值做测试替身,还能记录真实调用、把追踪数据导出成 OpenTelemetry 格式。项目上线才几周,全部代码由 AI 助手在他指导下完成。

真正值得记的不是"又出了个新库",是 Wrapture 把测试里的 mock 和生产代码里的追踪埋点,用同一套绑定语义打通了。但它离成熟还有距离,能不能扛住复杂项目的猴子补丁风险,现在没人能保证。

一套绑定机制,两种用法

Wrapture 的核心操作叫 binding:绑定一个类的某个方法。之后可以让它返回固定值,也可以在原方法执行完之后对结果做变换,还可以什么都不改,只记录每一次调用。

文档给的例子很直接。给 Gateway.charge 挂一个 on_call.returns(...),测试代码就拿到假返回值。换成 on_call.transforms_result(...),则先跑真实逻辑,再对结果做一次修正后校验。前者是完全隔离的单测,后者是观察真实行为的追踪。

更值得注意的是配置驱动能力。写一段 TOML,声明要观察哪个类、哪些方法,指定输出成 JSON Lines,不改一行业务代码就能给老项目加上调用轨迹。叠加 OpenTelemetry 导出,理论上能把这条轨迹接进现有的分布式追踪链路。

Wrapture 的一次绑定,两种走向 目标方法 如 Gateway.charge wrapture.binding 介入调用 测试替身:stub / transform 替代 unittest.mock 场景 调用记录 / OTel 导出 接入现有可观测性栈

为什么重要:它和 unittest.mock 不是一回事

unittest.mock 的边界很清楚:测试环境里临时替身,跑完就还原,不碰生产。Wrapture 能做同样的事,但同一套绑定代码换个配置就能挂到生产代码上,记录真实调用——这是它和 mock 最大的不同。

维度unittest.mockWrapture
定位测试内临时替身,跑完还原同一套绑定,可做测试替身,也可做生产追踪
能否接生产不设计用于生产设计上支持,但缺乏大型项目验证
追踪能力支持记录调用,可导出 OpenTelemetry
上线时间标准库自带,长期维护2026 年 8 月底发布,仅数周历史

OpenTelemetry 支持解决的是数据格式对不对的问题,不是分布式追踪里上下文传递、跨服务语义对不对的问题。这部分 Wrapture 目前没给出证据说明已经处理好。

谁该试、谁该等:猴子补丁的老风险还在

猴子补丁天然涉及作用域覆盖、调用顺序、并发状态干扰。项目越复杂,出问题越难查。Wrapture 上线才几周,还没经过大型项目的实战检验。

Dumpleton 在博客里说,Wrapture 每一行代码和文档都是 AI 助手写的,但设计和验证由他主导——不是一次性提示词甩出去看运气的 vibe coding。这话有一定可信度:他写过 wrapt,维护过 mod_wsgi,也参与过 New Relic 的 Python agent,在这个领域摸了很多年。但 AI 参与开发这件事,本身既不能证明代码质量更高,也不能反推更低,能不能扛用,还得看代码本身。

维护 Python 测试基础设施、想给老项目补调用追踪的可观测性团队,可以先在测试环境或非核心服务里试用 Wrapture 的配置驱动追踪能力。异步/并发场景下的补丁行为、恢复机制、性能开销,项目文档目前没有给出足够证据。先把这几点验证清楚,再考虑往核心生产链路里接。