news 2026/6/13 9:00:00

Responses:mock requests 的实用工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Responses:mock requests 的实用工具

文章目录

  • Responses:mock requests 的实用工具

Responses:mock requests 的实用工具

Sentry 开源的 Python 测试工具 Responses,目前积累了 4,349 Star:

Responses 是一个用于 mock Python requests 库的实用工具。它可以在测试中拦截 HTTP 请求,返回预设的响应数据,避免对外部服务产生真实调用。

核心用法

Responses 的核心机制是通过装饰器注册 mock 响应。使用@responses.activate装饰测试函数后,所有 requests 调用都会被拦截,根据注册规则返回对应结果。

它也提供了快捷方法,如responses.get()responses.post()responses.put()等,省去了手动传入 HTTP 方法的步骤。

除了装饰器模式,Responses 还支持上下文管理器。在with responses.RequestsMock()块内,请求被 mock;离开块后,恢复真实网络行为。

请求匹配

Responses 内置了多种匹配器,用于精确验证请求内容:

  • json_params_matcher:匹配 JSON 格式的请求体
  • urlencoded_params_matcher:匹配 URL 编码数据
  • query_param_matcher:匹配查询参数
  • header_matcher:匹配请求头
  • fragment_identifier_matcher:匹配 URL 片段标识符
  • request_kwargs_matcher:匹配请求关键字参数

如果内置匹配器不够用,也可以创建自定义匹配器,返回布尔值和失败原因字符串即可。

响应注册表

Responses 默认采用 FirstMatchRegistry,多个响应对应同一 URL 时,按注册顺序依次返回并移除。如果需要强制按顺序执行,可以切换到 OrderedRegistry。也支持继承 FirstMatchRegistry 实现自定义查找逻辑。

动态响应

通过add_callback方法,可以传入回调函数根据请求内容动态生成响应。回调函数接收 request 对象,返回状态码、响应头和响应体三元组。URL 参数支持正则表达式,一个回调可以覆盖多个路径。

测试框架集成

Responses 与主流测试框架配合良好。安装pytest-responses包后,可以直接在 pytest 测试函数中注入 responses fixture。对于 unittest,也提供了 start、stop、reset 方法,方便在 setUp 和 tearDown 中管理 mock 生命周期。

其他功能

  • 断言未触发的已注册请求
  • 统计每个响应的调用次数
  • 为同一 URL 注册多个按序返回的响应
  • 模拟 URL 重定向链
  • 透传特定请求到真实服务器
  • 运行时替换或移除已注册的响应
  • 支持协程和多线程环境

安装

Responses 要求 Python 3.8 以上,requests 版本不低于 2.30.0。通过 pip 安装:

pip install responses

或使用 pytest 集成包:

pip install pytest-responses

录制与回放(BETA)

Responses 提供了实验性的录制功能。给函数加上@responses._recorder.record()装饰器,执行真实请求后会将响应数据以 YAML 格式保存到指定文件。后续测试中可以通过responses._add_from_file()从文件加载这些响应,快速复现相同的 mock 环境。

对于需要频繁对接口进行单元测试的 Python 项目,Responses 是一个直接可用的选择。它覆盖了常见的 mock 场景,API 设计与 requests 保持一致,学习成本较低。

on 项目,Responses 是一个直接可用的选择。它覆盖了常见的 mock 场景,API 设计与 requests 保持一致,学习成本较低。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 8:58:59

在Quarto中实现图表的短标题和长描述

在撰写技术文档或学术论文时,图表的标题和描述往往需要区分对待。尤其是在LaTeX环境下,图表在文档中的显示和在列表中的标题往往有不同的要求。今天,我们将探讨如何在Quarto中实现类似于LaTeX中的图表短标题(List of Figures, LOF)功能。 理解Quarto中的图表功能 Quarto…

作者头像 李华
网站建设 2026/6/13 8:52:42

SQL原生机器学习:MindsDB如何将预测能力嵌入数据库

1. 项目概述:这不是又一家“AI融资新闻”,而是一次底层范式的悄然迁移MindsDB 这个名字,对很多刚接触数据库或机器学习的朋友来说可能有点陌生——它既不叫“DeepMind”,也不像“Hugging Face”那样常出现在技术热搜里。但如果你最…

作者头像 李华
网站建设 2026/6/13 8:51:29

Windows平台可直接编译的libssh2 SSH客户端C++工程(VS2010)

本文还有配套的精品资源,点击获取 简介:一套开箱即用的Windows SSH客户端源码,基于libssh2实现底层通信,使用Visual Studio 2010(VC100)环境构建。包含完整项目文件:主程序入口ssh2client.cp…

作者头像 李华
网站建设 2026/6/13 8:49:02

python中四种获取文件后缀名的方法

python中四种获取文件后缀名的方法获取文件的后缀名有好几种方法:第一种:splittext()方法path_2./text.txt zrssos.path.splitext(path_2)[-1] print(f文件后缀为:{zrss})第二种:endswith()方法path_2./text.txt bool path_2.end…

作者头像 李华
网站建设 2026/6/13 8:45:53

别再死记硬背了!用这个可视化工具,5分钟搞懂‘图序列’判定定理

可视化工具破解图序列判定难题:从理论到实践的沉浸式学习指南当你在《离散数学》或《图论》课程中第一次遇到"图序列"这个概念时,是否曾被那些抽象的数学符号和复杂的判定条件所困扰?传统的定理证明和手工计算不仅耗时耗力&#xf…

作者头像 李华