rmoq ¶
A simple request mocker that caches requests responses to files.
Usage¶
Function decorator
The example below will put the content of fixtures/example.com.txt into the body of the request and if it does not exist the content will be downloaded and stored in fixtures/example.com.txt.
@rmoq.activate()
def test_remote_call():
response = requests.get('http://example.com')
assert response.body == 'Example'
The example below works as the one above it just uses the given path (test_fixtures) instead of the default path.
@rmoq.activate('test_fixtures')
def test_remote_call():
response = requests.get('http://example.com')
assert response.body == 'Example'
With statements
It can also be used in a with statement
def test_remote_call():
with rmoq.Mock():
response = requests.get('http://example.com')
assert response.body == 'Example'
The mock object can also take a path as an argument.
Class decorator
The decorator will also work for classes, which means you can decorate a whole test-case:
@rmoq.activate()
class RemoteTestCase(unittest.TestCase)
def test_remote_call():
response = requests.get('http://example.com')
assert response.body == 'Example'
Disable in one test run Setting the environment variable RMOQ_DISABLED to True will disable rmoq:
$ RMOQ_DISABLED=True py.test
This can be useful to make sure that the a CI server does not use time on saving new fixtures if you are only using fixtures locally.
The Mock class¶
- class rmoq.Mock(prefix='fixtures', backend=<rmoq.backends.FileStorageBackend object at 0x7f6a3fa90650>)¶
The mocker class that mocks requests in rmoq. It supports being used in with-statements and have a method :method:`activate` that can be used as a decorator on functions or classes.
- activate(prefix=None, backend=None)¶
A decorator used to activate the mocker.
Parameters: - prefix –
- backend – An instance of a storage backend.
Backends¶
rmoq supports custom storage backends by passing an instance into the backend parameter of rmoq.activate() method. A storage backend must inherit from rmoq.RmoqStorageBackend and implement the get() and put() methods.
- class rmoq.RmoqStorageBackend¶
Base backend for rmoq backends. All storage backends for rmoq must inherit this backend if it is to be used with rmoq.
- static clean_url(url, replacement='_')¶
Cleans the url for protocol prefix and trailing slash and replaces special characters with the given replacement.
Parameters: - url – The url of the request.
- replacement – A string that is used to replace special characters.
- get(prefix, url)¶
Fetches a request response from storage. Should be overridden by subclasses.
Parameters: - prefix – A prefix that separates containers of request responses in the storage.
- url – The url of the request.
- put(prefix, url, content, content_type)¶
Writes a request response in to storage. Should be overridden by subclasses.
Parameters: - prefix – A prefix that separates containers of request responses in the storage.
- url – The url of the request.
- content – The content of the request response.
- content_type – The content type header of the request response.
- class rmoq.FileStorageBackend¶
Bases: rmoq.backends.RmoqStorageBackend
A rmoq backend that reads and writes to the local file system. This is the default backend.
- get(prefix, url)¶
- get_filename(prefix, url)¶
Creates a file path on the form: current-working-directory/prefix/cleaned-url.txt
Parameters: - prefix – The prefix from the .get() and .put() methods.
- url – The url of the request.
Returns: The created path.
- put(prefix, url, content, content_type)¶
- class rmoq.MemcachedStorageBackend(servers, **options)¶
Bases: rmoq.backends.RmoqStorageBackend
Storage backend for rmoq that uses memcached for storage. Takes a the same arguments as python-memcached: a list of servers and options as keyword arguments.
- create_key(*parts)¶
- get(prefix, url)¶
- put(prefix, url, content, content_type)¶