Wrapture 将 Python 测试与可观测性结合

Simon Willison··作者 Simon Willison

关键信息

该项目仍处于 alpha 阶段,因此即使目前已经相当可用,其 API 和行为仍可能发生变化。配套的 wrapture-instrumentation 软件包为 Flask、Django、FastAPI、aiohttp、requests、httpx、SQLAlchemy 和 OpenTelemetry 等框架与库提供集成。

资讯摘要

Simon Willison 认为,Python 开发者应该更加关注 Graham Dumpleton 开发的新 monkey patching 软件包 wrapture。该软件包既面向类似 unittest.mock 的单元测试场景,也面向类似 New Relic 追踪的可观测性场景。Dumpleton 于 2026 年 8 月 31 日发布了它,并在此后几乎每天推出新教程。这些教程介绍了如何把方法调用记录为时间线和树状结构、让被修改的方法在连续调用中表现出不同的行为,以及修改属性、字典和生成器。

后续示例表明,开发者可以通过独立的 TOML 文件配置追踪,而无需改动 Python 代码;另一个独立的 instrumentation 软件包则支持 Flask 以及许多其他 Python Web、HTTP、数据库和服务器组件。Wrapture 还可以记录耗时信息、定位运行缓慢的代码,并将追踪结果导出到 OpenTelemetry。尽管它仍是 alpha 软件,Willison 认为它功能非常多样,开发者掌握后可能会成为长期有用的通用工具。

资讯正文

别忽视 wrapture

Graham Dumpleton 新推出的猴子补丁包 <a href="https://wrapture.readthedocs.io/">wrapture</a> 正逐渐成为 Python 开发者不可或缺的工具。我不明白为什么关于它的讨论声这么小!

自 8 月 31 日<a href="https://simonwillison.net/2026/Aug/31/introducing-wrapture/">首次发布</a>以来,Graham 几乎每天都在为它发布新的教程。截至目前,他已经发表了以下内容:

<ul>

<li><a href="https://grahamdumpleton.me/posts/2026/08/introducing-wrapture/">Introducing wrapture</a>——介绍一个新的猴子补丁库,可同时用于测试和可观测性(可以想象成 New Relic 风格的追踪)。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/unit-testing-with-wrapture/">Unit testing with wrapture</a>——介绍如何将它用于与 <code>unittest.mock</code> 类似的场景。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/recording-calls-with-wrapture/">Recording calls with wrapture</a>——将方法调用记录为时间线,并将其处理和显示为树状结构。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/phased-behaviour-in-wrapture/">Phased behaviour in wrapture</a>——安排经过补丁处理的方法,让它们在多次调用过程中改变行为。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/beyond-callables-in-wrapture/">Beyond callables in wrapture</a>——对属性、字典和生成器进行猴子补丁。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/live-tracing-with-wrapture/">Live tracing with wrapture</a>——追踪正在运行的应用程序,以准确了解其工作方式。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/zero-code-tracing-with-wrapture/">Zero-code tracing with wrapture</a>——在单独的 TOML 文件中配置追踪,完全无需修改 Python 代码。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/tracing-flask-with-wrapture/">Tracing Flask with wrapture</a>——使用独立的 <a href="https://github.com/GrahamDumpleton/wrapture-instrumentation">wrapture-instrumenation</a> 包,为 Flask 应用添加检测功能。该包还为 <code>aiohttp.client</code>、<code>aiohttp.web</code>、<code>django</code>、<code>fastapi</code>、<code>flask</code>、<code>grpc</code>、<code>http.client</code>、<code>httpx</code>、<code>jinja2</code>、<code>requests</code>、<code>sqlalchemy</code>、<code>sqlite3</code>、<code>starlette</code>、<code>urllib.request</code>、<code>urllib3</code>、<code>uvicorn</code>、<code>werkzeug.serving</code>、<code>wsgiref.simple_server</code>、<code>xmlrpc.client</code> 和 <code>xmlrpc.server</code> 提供检测功能。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/finding-slow-code-with-wrapture/">Finding slow code with wrapture</a>——介绍 wrapture 用于记录耗时信息的工具,既可以记录单次调用,也可以汇总多次调用的数据。</li>

<li><a href="https://grahamdumpleton.me/posts/2026/09/opentelemetry-export-in-wrapture/">OpenTelemetry export in wrapture</a>——将追踪数据导出至 OpenTelemetry。</li>

</ul>

别小看 wrapture

Graham 还为 wrapture 制作了一套交互式工作坊,以 JupyterLab notebook 的形式实现。

Wrapture 目前仍处于 alpha 阶段,但已经非常实用——尤其是考虑到你可以通过 TOML 文件对它进行配置和试用,完全无需修改任何 Python 代码。

这感觉像是那种瑞士军刀般的工具包:一旦掌握,就能在未来多年为各种问题提供帮助。

来源与参考

  1. 原始链接
  2. Don't sleep on wrapture

收录于 2026-09-12