https://github.com/idlesign/pytest-responsemock
Simplified requests calls mocking for pytest
https://github.com/idlesign/pytest-responsemock
mock mocking pytest pytest-plugin python python3 requests responses
Last synced: 10 months ago
JSON representation
Simplified requests calls mocking for pytest
- Host: GitHub
- URL: https://github.com/idlesign/pytest-responsemock
- Owner: idlesign
- License: bsd-3-clause
- Created: 2020-03-05T12:19:52.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-04-28T01:38:44.000Z (almost 3 years ago)
- Last Synced: 2025-04-30T22:49:28.571Z (10 months ago)
- Topics: mock, mocking, pytest, pytest-plugin, python, python3, requests, responses
- Language: Python
- Homepage: https://github.com/idlesign/pytest-responsemock
- Size: 46.9 KB
- Stars: 27
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG
- Contributing: CONTRIBUTING
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
pytest-responsemock
===================
https://github.com/idlesign/pytest-responsemock
|release| |lic| |coverage|
.. |release| image:: https://img.shields.io/pypi/v/pytest-responsemock.svg
:target: https://pypi.python.org/pypi/pytest-responsemock
.. |lic| image:: https://img.shields.io/pypi/l/pytest-responsemock.svg
:target: https://pypi.python.org/pypi/pytest-responsemock
.. |coverage| image:: https://img.shields.io/coveralls/idlesign/pytest-responsemock/master.svg
:target: https://coveralls.io/r/idlesign/pytest-responsemock
Description
-----------
*Simplified requests calls mocking for pytest*
Provides ``response_mock`` fixture, exposing simple context manager.
Any request under that manager will be intercepted and mocked according
to one or more ``rules`` passed to the manager. If actual request won't fall
under any of given rules then an exception is raised (by default).
Rules are simple strings, of the pattern: ``HTTP_METHOD URL -> STATUS_CODE :BODY``.
Requirements
------------
* Python 3.7+
Usage
-----
When this package is installed ``response_mock`` is available for ``pytest`` test functions.
.. code-block:: python
def for_test():
return requests.get('http://some.domain')
def test_me(response_mock):
# Pass response rule as a string,
# or many rules (to mock consequent requests) as a list of strings/bytes.
# Use optional `bypass` argument to disable mock conditionally.
with response_mock('GET http://some.domain -> 200 :Nice', bypass=False):
result = for_test()
assert result.ok
assert result.content == b'Nice'
# mock consequent requests
with response_mock([
'GET http://some.domain -> 200 :Nice',
'GET http://other.domain -> 200 :Sweet',
]):
for_test()
requests.get('http://other.domain')
Use with ``pytest-datafixtures``:
.. code-block:: python
def test_me(response_mock, datafix_read):
with response_mock(f"GET http://some.domain -> 200 :{datafix_read('myresponse.html')}"):
...
Describe response header fields using multiline strings:
.. code-block:: python
with response_mock(
'''
GET http://some.domain
Allow: GET, HEAD
Content-Language: ru
-> 200 :OK
'''
):
...
Test json response:
.. code-block:: python
response = json.dumps({'key': 'value', 'another': 'yes'})
with response_mock(f'POST http://some.domain -> 400 :{response}'):
...
To test binary response pass rule as bytes:
.. code-block:: python
with response_mock(b'GET http://some.domain -> 200 :' + my_bytes):
...
Access underlying RequestsMock (from ``responses`` package) as ``mock``:
.. code-block:: python
with response_mock('HEAD http://some.domain -> 200 :Nope') as mock:
mock.add_passthru('http://other.domain')