Стоимость исправления дефекта, который нашли на этапе эксплуатации в 5-10+ раз дороже, чем на этапе разработки или даже на этапе проработки требований. И это не только потери, которые не ощущаются в собственном кармане, а еще и временные затраты на переделку (иногда и множественные). Поэтому принято выстраивать систему Ворот качества, которые снижают вероятность проникновения дефекта на следующий этап.

На предыдущем шаге разбирались с созданием API в Django. Теперь разберем проверку API на дефекты, для этого затронем несколько аспектов:

  • Подготовка тестовых данных при помощи Factory Boy и Faker
  • Request-response тесты при помощи Django client и pytest
  • Property-based тесты в Schemathesis
  • Contract тесты при помощи Microcks

Я рассчитываю, что ты уже знаешь, как писать и запускать тесты для Python кода, поэтому этому уделено будет минимум времени.

Виды тестов и пирамида тестирования

Способов и видов тестирования вагон и маленькая тележка, для текущего рассказа нужно знать о функциональном:

  1. Юнит тестирование — изолированное тестирование компонента (функция, метод, класс) на корректность вывода по заданному вводу
  2. Компонентное тестирование — аналогично юнит-тестам, только компоненты больше, например, модули
  3. Интеграционное тестирование — тестирование взаимодействия компонентов между собой, например, API записи данных в базу данных.

Под юнит тестами часто понимают все тесты, которые не требуют инфраструктуры и могут выполняться локально

Перед тем как наколбасить 100500 тестов, нужно понять, сколько и каких стоит писать, для этого помогает пирамида тестирования:

Получается, что на 100 юнит-тестов стоит иметь не менее 20 интеграционных. Конечно же, это не догма, а лишь рекомендация, которая позволяет придерживаться баланса.

Тесты на API зачастую являются интеграционными.

Подготовка тестовых данных при помощи Factory Boy и Faker

Получить доступ к полному материалу
Полный текст доступен в курсе