Pytest-HttpServer
pytest-httpserver is a python package which allows you to start a real HTTP server for your tests. The server can be configured programmatically to how to respond to requests.
Installation⚑
pip install pytest-httpserver
Usage⚑
import requests
def test_json_client(httpserver: HTTPServer):
httpserver.expect_request("/foobar").respond_with_json({"foo": "bar"})
assert requests.get(httpserver.url_for("/foobar")).json() == {'foo': 'bar'}
Specifying responses⚑
Once you have set up the expected request, it is required to set up the response which will be returned to the client.
In the example we used respond_with_json()
but it is also possible to respond with an arbitrary content.
respond_with_data("Hello world!", content_type="text/plain")
In the example above, we are responding a text/plain
content. You can specify the status also:
respond_with_data("Not found", status=404, content_type="text/plain")
Give a dynamic response⚑
If you need to produce dynamic content, use the respond_with_handler
method, which accepts a callable (eg. a python function):
from werkzeug.wrappers import Response
from werkzeug.wrappers.request import Request
def my_handler(request: Request) -> Response:
# here, examine the request object
return Response("Hello world!")
respond_with_handler(my_handler)