0

0

Python requests超时怎么测_Responses库或responses.add拦截请求模拟Timeout与网络错误

P粉602998670

P粉602998670

发布时间:2026-03-17 11:56:03

|

905人浏览过

|

来源于php中文网

原创

requests.get()超时需设为元组timeout=(connect, read),单值timeout=5等价于(5,5);DNS解析计入connect阶段;responses无法模拟超时或连接异常,应patch Session.request或用不可达地址触发。

python requests超时怎么测_responses库或responses.add拦截请求模拟timeout与网络错误

requests.get() 超时参数怎么设才真正生效

超时没起作用,大概率是因为只设了 timeout 但没分清连接超时和读取超时。requests 的 timeout 是个“双参数元组”,不是单个数字。

  • timeout=(3, 10) 表示:3 秒内必须完成 TCP 连接,之后最多再等 10 秒接收响应体;前者是 connect timeout,后者是 read timeout
  • 只写 timeout=5 等价于 timeout=(5, 5),看似简单,但实际中连接快、读取慢更常见,硬绑死容易误判
  • 如果传 timeout=None 或完全不传,读取阶段会无限等待(比如服务器卡住但没断连),这是线上服务最危险的配置
  • 注意:DNS 解析耗时算在 connect 阶段里,若 DNS 不稳,connect timeout 会先触发

用 responses 库模拟 requests.Timeout 异常

responses 默认不抛超时异常,它只是拦截并返回预设响应。要测超时逻辑,得绕过它的正常流程,用 mock 强制触发。

  • 别用 responses.add() 想“配出一个超时”,它做不到;responses 本质是 HTTP 响应拦截器,不是网络栈模拟器
  • 正确做法是用 unittest.mock.patch 替换 requests.adapters.HTTPAdapter.send,在里面手动 raise requests.exceptions.Timeout
  • 或者更轻量:patch requests.Session.request,对特定 URL 返回异常,避免侵入底层 adapter
  • 示例片段:
    with mock.patch("requests.Session.request") as mock_req:
        mock_req.side_effect = requests.exceptions.Timeout("mocked timeout")
        try:
            requests.get("https://api.example.com/data")
        except requests.exceptions.Timeout:
            pass  # 此处验证你的重试/降级逻辑

为什么用 responses.add() 拦截后,ConnectionError 还是不出现

responses.add() 成功拦截时,根本不会走真实网络层,所以 ConnectionErrorConnectTimeout 这类底层异常压根不会抛出——它们发生在 socket 连接阶段,而 responses 在更高层劫持了请求。

皮卡智能
皮卡智能

AI驱动高效视觉设计平台

下载
  • 想测 ConnectionError,必须让请求真正发出并失败,比如关掉目标服务、改错 host、或用 mock.patch 拦截 socket 层(不推荐,太重)
  • 更实用的替代方案:用本地不可达地址,如 requests.get("http://127.0.0.1:9999", timeout=0.1),配合短 timeout 触发 ConnectionRefusedError
  • 注意:某些系统(尤其 macOS)对 localhost 的连接失败响应较快,Linux 可能稍慢,测试时 timeout 值要留余量
  • 如果你依赖 responses 做大部分 mock,又需要覆盖连接失败路径,建议把这两类 case 拆开——用 responses 测业务逻辑,用真实失败地址测异常分支

超时测试里最容易被忽略的细节

很多人写了 timeout 测试,却在线上发现行为不一致,问题往往出在环境差异和异常类型混淆上。

立即学习Python免费学习笔记(深入)”;

  • Python 版本影响:3.11+ 对 timeout 的底层处理更严格,老版本可能静默延长;确保测试环境 Python 小版本和生产一致
  • 不要只 assert “是否抛异常”,还要检查异常类型是否精确匹配——requests.exceptions.Timeoutrequests.exceptions.ConnectTimeout 是不同子类,业务逻辑可能区分处理
  • HTTP/2 或代理场景下,timeout 行为可能变化:比如使用 httpx 或带 proxy 的 requests,connect 阶段会多一次代理握手,超时需额外预留
  • mock 时 patch 错对象很常见:比如 patch 了 requests.get 却忘了模块里实际调的是 session.get(),结果测试永远走不到异常分支

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

337

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

776

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

97

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

448

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

macOS怎么切换用户账户
macOS怎么切换用户账户

在 macOS 系统中,可通过多种方式切换用户账户。如点击苹果图标选择 “系统偏好设置”,打开 “用户与群组” 进行切换;或启用快速用户切换功能,通过菜单栏或控制中心的账户名称切换;还能使用快捷键 “Control+Command+Q” 锁定屏幕后切换。

362

2025.05.09

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

500

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

456

2023.11.14

c++ 字符处理
c++ 字符处理

本专题整合了c++字符处理教程、字符串处理函数相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号