Основы тестирования сокращают вероятность ругательств со стороны тимлида и уменьшают количество ошибок на проде в целом. Особенно эту статью рекомендую дата-сайентистам, ибо онлайн-университеты почему-то урезают этот раздел на факультетах ИИ до минимума.
Проверка адресов 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 и читать результаты. Если вы созрели для чего-то более масштабного, рекомендую статью Дениса Исангулова:
Добавить комментарий