使用Flask应用程序模拟HTTP请求的库,无需实际网络操作
项目描述
概述
Flask-Loopback允许您在代码中使用编写的Flask应用程序来模拟实际Web服务。如果您正在编写一个将使用现有Web服务的客户端,并想了解它与真实事物的交互效果如何,这非常有用。
Flask-Loopback通过stubbing requests
包来实现这一点,而不是实际通过网络发送HTTP请求,这样只有针对您的模拟请求才会到达目的地。
这样做非常简单。您可能已经在某个地方有一个想要使用的Flask应用程序
# myapp.py
>>> import flask
>>> app = flask.Flask(__name__)
>>> @app.route("/some/path")
... def hello():
... return "hello!"
当您想要实际使用它时,您可以在指定的地址上激活loopback
>>> import requests
>>> from flask_loopback import FlaskLoopback
>>> loopback = FlaskLoopback(app)
>>> with loopback.on(("some-address.com", 80)):
... print(requests.get("http://some-address.com/some/path").content.decode("utf-8"))
hello!
为了帮助您在请求前后执行更多操作,您可以将请求上下文函数注册为在真实请求周围调用(这是在Flask提供的默认处理器之外进行的)
>>> from contextlib import contextmanager
>>> @loopback.register_request_context_handler
... @contextmanager
... def request_handler(request):
... # do something before request handling
... yield
... # do something after request handling
SSL
默认情况下禁用了SSL,但您可以轻松地启用它
>>> with loopback.on(("some-address.localdomain", 443)):
... requests.get("https://some-address.localdomain/some/path") # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
SSLError
>>> with loopback.on(("some-address.localdomain", 443), ssl=True):
... requests.get("https://some-address.localdomain/some/path") # doctest: +IGNORE_EXCEPTION_DETAIL
<Response [200]>
许可证
BSD3(见LICENSE
)