Skip to content

Instantly share code, notes, and snippets.

@tenuki
Last active November 26, 2020 15:04
Show Gist options
  • Save tenuki/42a8719d8a7f882adb82ef72fdbaae44 to your computer and use it in GitHub Desktop.
Save tenuki/42a8719d8a7f882adb82ef72fdbaae44 to your computer and use it in GitHub Desktop.
Making pytest-server mock more than one server (on different address/port) simultaneously
import pytest
import requests
from pytest_httpserver import HTTPServer
from pytest_httpserver.pytest_plugin import Plugin
class PluginHTTPServer(HTTPServer):
def start(self):
super().start()
def stop(self):
super().stop()
@pytest.fixture
def httpserver1():
host, port = ("127.0.0.1", 8000)
server = PluginHTTPServer(host=host, port=port)
server.start()
try:
yield server
finally:
server.stop()
@pytest.fixture
def httpserver2():
host, port = ("127.0.0.1", 9000)
server = PluginHTTPServer(host=host, port=port)
server.start()
try:
yield server
finally:
server.stop()
def test_wait_success(httpserver1: HTTPServer, httpserver2: HTTPServer):
waiting_timeout = 0.1
print('url1:', httpserver1.url_for("/foobar"))
with httpserver1.wait(stop_on_nohandler=False, timeout=waiting_timeout) as waiting:
requests.get(httpserver1.url_for("/foobar"))
httpserver1.expect_oneshot_request("/foobar").respond_with_data("OK foobar")
requests.get(httpserver1.url_for("/foobar"))
assert waiting.result
httpserver2.expect_oneshot_request("/foobar").respond_with_data("OK foobar")
httpserver2.expect_oneshot_request("/foobaz").respond_with_data("OK foobaz")
print('url2:', httpserver2.url_for("/foobar"))
with httpserver2.wait(timeout=waiting_timeout) as waiting:
requests.get(httpserver2.url_for("/foobar"))
requests.get(httpserver2.url_for("/foobaz"))
assert waiting.result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment