Расширение pytest для удобной имитации response-ответов.
В основе лежит фикстура response_mock, являющаяся менеджером контекста.

Ожидается, что блок кода, под данным менеджером содержит один или более вызовов requests, ответы на которые требуется имитировать.

    def for_test():
"""Работу этой функции мы будем проверять тестом."""
return requests.get('http://some.domain')

def test_me(response_mock):
"""Это наш тест. Он использует pytest-фикстуру response_mock."""

with response_mock('GET http://some.domain -> 200 :Nice', bypass=False):
# Ответы на обращения requests под данным менеджером
# будут сымитированы.
result = for_test()

# А вот и имитация в виде ответа:
assert result.ok
assert result.content == b'Nice'

# Заголовок для ответов:
with response_mock(
'''
GET http://some.domain

Allow: GET, HEAD
Content-Language: ru

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

Благодаря использованию контекстного менеджера мы можем подменять ответы только в определённых участках кода.

Кроме того, для случаев, когда нужно по какому-то условию отключить имитацию и заставить requests опросить реальный ресурс, существует необязательный параметр bypass (по умолчанию он False).

Основным параметром для менеджера является одно или более (для описания последовательных запросов) правил, сформулированных в виде строк, описывающих на какой запрос какой ответ требуется имитировать.

Формат строки правила прост: HTTP_МЕТОД URL[\nЗАГОЛОВОК] -> КОД_СТАТУСА :ТЕЛО_ОТВЕТА

Смотрите также:


Категории

Окружение
Область
Проект

На заметку
У нас есть представительство во ВКонтакте. Ссылка в самом низу страницы.