#python #mocking #pytest
#python #издевательство #pytest
Вопрос:
Мы разработали различные сервисы с использованием Flask, и все они действительно выступают в качестве посредника между конечным пользователем и различными сторонними API (но без баз данных). Я разработал тесты с использованием pytest с помощью test_client и т. Д., И Это работает хорошо. Но каждый раз, когда маршрут / конечная точка вызывается одним из тестов, он фактически взаимодействует с сторонними API.
Каков правильный способ создания пробных тестов в этой ситуации? Мне интересно, должен ли я просто разработать точную копию конечных точек, но имитировать строки, в которых происходят запросы к сторонним API. Это кажется большой работой, но если бы я просто возвращал некоторый ожидаемый JSON из заданной конечной точки, я не думаю, что код будет протестирован очень хорошо.
Ответ №1:
Для сценариев, в которых вам нужно вызвать сторонний API, вы можете рассмотреть возможность использования видеомагнитофона Pytest.
Это плагин pytest, который позволяет записывать все http-запросы, сделанные внутри метода тестирования или функции, используя декоратор следующим образом.
@pytest.mark.vcr()
def my_test():
"""
Example of a function that test a client doing http requests
"""
some_client = SomeClient()
some_client.authenticate()
resource = some_client.get_resource("foo")
assert resource is not None
При первом запуске теста вызовы записываются в файл, называемый «кассетой». Затем последующие запуски этого теста будут использовать эту кассету как своего рода макет вместо отправки реальных HTTP-вызовов.
Это также работает, если вы тестируете представления приложений flask, в которых выполняются вызовы https.
Будьте осторожны, поскольку это решение подразумевает, что если вы измените тестируемый код таким образом, чтобы добавить http-вызовы, тест будет прерван, поскольку новые вызовы не будут существовать в кассете. Вам придется либо удалить кассету и записать ее снова, либо запустить свой тест, --vcr-record=new_episodes
чтобы добавить новые вызовы в существующую кассету.
Комментарии:
1. о, это здорово. После просмотра документов это будет большой помощью.