mbtest
Opinionated Python wrapper & utils for the Mountebank over the wire test double tool.
Includes pytest fixture and PyHamcrest matchers.
Setup
Install with pip:
pip install mbtest
(As usual, use of a venv or virtualenv is recommended.) Also requires Mountebank to have been installed:
npm install mountebank@2.9 --omit=dev
(Alternatively, you can attach to an instance of Mountebank running elsewhere, perhaps in docker.)
Basic example
import requests
from hamcrest import assert_that
from brunns.matchers.response import is_response
from mbtest.matchers import had_request
from mbtest.imposters import Imposter, Predicate, Response, Stub
def test_request_to_mock_server(mock_server):
imposter = Imposter(Stub(Predicate(path="/test"),
Response(body="sausages")))
with mock_server(imposter):
response = requests.get(f"{imposter.url}/test")
assert_that("We got the expected response",
response, is_response().with_status_code(200).and_body("sausages"))
assert_that("The mock server recorded the request",
imposter, had_request().with_path("/test").and_method("GET"))
Needs a pytest fixture, most easily defined in conftest.py
:
import pytest
from mbtest import server
@pytest.fixture(scope="session")
def mock_server(request):
return server.mock_server(request)
This will take care of starting and stopping the Mountebank server for you. Examples of more complex predicates can be
found in the integration tests.
See the Documentation for more.
Contributing
Requires make and tox.
PyEnv may also come in handy so tests can be run against various Python versions.
Integration tests run against an instance of Mountebank running in Docker.
Currently, the Makefile
targets use Python 3.8 and 3.11 via tox, so a quick-start setup could be:
brew install pyenv colima docker
versions=(3.8 3.12)
for v in "${versions[@]}"; do pyenv install $v -s; done
pyenv local 3.8 3.12
pip install tox tox-pyenv
colima start
In order to run make test
, you'll also need to have Mountebank installed locally:
npm install mountebank@2.9 --production
(mbtest
is tested against Mountebank versions back as far as 1.16, but obviously only features supported by the Mountebank version you're using will work.)
After that, you should be ready to roll; running make test
will let you know if your setup is correct.
Running make precommit
tells you if you're OK to commit. For more options, run:
make help
Releasing
Requires gh, setuptools,
wheel and twine. To release version n.n.n
, first
update the version number in setup.py
, then:
version="n.n.n"
git checkout -b "release-$version"
make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version"
gh release create "v$version" --target "release-$version" --generate-notes
python setup.py sdist bdist_wheel && twine upload dist/*$version*
git checkout master && git merge "release-$version"
git push