Skip to main content

Simplified requests calls mocking for pytest

Project description

https://github.com/idlesign/pytest-responsemock

release lic coverage

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.

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:

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:

with response_mock(
    '''
    GET http://some.domain

    Allow: GET, HEAD
    Content-Language: ru

    -> 200 :OK
    '''
):
    ...

Test json response:

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:

with response_mock(b'GET http://some.domain -> 200 :' + my_bytes):
    ...

Access underlying RequestsMock (from responses package) as mock:

with response_mock('HEAD http://some.domain -> 200 :Nope') as mock:

    mock.add_passthru('http://other.domain')

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

pytest-responsemock-1.1.1.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

pytest_responsemock-1.1.1-py2-none-any.whl (6.5 kB view details)

Uploaded Python 2

File details

Details for the file pytest-responsemock-1.1.1.tar.gz.

File metadata

  • Download URL: pytest-responsemock-1.1.1.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/2.7

File hashes

Hashes for pytest-responsemock-1.1.1.tar.gz
Algorithm Hash digest
SHA256 71abcebaf61f8930bd92bd643bfc9bc2891299e4e819e21fec18c8434d5dc9af
MD5 e2c7e49790733d32b92e4be6d793334e
BLAKE2b-256 a210e9ad385e041aa755f3ec16b91b72a7485bc3f900b087408ae176a7022241

See more details on using hashes here.

File details

Details for the file pytest_responsemock-1.1.1-py2-none-any.whl.

File metadata

File hashes

Hashes for pytest_responsemock-1.1.1-py2-none-any.whl
Algorithm Hash digest
SHA256 bb2583f0cf64e8b47183464d43fe30656ddb7318f64ff2fdf935067827c461c0
MD5 1170f59f8e5e76588b6acfb8845684c0
BLAKE2b-256 86872f1653c6730f941b978d1e816072815685ad09de7b7f7f8966b0b9ab44fe

See more details on using hashes here.

Supported by

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