Skip to main content

Python wrapper & utils for the Mountebank over the wire test double tool.

Project description

mbtest

Opinionated Python wrapper & utils for the Mountebank over the wire test double tool.

Includes pytest fixture and PyHamcrest matchers.

made-with-python Continuous Integration Python Versions Licence GitHub all releases GitHub forks GitHub stars GitHub watchers GitHub contributors GitHub issues GitHub issues-closed GitHub pull-requests GitHub pull-requests closed Codacy Badge Codacy Coverage Documentation Status Lines of Code

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):
    # Set up mock server with required behavior
    imposter = Imposter(Stub(Predicate(path="/test"), 
                             Response(body="sausages")))

    with mock_server(imposter):
        # Make request to mock server - exercise code under test here
        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
pyenv install -s 3.{9..13}
pyenv local 3.9 3.13
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" # Needs to match new version number in setup.py.
git checkout -b "release-$version"
make precommit && git commit -am"Release $version" && git push --set-upstream origin "release-$version" # If not already all pushed, which it should be.
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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mbtest-2.14.0.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

mbtest-2.14.0-py3-none-any.whl (24.6 kB view details)

Uploaded Python 3

File details

Details for the file mbtest-2.14.0.tar.gz.

File metadata

  • Download URL: mbtest-2.14.0.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.1

File hashes

Hashes for mbtest-2.14.0.tar.gz
Algorithm Hash digest
SHA256 a0b934929ea20c195acf40c272dcf27faea94178b93d77c264d92488468c6a2e
MD5 67350c4887df586e8eaae8d6c987508d
BLAKE2b-256 1cc44fb2c3af7862f71c42f4164cd56dd5d862dcf5496450a36b9ccbbf21a33e

See more details on using hashes here.

File details

Details for the file mbtest-2.14.0-py3-none-any.whl.

File metadata

  • Download URL: mbtest-2.14.0-py3-none-any.whl
  • Upload date:
  • Size: 24.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.1

File hashes

Hashes for mbtest-2.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9498158af69fcfba33c33cf2c297c397074f94ea2c8d3307592a72dabd752573
MD5 db4c97a530a8dc0b9458bef8ab82b4b8
BLAKE2b-256 8a050649c1e40e0482871ff5cde5bbe87733ad7d7e31975ac2c062a1c121b9a3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page