用Python搭建Mock Server模拟故障响应,开发重试重连逻辑
问题描述
我的数据提供商的HTTP刷新Token接口会返回格式错误的JSON字符串,导致我的软件从另一个URL的WebSocket连接断开。正常预期的处理逻辑是:刷新Token失败时重试,若重试仍失败则重新向授权HTTP端点发送登录请求,再从头建立WebSocket连接。
我想快速复现这个故障来开发异常处理和重试恢复代码,但目前复现一次要等两天,而且我无权修改提供商服务器,已经联系过支持但还没解决。请问能不能把提供商授权端点的特定URL/URI重定向到本地服务器,以此模拟该故障响应?
可行方案及实现步骤
完全可以通过本地重定向+模拟故障的方式快速复现问题,以下是几种可靠的实现方式:
1. 本地DNS劫持(简单快速)
- 修改本地
hosts文件,把提供商授权域名映射到本地IP(比如127.0.0.1) - 在本地启动一个简易HTTP服务器(Python、Node.js都行),监听对应端口,返回格式错误的JSON响应(比如
{invalid json) - 注意:只劫持目标域名,别影响其他服务访问
2. 反向代理工具(灵活可控)
- 用
mitmproxy或nginx这类工具做反向代理:- 配置规则匹配目标刷新Token接口的URI
- 当请求命中该URI时,直接返回预设的错误JSON,不用转发到真实服务器
- 其他请求正常转发,不影响软件其他功能
3. 代码层面Mock(精准可控)
- 在软件代码里加个测试开关,开启后绕过真实接口,直接调用本地Mock函数返回错误JSON
- 适合需要精准控制故障场景的开发阶段,不用改网络配置
模拟故障的示例代码(Python)
用Flask快速搭个本地服务器返回错误JSON:
from flask import Flask app = Flask(__name__) # 匹配提供商刷新Token的接口路径 @app.route('/auth/refresh-token', methods=['POST']) def mock_refresh_failure(): # 返回格式错误的JSON字符串 return "{invalid json payload that breaks parsing}", 200 if __name__ == '__main__': # 监听80端口,和真实接口端口保持一致 app.run(host='0.0.0.0', port=80)
注意事项
- 测试完记得恢复网络配置(比如改回hosts文件、关闭代理)
- 确保本地服务器的端口、路径和真实提供商接口完全一致
- 可以多模拟几种故障场景(比如500错误、请求超时、不同格式的错误JSON),覆盖更多异常情况
内容的提问来源于stack exchange,提问作者Ori Kovacsi-Katz
相关产品推荐
相关产品推荐

