Почему шаблон запрашивающего макета-декоратора выдает ошибку "fixture 'm' not found" с pytest? - PullRequest
1 голос
/ 18 января 2020

Я делаю 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"? И как мне это решить?

1 Ответ

2 голосов
/ 18 января 2020

Вы получаете сообщение об ошибке, поскольку декоратор 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!"

Дополнительные параметры

Вы также можете использовать одну из следующих альтернатив:

1. Плагин Pytest для запросов-макет

Используйте 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!"

2. Диспетчер контекста

Использование макетов запросов в качестве диспетчера контекста . Например:

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!"
...