Сегодня я хотел бы предложить краткую витрину о том, как эффективно протестировать API Django. По сути, то, что мы хотим выполнить, это способность тестировать и контролировать, как наши приложения обрабатывают определенные ответы от внешних веб-сигналов. Программа может сделать вызовы на несколько различных API, таких как reddit’s или Google, и мы хотим запечатлеть эти ответы в тесте. Что еще более важно, таким образом, чтобы наши тесты могли пройти каждый раз, независимо от статуса API, которые мы потребляем.
Как?
Используя патч.
Патч – это декоратор в библиотеке Unittest.Mock
. Это позволяет нам заменить атрибуты в нашей программе с помощью Макет Объекты и делают утверждения о том, как наша программа будет вести себя. Давайте взглянем.
Здесь у нас есть простое Django API, сгенерированное, используя мой стартовый проект . Он делает запрос на API Reddit для получения информации и возвращает простую полезную нагрузку JSON клиенту.
И, конечно же, соответствующий тест:
Но подождите – что если API Reddit находится вниз? Наш тест потерпит неудачу. Установки тесты никогда не должны потерпеть неудачу из-за чужих приложений. Они всегда должны проходить независимо от состояния других систем. Мы также не можем надежно захватить оба (1) Reddit – это нормально, и (2) Reddit Down. Для этого нам нужно использовать патч для USURP нашего звонка на API Reddit с помощью функции издевательства.
Давайте переписаним наш тест, используя патч:
Теперь мы никогда не будем потерпеть неудачу из-за внешней системы, не ведущей себя, потому что независимо от реального статуса, наше представление всегда получит именно то, что мы хотим проверить.
Мы можем улучшить читаемость и организацию наших изделов, используя лямбда
ключевое слово. Не часто я нахожу подходящее использование лямбда
Так что стоит подсвечивать. Вот последние тесты переписаны:
Давайте суммируемся
Мы хотим захватить наши ответы API под тестом. Итак, мы использовали в нетестые. Однако иногда наша API зависит от других систем, вызывающих зависимость и потенциал, чтобы перейти с переходом. Чтобы решить эту проблему, мы используем патч. Патч позволяет нам узурпировать базовые функции и реализовать наши собственные тестовые функции. Затем мы использовали ключевое слово LAMBDA, чтобы определить нашими издевательствами в соответствии с лучшей читабельностью.
Спасибо за чтение и счастливого взлома!
Оригинал: “https://dev.to/zeevo/effective-python-api-testing-using-django-and-patch-1amj”