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

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

.
Почему Python – отличный выбор для автоматизации
03.07.2019 00:00

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

Python – изумительный язык программирования. Как сказал Дэн Каллаэн (Dan Callahan) в своем докладе на PyCon 2018, "Пайтон занимает второе место в списке лучших языков, подходящих для чего угодно, и это чудесно". Однако я убежден, что если рассматривать тест-автоматизацию, то Python – один из наилучших языков для нее. Ниже – десять причин, почему я так думаю.

Причина 1. Дзен Python

Дзен Python, зафиксированный в PEP20 – идеальное руководство для тест-автоматизации. Код тестов должен быть естественным мостиком между шагами тестов, написанными на обычном языке, и программными вызовами, автоматизирующими их. Тесты должны быть читабельны и наглядны, потому что они описывают функциональность, которая тестируется. Они должны внятно сообщать, что именно они покрывают. Простые шаги лучше сложных. Код тестов должен как можно меньше увеличивать энтропию тестов. Выразительная элегантность Python делает его мощным мостом от тест-кейсов к тест-коду.

(Хотите быстро ознакомиться с дзеном Python? Наберите import this в интерпретаторе).

Причина 2: pytest

Pytest – один из лучших тест-фреймворков, доступных сейчас на любом языке, а не только на Python. Он может справиться с любым функциональным тестом, будь то юнит, интеграция или end-to-end. Тест-кейсы пишутся просто как функции (никаких побочных эффектов, если вы избегаете глобальных переменных), и могут принимать параметризированные входные данные. Общие наборы объектов – это обобщенный, переиспользуемый способ работы с настройкой и очисткой. Базовые утверждения-ассерты имеют автоматический самоанализ, и сообщения о падении выдают значимую информацию. Тесты можно фильтровать при выполнении. Плагины расширяют pytest и позволяют покрывать код, запускать тесты параллельно, использовать сценарии Gherkin и интегрироваться с другими фреймворками – например, Django и Flask. Другие фреймворки Python тоже хороши, но pytest – это лучшее на данный момент.

Причина 3: программные пакеты

Несмотря на все жалобы на CheeseShop, у Python богатая библиотека полезных пакетов для тестирования: pytest, unittest, doctest, tox, logging, paramiko, requests, Selenium WebDriver, Splinter, Hypothesis, и все прочие доступны как готовые ингредиенты для особых рецептов автоматизации. Раз-два, и они установлены, и не надо изобретать колесо!

Причина 4: мульти-парадигма

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

Причина 5: типируйте как хотите

Динамическая, сразу доступная утиная типизация Python отлично подходит для тест-автоматизации, потому что большая часть функциональных тестов выше юнит-уровня не требует пристального внимания к типам. Однако если вам требуются статичные типы, то вам помогут mypy, Pyre, и MonkeyType. Типировать можно любым способом!

Причина 6: IDE

Хорошая поддержка IDE сильно упрощает использование языка и его фреймворков. Если говорить о Python -тестировании, то , JetBrains PyCharm поддерживает визуальное тестирование с pytest, unittest, и doctest прямо "из коробки", а профессиональная версия включает поддержку фреймворков BDD (например, pytest-bdd, behave, lettuce) и веб-разработки. Если требуется что-то полегче, то Visual Studio Code сейчас бешено популярен. Его Python -расширения поддерживают кучу полезного: сниппеты, линтинг, окружения, дебаг, тестирование и терминал командной строки прямо в окне. Atom, Sublime, PyDev, и Notepad++ тоже отлично работают.

Причина 7: командная строка

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

Дополнительный бонус: модули автоматизации можно вызывать из интерпретатора Python REPL или же (еще лучше) из блокнота Jupyter. Это значит, что автоматизация может поддерживать исследовательское тестирование! Представьте только – вы можете использовать вызовы Python, чтобы автоматически довести веб-приложение до точки, в которой требуется ручная проверка. Вызовы можно менять местами, повторять, пропускать, и менять их на лету. С Python это возможно.

Причина 8: легкость входа.

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

Причина 9: возможность масштабирования

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

Причина 10: Популярность

Python – один из наиболее популярных языков программирования в мире. Его систематически выводят в топ на TIOBE, Stack Overflow, и GitHub (а также GitHut). Его любят выбирать веб-разработчики, инженеры инфраструктур, дата-аналитики и тест-автоматизаторы. Сообщество Python тоже помогает продвигать язык. Разработчиков на Python очень много, как и онлайн-поддержки для него. В обозримом будущем этот язык (я про Python 3) никуда не денется.

Что насчет других языков?

Цель статьи – выявить достоинства Python для тест-автоматизации, основанные на его личных заслугах. Лично я убежден, что Python – один из лучших языков автоматизации, однако выбор Java, C#, и Ruby тоже оправдан. См. мою статью "The Best Programming Language for Test Automation" для сравнения.

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