Зарегистрируйтесь, чтобы продолжить обучение

Введение Python: Автоматическое тестирование

Код профессиональных разработчиков содержит меньше ошибок, чем код начинающих. Это происходит не потому, что они умнее, внимательнее к деталям или видят код насквозь. Настоящая причина кроется в том, что они пишут тесты.

Автоматизированное тестирование — неотъемлемая часть процесса программирования в профессиональной среде. Тесты — единственный надежный способ убедиться в работоспособности кода. Они не избавляют от багов, но позволяют держать их количество на приемлемом уровне. Тесты дают уверенность, что изменения в одной части системы не сломали другие части.

Но тесты нужны не только для проверки работоспособности кода. Существуют и другие виды автоматизированных тестов: например, тесты производительности или тесты на уязвимости.

В первую очередь программисты отвечают за функциональные тесты. Эти тесты проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы, например:

  • Программист написал код, который отвечает за регистрацию пользователя.
  • Далее он проводит функциональный тест, который показывает, получается ли у пользователя зарегистрироваться.

По степени изолированности тестируемых частей кода функциональные тесты принято делить на три типа:

  • Модульные — простые, но не очень эффективные тесты. Они проверяют работоспособность функций или других конкретных модулей программы
  • Интеграционные — такие тесты охватывают большую часть системы и проверяют, работают ли модули вместе. Таким тестам программисты уделяют основное внимание. Интеграционные тесты все еще достаточно просто писать, если экосистема проекта подготовлена к этому
  • Системные — самые эффективные тесты, но при этом их сложно писать и поддерживать. Они эмулируют поведение пользователя: кликают на ссылки, отправляют формы. Такие тесты часто ломаются, потому что они опираются на верстку сайта, а она может непредсказуемо поменяться. Еще при таком тестировании невозможно точно определить, когда с точки зрения программы закончилось одно действие и началось другое

Несмотря на различия, в основе всех автоматических тестов лежат одни и те же принципы, часто используются одни и те же инструменты. Этот курс знакомит с общими принципами тестирования и шаг за шагом проводит через все возникающие во время тестирования задачи. На курсе мы затронем такие основные темы:

  • Утверждения (Asserts)
  • Фреймворки для тестирования (Pytest)
  • Модульное тестирование (Unit)
  • Покрытие кода тестами
  • Разработка через тестирование (TDD)

Как мы тестируем тесты в данном курсе

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

Алгоритм решения практик в этом курсе:

  1. Изучить задание и ожидаемую логику работы функции
  2. Исходя из ожидаемой логики написать тесты
  3. Если тесты придерживаются ожидаемой логики, то они:
    • успешно пройдут для корректной реализации
    • обнаружат ошибки, допущенные в неправильных реализациях

В практиках этого курса вместо вывода результатов теста, вы будете видеть вывод утилиты Supressor. Это наша утилита, которую мы используем для проверки успешных и упавших тестов. Утилита показывает состояние тестов - выполнились они или упали, а также сравнивает его с ожидаемым. Ниже приведены примеры вывода:

  • Вывод успешной практики:

    • "Expected tests to pass, received tests passed" - ожидалось, что тесты пройдут, и они прошли. Это значит, что тесты выполнились успешно для корректной реализации функции
    • "Expected tests to fail, received tests failed" - ожидалось, что тесты упадут, и они упали. Это значит, что тесты обнаружили ошибку в некорректной реализации функции
  • Вывод ошибки в практике:

    • "Expected tests to pass, but error occurred. See output above." - ожидалось, что тесты пройдут, но они упали. Это значит, что тесты не прошли на корректной реализации. Возможно в тестах неправильно или больше чем требуется описана ожидаемая логика.
    • "Expected tests to fail, but they passed. See output above." - ожидалось, что тесты упадут, но они прошли. Это значит, что тесты прошли на некорректной реализации и не отловили возможных ошибок. Возможно в тестах неправильно или меньше чем требуется описана ожидаемая логика.

Более детальную информацию о том, как мы тестируем тесты в данном курсе, вы можете почитать в этой статье.


Дополнительные материалы

  1. Как мы тестируем тесты (О проверке тестов в упражнениях этого курса)

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 24 апреля
профессия
новый
Программирование на JavaScript и Python, разработка веб-приложений и сервисов используя Django, проектирование REST API и работа с базами данных
16 месяцев
с нуля
Старт 24 апреля
профессия
новый
Автоматизированное тестирование веб-приложений на Python
8 месяцев
с нуля
Старт 24 апреля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»