API Reference¶
The mbtest.server module¶
-
mbtest.server.
mock_server
(request, executable='node_modules/.bin/mb', port=2525, timeout=5, debug=True, allow_injection=True, local_only=True, data_dir='.mbdb')[source]¶ Pytest fixture, making available a mock server, running one or more imposters, one for each domain being mocked.
Use in a pytest conftest.py fixture as follows:
@pytest.fixture(scope="session") def mock_server(request): return server.mock_server(request)
Test will look like:
def test_an_imposter(mock_server): imposter = Imposter(Stub(Predicate(path='/test'), Response(body='sausages')), record_requests=True) with mock_server(imposter) as s: r = requests.get(f"{imposter.url}/test") assert_that(r, is_response().with_status_code(200).and_body("sausages")) assert_that(s, had_request(path='/test', method="GET"))
- Parameters
request (
FixtureRequest
) – Request for a fixture from a test or fixture function.executable (
Union
[str
,Path
]) – Alternate location for the Mountebank executable.port (
int
) – Server port.timeout (
int
) – specifies how long to wait for the Mountebank server to start.debug (
bool
) – Start the server in debug mode, which records all requests. This needs to be True for thembtest.matchers.had_request()
matcher to work.allow_injection (
bool
) – Allow JavaScript injection. If True, local_only should also be True,as per Mountebank security.local_only (
bool
) – Accept request only from localhost.data_dir (
Optional
[str
]) – Persist all operations to disk, in this directory.
- Return type
- Returns
Mock server.
-
class
mbtest.server.
MountebankServer
(port, scheme='http', host='localhost', imposters_path='imposters')[source]¶ Allow addition of imposters to an already running Mountebank mock server.
Test will look like:
def test_an_imposter(mock_server): mb = MountebankServer(1234) imposter = Imposter(Stub(Predicate(path='/test'), Response(body='sausages')), record_requests=True) with mb(imposter): r = requests.get(f"{imposter.url}/test") assert_that(r, is_response().with_status_code(200).and_body("sausages")) assert_that(imposter, had_request(path='/test', method="GET"))
Imposters will be torn down when the with block is exited.
- Parameters
-
property
server_url
¶ - Return type
furl
-
class
mbtest.server.
ExecutingMountebankServer
(executable='node_modules/.bin/mb', port=2525, timeout=5, debug=True, allow_injection=True, local_only=True, data_dir='.mbdb')[source]¶ A Mountebank mock server, running one or more imposters, one for each domain being mocked.
Test will look like:
def test_an_imposter(mock_server): mb = ExecutingMountebankServer() imposter = Imposter(Stub(Predicate(path='/test'), Response(body='sausages')), record_requests=True) with mb(imposter) as s: r = requests.get(f"{imposter.url}/test") assert_that(r, is_response().with_status_code(200).and_body("sausages")) assert_that(s, had_request(path='/test', method="GET")) mb.close()
The mountebank server will be started when this class is instantiated, and needs to be closed if it’s not to be left running. Consider using the
mock_server()
pytest fixture, which will take care of this for you.- Parameters
executable (
Union
[str
,Path
]) – Optional, alternate location for the Mountebank executable.port (
int
) – Server port.timeout (
int
) – How long to wait for the Mountebank server to start.debug (
bool
) – Start the server in debug mode, which records all requests. This needs to be True for thembtest.matchers.had_request()
matcher to work.allow_injection (
bool
) –Allow JavaScript injection. If True, local_only should also be True,as per Mountebank security.
local_only (
bool
) – Accept request only from localhost.data_dir (
Optional
[str
]) – Persist all operations to disk, in this directory.
-
start_lock
= <unlocked _thread.lock object>¶
The mbtest.imposters.imposters module¶
-
class
mbtest.imposters.imposters.
Imposter
(stubs, port=None, protocol=<Protocol.HTTP: 'http'>, name=None, record_requests=True)[source]¶ Represents a Mountebank imposter. Think of an imposter as a mock website, running a protocol, on a specific port. Required behaviors are specified using stubs.
- Parameters
protocol (
Protocol
) – Protocol to run on.name (
Optional
[str
]) – Imposter name - useful for interactive exploration of imposters on http://localhost:2525/impostersrecord_requests (
bool
) – Record requests made against this imposter, so they can be asserted against later.
-
class
Protocol
(value)[source]¶ Imposter Protocol.
-
HTTP
= 'http'¶
-
HTTPS
= 'https'¶
-
SMTP
= 'smtp'¶
-
TCP
= 'tcp'¶
-
-
property
url
¶ - Return type
furl
-
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
property
configuration_url
¶ - Return type
furl
-
class
mbtest.imposters.imposters.
HttpRequest
(method, path, query, headers, body, **kwargs)[source]¶
-
class
mbtest.imposters.imposters.
Address
(address, name)¶ -
property
address
¶ Alias for field number 0
-
property
name
¶ Alias for field number 1
-
property
The mbtest.imposters.stubs module¶
-
class
mbtest.imposters.stubs.
Stub
(predicates=None, responses=None)[source]¶ Represents a Mountebank stub. Think of a stub as a behavior, triggered by a matching predicate.
- Parameters
predicates (
Union
[BasePredicate
,Iterable
[BasePredicate
],None
]) – Trigger this stub if one of these predicates matches the requestresponses (
Union
[BaseResponse
,Iterable
[BaseResponse
],None
]) – Use these response behaviors (in order)
-
class
mbtest.imposters.stubs.
AddStub
(stub=None, index=None)[source]¶ Represents a Mountebank add stub request <http://www.mbtest.org/docs/api/overview#add-stub>. To add new stab to an existing imposter.
- Parameters
The mbtest.imposters.predicates module¶
-
class
mbtest.imposters.predicates.
BasePredicate
[source]¶
-
class
mbtest.imposters.predicates.
Predicate
(path=None, method=None, query=None, body=None, headers=None, xpath=None, operator=<Operator.EQUALS: 'equals'>, case_sensitive=True)[source]¶ Represents a Mountebank predicate. A predicate can be thought of as a trigger, which may or may not match a request.
- Parameters
-
class
Method
(value)[source]¶ Predicate HTTP method.
-
DELETE
= 'DELETE'¶
-
GET
= 'GET'¶
-
HEAD
= 'HEAD'¶
-
POST
= 'POST'¶
-
PUT
= 'PUT'¶
-
PATCH
= 'PATCH'¶
-
-
class
Operator
(value)[source]¶ -
-
EQUALS
= 'equals'¶
-
DEEP_EQUALS
= 'deepEquals'¶
-
CONTAINS
= 'contains'¶
-
STARTS_WITH
= 'startsWith'¶
-
ENDS_WITH
= 'endsWith'¶
-
MATCHES
= 'matches'¶
-
EXISTS
= 'exists'¶
-
-
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
class
mbtest.imposters.predicates.
AndPredicate
(left, right)[source]¶ -
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
-
class
mbtest.imposters.predicates.
OrPredicate
(left, right)[source]¶ -
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
-
class
mbtest.imposters.predicates.
NotPredicate
(inverted)[source]¶ -
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
-
class
mbtest.imposters.predicates.
TcpPredicate
(data)[source]¶ Represents a Mountebank TCP predicate. A predicate can be thought of as a trigger, which may or may not match a request.
- Parameters
data (
str
) – Data to match the request.
-
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
class
mbtest.imposters.predicates.
InjectionPredicate
(inject)[source]¶ Represents a Mountebank injection predicate. A predicate can be thought of as a trigger, which may or may not match a request.
Injection requires Mountebank version 2.0 or higher.
- Parameters
inject (
str
) – JavaScript function to inject.
The mbtest.imposters.responses module¶
-
class
mbtest.imposters.responses.
BaseResponse
[source]¶
-
class
mbtest.imposters.responses.
Response
(body='', status_code=200, wait=None, repeat=None, headers=None, mode=None, copy=None, decorate=None, lookup=None, shell_transform=None)[source]¶ Represents a Mountebank ‘is’ response behavior.
- Parameters
body (
str
) – Body text for response. Can be a string, or a JSON serialisable data structure.wait (
Union
[int
,str
,None
]) – Add latency, in ms.repeat (
Optional
[int
]) – Repeat this many times before moving on to next response.headers (
Optional
[Mapping
[str
,str
]]) – Response HTTP headersdecorate (
Optional
[str
]) – Decorate behavior.shell_transform (
Union
[str
,Iterable
[str
],None
]) – shellTransform behavior
-
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
class
mbtest.imposters.responses.
TcpResponse
(data)[source]¶ -
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
-
class
mbtest.imposters.responses.
Proxy
(to, wait=None, inject_headers=None, mode=<Mode.ONCE: 'proxyOnce'>, predicate_generators=None)[source]¶ Represents a Mountebank proxy.
-
class
Mode
(value)[source]¶ Defines the replay behavior of the proxy.
-
ONCE
= 'proxyOnce'¶
-
ALWAYS
= 'proxyAlways'¶
-
TRANSPARENT
= 'proxyTransparent'¶
-
-
class
-
class
mbtest.imposters.responses.
PredicateGenerator
(path=False, query=False, operator=<Operator.EQUALS: 'equals'>, case_sensitive=True)[source]¶ -
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
-
class
mbtest.imposters.responses.
InjectionResponse
(inject)[source]¶ Represents a Mountebank injection response.
Injection requires Mountebank version 2.0 or higher.
- Parameters
inject (
str
) – JavaScript function to inject .
The mbtest.imposters.behaviors.copy module¶
-
class
mbtest.imposters.behaviors.copy.
Copy
(from_, into, using)[source]¶ Represents a copy behavior.
- Parameters
from – The name of the request field to copy from, or, if the request field is an object, then an object specifying the path to the request field.
into (
str
) – The token to replace in the response with the selected request value.using (
Using
) – The configuration needed to select values from the response.
The mbtest.imposters.behaviors.lookup module¶
-
class
mbtest.imposters.behaviors.lookup.
Lookup
(key, datasource_path, datasource_key_column, into)[source]¶ Represents a lookup behavior.
- Parameters
The mbtest.imposters.behaviors.using module¶
-
class
mbtest.imposters.behaviors.using.
Using
(method, selector)[source]¶ How to select values from the response.
- Parameters
-
class
Method
(value)[source]¶ An enumeration.
-
REGEX
= 'regex'¶
-
XPATH
= 'xpath'¶
-
JSONPATH
= 'jsonpath'¶
-
-
class
mbtest.imposters.behaviors.using.
UsingRegex
(selector, ignore_case=False, multiline=False)[source]¶ Select values from the response using a regular expression.
- Parameters
-
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
class
mbtest.imposters.behaviors.using.
UsingXpath
(selector, ns=None)[source]¶ Select values from the response using an xpath expression.
- Parameters
-
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
class
mbtest.imposters.behaviors.using.
UsingJsonpath
(selector)[source]¶ Select values from the response using a jsonpath expression.
- Parameters
selector (
str
) – The selector used to select the value(s) from the request.
The mbtest.matchers module¶
-
mbtest.matchers.
had_request
(method=<hamcrest.core.core.isanything.IsAnything object>, path=<hamcrest.core.core.isanything.IsAnything object>, query=<hamcrest.core.core.isanything.IsAnything object>, headers=<hamcrest.core.core.isanything.IsAnything object>, body=<hamcrest.core.core.isanything.IsAnything object>, times=<hamcrest.core.core.isanything.IsAnything object>)[source]¶ Mountebank server has recorded call matching.
Build criteria with with_ and and_ methods:
assert_that(server, had_request().with_path(“/test”).and_method(“GET”))
Available attributes as per parameters.
- Parameters
method (
Union
[str
,Matcher
[str
]]) – Request’s method matched…path (
Union
[furl
,str
,Matcher
[Union
[furl
,str
]]]) – Request’s path matched…query (
Union
[Mapping
[str
,str
],Matcher
[Mapping
[str
,str
]]]) – Request’s query matched…headers (
Union
[Mapping
[str
,str
],Matcher
[Mapping
[str
,str
]]]) – Request’s headers matched…times (
Union
[int
,Matcher
[int
]]) – Request’s number of times called matched matched…
- Return type
-
class
mbtest.matchers.
HadRequest
(method=<hamcrest.core.core.isanything.IsAnything object>, path=<hamcrest.core.core.isanything.IsAnything object>, query=<hamcrest.core.core.isanything.IsAnything object>, headers=<hamcrest.core.core.isanything.IsAnything object>, body=<hamcrest.core.core.isanything.IsAnything object>, times=<hamcrest.core.core.isanything.IsAnything object>)[source]¶ Mountebank server has recorded call matching
- Parameters
method (
Union
[str
,Matcher
[str
]]) – Request’s method matched…path (
Union
[furl
,str
,Matcher
[Union
[furl
,str
]]]) – Request’s path matched…query (
Union
[Mapping
[str
,str
],Matcher
[Mapping
[str
,str
]]]) – Request’s query matched…headers (
Union
[Mapping
[str
,str
],Matcher
[Mapping
[str
,str
]]]) – Request’s headers matched…times (
Union
[int
,Matcher
[int
]]) – Request’s number of times called matched matched…
-
describe_to
(description)[source]¶ Generates a description of the object.
The description may be part of a description of a larger object of which this is just a component, so it should be worded appropriately.
- Parameters
description (
Description
) – The description to be built or appended to.- Return type
-
mbtest.matchers.
email_sent
(to=<hamcrest.core.core.isanything.IsAnything object>, subject=<hamcrest.core.core.isanything.IsAnything object>, body_text=<hamcrest.core.core.isanything.IsAnything object>)[source]¶ Mountebank SMTP server was asked to sent email matching:
-
class
mbtest.matchers.
EmailSent
(to=<hamcrest.core.core.isanything.IsAnything object>, subject=<hamcrest.core.core.isanything.IsAnything object>, body_text=<hamcrest.core.core.isanything.IsAnything object>)[source]¶ Mountebank SMTP server was asked to sent email matching:
- Parameters
-
describe_to
(description)[source]¶ Generates a description of the object.
The description may be part of a description of a larger object of which this is just a component, so it should be worded appropriately.
- Parameters
description (
Description
) – The description to be built or appended to.- Return type
The mbtest.imposters.base module¶
-
class
mbtest.imposters.base.
JsonSerializable
[source]¶ Object capable of being converted to a JSON serializable structure (using
as_structure()
) or from such a structure ((usingfrom_structure()
).-
abstract
as_structure
()[source]¶ Converted to a JSON serializable structure.
- Return type
- Returns
Structure suitable for JSON serialisation.
-
abstract