Python网络异常模拟用于测试程序在不稳定网络下的健壮性,通过requests-mock等工具主动注入ConnectionError、Timeout、HTTPError等异常,验证重试、降级、日志、资源释放及并发隔离行为。

Python网络异常模拟主要用于测试程序在网络不稳定、超时、断连等场景下的健壮性。核心是主动制造可控的异常,而非等待真实故障发生。
常用异常类型及对应场景
测试需覆盖典型网络问题:
- ConnectionError:模拟服务不可达(如目标IP无响应、DNS失败)
- Timeout:包括连接超时(connect timeout)和读取超时(read timeout),反映慢响应或卡死
- HTTPError(4xx/5xx):模拟服务端返回错误状态码,如404、502、503
- SSLError / CertificateError:测试HTTPS证书校验失败或协议不兼容
- ChunkedEncodingError / IncompleteRead:模拟流式响应中断,常见于大文件下载或长连接
推荐模拟方式:用 requests-mock 或自建 Mock Server
避免修改生产代码逻辑,优先采用轻量级拦截方案:
- 使用 requests-mock 库可快速 mock 指定 URL 的响应状态、延迟、异常,例如:
mock.get('https://api.example.com', exc=requests.exceptions.Timeout) - 本地启动简易 HTTP server(如用 http.server 或 aiohttp.test_utils),在特定路径中主动 raise 异常或 sleep 延迟
- 对 urllib/urllib3 底层调用,可通过 patch urllib3.connectionpool.HTTPConnectionPool.urlopen 注入异常
关键测试要点提醒
仅抛出异常不够,要验证程序行为是否符合预期:
立即学习“Python免费学习笔记(深入)”;
- 重试机制是否触发(次数、间隔、退避策略)
- 降级逻辑是否生效(如返回缓存、默认值、友好提示)
- 日志是否记录关键信息(URL、异常类型、耗时、上下文)
- 资源是否正确释放(连接未泄漏、文件句柄关闭)
- 并发请求下异常是否隔离(一个失败不影响其他请求)
不建议直接依赖真实网络环境做异常测试
真实网络不可控,难以复现特定异常,且影响CI稳定性与测试速度。应将异常模拟作为单元测试/集成测试的一部分,确保每次运行条件一致、结果可预测。










