pytest-responsemock
Расширение pytest для удобной имитации response-ответов.
Репозиторий: https://github.com/idlesign/pytest-responsemock
Автор:
Игорь Стариков
В основе лежит фикстура
Ожидается, что блок кода, под данным менеджером содержит один или более вызовов
Благодаря использованию контекстного менеджера мы можем подменять ответы только в определённых участках кода.
Кроме того, для случаев, когда нужно по какому-то условию отключить имитацию и заставить
Основным параметром для менеджера является одно или более (для описания последовательных запросов) правил, сформулированных в виде строк, описывающих на какой запрос какой ответ требуется имитировать.
Формат строки правила прост:
Смотрите также:
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ЗАГОЛОВОК] -> КОД_СТАТУСА :ТЕЛО_ОТВЕТА
Смотрите также:
- Анонс pytest-responsemock 0.1.0 — имитируем ответы для requests в pytest
- КБМПи №1 Как имитировать ответ внешней системы в pytest?