Разделы портала

Онлайн-тренинги

.
Основы тестирования на Python: введение
12.02.2021 00:00

Автор: Энди Найт (Andy Knight)
Оригинал статьи
Перевод: Ольга Алифанова

Python – потрясающий язык программирования. Его любят и новички, и эксперты, и он регулярно оценивается как язык с самым высоким спросом. На конференции PyData Carolinas 2016 Джош Хоус, старший менеджер управления данными в MaxPoint, описал Python примерно так:

Python – магический инструмент, который позволяет легко решать самые сложные мировые проблемы.

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

Почему надо тестировать именно на Python?

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

Примеры ниже иллюстрируют способы использования Python для тест-автоматизации:

  • Разработчик внедряет быстрые проверки в функцию docstrings.
    • Разработчик пишет юнит-тесты для модуля или пакета.
    • Тестировщик пишет интеграционные тесты для REST API.
    • Тестировщик пишет end-to-end-тесты, используя Selenium.
    • Дата-аналитик проверяет функции в блокноте Jupyter.
    • "Три товарища" пишут сценарии "Если-Когда-Тогда" для BDD-тестирования.

Помните, Python можно использовать для любого черноящичного тестирования, даже если ваш продукт не написан на Python!

Версия Python

Выбор правильной версии Python – непростое решение. Для более подробной информации прочитайте статью "Какую версию Python использовать". Краткое содержание:

  1. Используйте подходящую версию Python для тестов белого ящика.
  2. Используйте CPython 3 для черного ящика, если это возможно.

В этой серии статей, если не указано иное, используется CPython 3.

Выбор фреймворка

Фреймворков Python так много, что выбор кажется устрашающим – только посмотрите на Python wiki, The Hitchhiker’s Guide to Python и pythontesting.net. Несмотря на избыток вариантов, надо учитывать несколько важных моментов.

  1. Учитывайте тип тестирования. С базовыми юнит-тестами справятся unittest и даже doctest, но более высокоуровневое тестирование лучше сработает с другими фреймворками вроде pytest. BDD-тестирование потребует behave, lettuce, или radish.
  2. Учитывайте поддерживаемую версию Python. Python 2 и 3 – это два разных языка. У разных фреймворков разный уровень поддержки версий, что особенно проблематично для тестирования белого ящика. Более того, функциональность в зависимости от версии Python тоже может разливаться.
  3. Подумайте о поддержке и развитии. Как правило, лучше выбирать зрелые, активно развивающиеся фреймворки для будущей поддержки. К примеру, когда-то популярный nose приказал долго жить.

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

Виртуальные окружения

Виртуальное окружение (VE) – это локальная инсталляция Python с определенным набором пакетов. Инструменты вроде  venv (Python 3.3+), virtualenv (Python 2 и 3), и Conda (Python 2 и 3; для дата-инженеров) помогают легко создать виртуальные окружения из командной строки. Pipenv идет дальше, комбинируя управление VE с простым, но мощным управлением пакетами. Создание как минимум одного отдельного VE для каждого проекта Python – как правило, хорошая практика. VE очень полезны для автоматизации, потому что:

Они позволяют инженерам одновременно поддерживать несколько Python-окружений.

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

Они позволяют пользователям локально устанавливать пакеты Python, не меняя глобальные установки.

  • У пользователей может не быть прав устанавливать пакеты глобально.
  • Глобальные изменения могут повредить другому Python-зависимому ПО.

Они могут импортировать и экспортировать списки пакетов для легкого восстановления.

VE особенно ценны при непрерывной интеграции и деплое, потому что легко обеспечивают согласованность Python. К примеру, задача в Jenkins может создать виртуальное окружение, установить в него зависимости из PyPI, прогнать тесты Python, и безопасно самоуничтожиться. Как только продукт готов к деплою, можно воспользоваться той же самой конфигурацией VE.

Рекомендованные IDE

Любая серьезная автоматизация требует не менее серьезной IDE. Мой фаворит - JetBrains PyCharm. Мне очень нравится его изящный интерфейс и интуитивная суть, и он сразу поддерживает несколько тест-фреймворков Python. PyCharm можно скачать как отдельную IDE или как плагин к JetBrains IntelliJ IDEA. Community Edition бесплатна и удовлетворяет большинство потребностей автоматизации, а Professional Edition требует лицензии. PyDev – хорошая альтернатива для предпочитающих Eclipse. Eric подойдет пуристам – это Python-IDE, написанная на Python. У всех трех есть фреймворк плагинов, но PyCharm и PyDev выигрывают по популярности и поддержке. Есть также классическая IDLE, но ее использование сейчас не рекомендуется из-за багов и наличия более удачных вариантов.

Легкие текстовые редакторы позволят просто и быстро вносить небольшие правки. Из недавних фаворитов - Visual Studio Code. Notepad++ всегда выигрывает для Windows. Atom – более новый кросс-платформенный редактор от GitHub, набирающий популярность. Конечно, UNIX-платформы обычно предоставляют vim или emacs.

Обзор фреймворков

Если эта серия статей для вас, установите IDE, настройте виртуальное окружение, и поехали! Следующие статьи расскажут о популярных тест-фреймворках Python. Каждую из них можно использовать в качестве стартовой информации или быстрой справки. Пожалуйста, обратитесь к официальной документации фреймворка для подробной информации – нет смысла дублировать ее здесь.

Обсудить в форуме