Я делаю HTTP-запрос GET, используя библиотеку запросы . Например (усечено):
requests.get("http://123-fake-api.com")
Я написал тест по шаблону запросы-макета запросов .
import requests import requests_mock @requests_mock.Mocker() def test(m): m.get("http://123-fake-api.com", text="Hello!") response = requests.get("http://123-fake-api.com").text assert response.text == "Hello!"
Когда я запускаю тест с pytest , я получаю следующую ошибку.
E fixture 'm' not found
Почему декоратор запросов-макета выдает ошибку "fixture 'm' not found"? И как мне это решить?
Вы получаете сообщение об ошибке, поскольку декоратор Requests Mock не распознается в Python 3 ( см. Выпуск GitHub ). Чтобы устранить ошибку, используйте обходной путь, указанный в Как использовать pytest capsys в тестах, в которых используются фиктивные декораторы? . Например:
import requests import requests_mock @requests_mock.Mocker(kw="mock") def test(**kwargs): kwargs["mock"].get("http://123-fake-api.com", text="Hello!") response = requests.get("http://123-fake-api.com") assert response.text == "Hello!"
Вы также можете использовать одну из следующих альтернатив:
Используйте Requests Mock в качестве Pytest фикстура . Например:
import requests def test_fixture(requests_mock): requests_mock.get("http://123-fake-api.com", text="Hello!") response = requests.get("http://123-fake-api.com") assert response.text == "Hello!"
Использование макетов запросов в качестве диспетчера контекста . Например:
import requests import requests_mock def test_context_manager(): with requests_mock.Mocker() as mock_request: mock_request.get("http://123-fake-api.com", text="Hello!") response = requests.get("http://123-fake-api.com") assert response.text == "Hello!"