Как писать тесты для Python-приложений, если вы никогда этого не делали

Posted by

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

Проверка адресов email

Тест кода Python — это временная надстройка над основной частью программы. По мнению softwaretestinghelp.com, эта библиотека входит в тройку самых популярных инструментов. Давайте посмотрим на примере, как проверять вводимые адреса электронной почты.

Напишем функцию, проверяющую присутствие знака @, латиницы, и отсутствие некоторых спецсимволов:

Теперь у нас есть система проверки email. Адреса вроде test@example.org, user123@tproger.ru действительны. А вот ‘not valid@example.org’ и ‘ivan ivanov’ — нет:

pytest с легкостью автоматизирует такую проверку. Проверим валидность ящиков в три этапа:

Инструкция assert («допущение, утверждение») проверяет истинность выражения, not – инвертирует проверку

Важно понимать, что тестируем мы конкретный участок кода, а не сами почты. На проде is_valid_email_address() будет являться рабочим, а не тестирующим компонентом.

Запуск проверки

Сохраним test_regular_email_validates() в файл validator.py и запустим тест:

Тест «обопрется» на assert и потому «соберет» 3 объекта (‘collected 3 items’):

Индикатор 100% показывает что наш валидатор работает штатно. Однако он далек от совершенства. john.doe@example прошел бы тест, как и john.doe+abc@gmail.com, хотя оба адреса недействительны.

Давайте добавим эти примеры в наш validator.py:

Теперь при перезапуске мы получим два «фэйла»:

В выводе pytest появится новый раздел Failures, в котором подробно объясняется, в какой момент тест кода Python не удался. Это позволит отладить ошибки.

Фикстуры (Fixtures)

Обычно этим термином обозначают небольшой набор данных, которым наполняют хранилище приложения. В контексте тестирования фикстурами («арматурой») называют функции pytest.

Мы можем создать их с помощью декоратора pytest.fixture():

Обратите внимание, что настройка базы данных и удаление происходят в одном месте. Ключевое слово yield указывает pytest, где запустить тесты.

Чтобы фикстура действительно задейстовалась, добавим ее имя в качестве аргумента:

Полезные параметры командной строки

— Запустить одну конкретную функцию:

— Перечислить функции в файле:

— Остановить при первой ошибке:

— Запустить только последний неудачный тест:

— Запустите все тесты, но сначала последние неудачные:

Заключение

Теперь в нашем распоряжении простейший кейс проверки электронной почты. И мы знаем теперь, как использовать pytest и читать результаты. Если вы созрели для чего-то более масштабного, рекомендую статью Дениса Исангулова:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *