pytest has its own method of registering and loading custom fixtures. requests-mock provides an external fixture registered with pytest such that it is usable simply by specifying it as a parameter. There is no need to import requests-mock it simply needs to be installed and specify the argument requests_mock.
The fixture then provides the same interface as the
requests_mock.Mocker letting you use requests-mock as you would expect.
>>> import pytest >>> import requests >>> def test_url(requests_mock): ... requests_mock.get('http://test.com', text='data') ... assert 'data' == requests.get('http://test.com').text ...
If you are unfamiliar with how pytest decorators work then please read the fixture documentation first as it means that you should no longer use the @requests_mock.Mocker syntax that is present in the documentation examples. This confusion between how unittest and pytest work is the biggest source of complaint and is not a requests-mock inherent problem.
Some options are available to be read from pytest’s configuration mechanism.
These options are:
requests_mock_case_sensitive: (bool) Turn on case sensitivity in path matching.
This section was initially copied from StackOverflow
- aren’t bound to an instance or type as in instance or class methods;
- don’t have default values;
- aren’t bound with functools.partial;
- aren’t replaced with unittest.mock mocks
to be replaced with fixture values, and will fail if it doesn’t find a suitable fixture for any argument. So stuff like
import functools import pytest def deco(func): @functools.wraps(func) def wrapper(*args, **kwargs): args += ('spam',) return func(*args, **kwargs) return wrapper @deco def test_spam(spam_arg): assert True
will fail, and this is exactly what requests-mock does. A workaround to that would be passing the mocker via keyword args:
import pytest import requests_mock @requests_mock.Mocker(kw='m') def test_with_mock_and_fixtures(capsys, **kwargs): m = kwargs['m'] ...
however at this point it would simply be easier to use the provided pytest decorator.