Если вы когда-нибудь думали: «С какого же языка программирования мне следует начать свое путешествие в тестирование?» Ваш ответ – Python. Но он подойдет не только начинающим! В недавнем опросе, который я провела в LinkedIn, мы видим, что среди опытных программистов 35% проголосовали за то, что Python является их самым любимым языком программирования (немного опередив всеми любимую Java, которая заняла 2-е место с 32%).
На протяжении многих лет Python действительно набирает обороты как среди тестировщиков, так и среди разработчиков, да и в целом является самым динамично развивающимся языком программирования (как видно на диаграмме трендов Stack Overflow), и мы прекрасно понимаем, что это значит. Популярность = релевантность!
К концу этой статьи я ставлю своей целью дать вам понимание того, насколько мощным является язык программирования Python и какой фреймворк для тестирования лучше всего подойдет вашему проекту исходя из его потребностей.
Что хорошего в Python для автоматизации тестирования?
Python - это язык программирования с открытым исходным кодом, который увидел свет в 1991 году, чтобы явить миру интуитивно понятный, простой, удобочитаемый, элегантный и наименее нагроможденный язык программирования. И когда дело доходит до тестирования, такие качества необходимы, особенно когда в команде есть ручные тестировщики (которые не обязательно владеют навыками программирования), но сейчас переходят к автоматизации и могут радоваться быстрой кривой обучения Python для оперативного написания скриптов.
Есть довольно много причин, по которым популярность Python растет в области автоматизации тестирования и версий, почему он считается лучшим вариантом для нее. Среди них вы найдете: Дзен Python (19 основополагающих принципов философии проектирования на Python), удобство для начинающих, но мощность для профессионалов; Python – одновременно объектно-ориентированный и функциональный, у него есть большая библиотека пакетов для тестирования, серьезное сообщество по всему миру и многое другое! Я рекомендую прочитать вам чуть больше об этом в блоге AutomationPanda.
Фреймворк для тестирования на Python, который вам подходит
С ростом применения Python растет и популярность фреймворков для тестирования на его основе. Поначалу может быть неясно, какой инструмент из всего многообразия следует выбрать, поскольку у каждого из них есть свои плюсы и минусы. Тем не менее, у каждого проекта и организации, есть свои требования и ограничения, поэтому нам нужно учитывать их все при выборе инструмента, который подойдет нам лучше всего. Чтобы лучше разобраться в этом вопросе, я рекомендую вам прочитать эти статьи:
Как выбрать правильный инструмент для автоматизации тестирования
Как выбрать лучший инструмент – процесс поиска
Критерий выбора правильного функционального инструмента для тестирования
И, конечно, зачем же нужны списки с плюсами и минусами, как ни для того, чтобы собрать важные сведения об инструментах в одном месте! Итак, давайте рассмотрим 8 лучших фреймворков для тестирования на Python и рассмотрим как их преимущества, так и недостатки, чтобы вам было проще выбрать идеальный фреймворк для тестирования.
Преимущества и недостатки 8 лучших фреймворков для тестирования на Python
Robot Framework
Pytest
TestProject
PyUnit (Unittest)
Nose2
Behave
Lettuce
Testify
Robot Framework (RF)
Robot Framework (RF) – открытый фреймворк автоматизации тестирования для приемочного тестирования, ATDD и RPA. Его ядро написано на Python, но может запускаться на Jython (Java-реализация Python) и IronPython (Python для .NET framework). Для начала работы вам потребуется установить Python версии 2.7.14 или выше.
Преимущества:
Основывается на подходе Keyword-driven testing (KDT), что позволяет нам легко создавать тест-кейсы с использованием удобных для восприятия человеком ключевых слова (не требует опыта написания кода).
Поддерживает все операционные системы (Windows, Linux или macOS) и все приложения (веб, мобильные и десктопные приложения).
Предоставляет понятные и удобные данные HTML-отчетов (включая скриншоты).
Богатая экосистема с множеством API, что делает его хорошо расширяемым фреймворком и позволяет интегрироваться любым другим сторонним инструментом.
Поддерживает синтаксис If/Else, начиная с RF v4.0.
Отлично поддерживается сообществом и имеет множество онлайн-ресурсов.
Основывается на подходе Keyword-driven testing (KDT), что позволяет нам легко создавать тест-кейсы с использованием удобных для восприятия человеком ключевых слова (не требует опыта написания кода).
Поддерживает все операционные системы (Windows, Linux или macOS) и все приложения (веб, мобильные и десктопные приложения).
Предоставляет понятные и удобные данные HTML-отчетов (включая скриншоты).
Богатая экосистема с множеством API, что делает его хорошо расширяемым фреймворком и позволяет интегрироваться любым другим сторонним инструментом.
Поддерживает синтаксис If/Else, начиная с RF v4.0.
Отлично поддерживается сообществом и имеет множество онлайн-ресурсов.
Недостатки:
Из коробки не поддерживается параллельное тестирование, но его можно использовать с помощью Selenium Grid (https://www.selenium.dev/documentation/en/grid/) или через Pabot (https://pabot.org/) (параллельный исполнитель для RF).
Хорошо это или плохо, но он заставляет вас работать в соответствии с заранее определенной методологией, поэтому поначалу кривая обучения может быть длиннее, чем обычно.
Создание ключевых слов-дженериков может занять больше времени, чем обычное написание кода.
Сложно настроить отчеты.
Итог: Если вы хотите внедрить фреймворк на основе keyword-driven подхода, который позволит ручным тестировщикам и бизнес-аналитикам создавать автоматизированные тесты, RF станет для вас отличным решением. Он предоставляет множество расширений и библиотек, а также прост в использовании. Однако, если вы ищете возможности для разработки сложных сценариев, вам придется кастомизировать фреймворк самостоятельно.
Pytest
Pytest – это открытый фреймворк для тестирования, который является одним из широкоиспользуемых в Python. Pytest также поддерживает модульное, функциональное и тестирование API. Для его запуска вам понадобится Python версии 3.5 или выше.
Преимущества:
Позволяет создавать компактные и простые наборы тестов.
Легко расширяется с помощью таких плагинов как: pytest-randomly, pytest-cov, pytest-django, pytest-bdd.
Еще вы можете добавить в свой проект плагин pytest html для печати HTML-отчетов с помощью одного просто флага в командной строке.
Можно выполнять тесты параллельно с помощью плагина pytest-xdist. Больше о нем можно узнать здесь.
Имеет очень большое сообщество.
Поддерживает фикстуры, позволяющие охватить все комбинации параметров без надобности переписывать тест-кейсы. Также они являются отличным способом управлять контекстом между этапами.
Недостатки:
Совместимость – не ключевой фактор для Pytest, поскольку вы хоть и можете с легкостью писать тест-кейсы на Pytest, но не можете использовать их в другом фреймворке из-за использования уникальных для Pytest процедур.
Итог: Если вы хотите писать модульные, небольшие и лаконичные тесты, которые поддерживают сложные сценарии, Pytest полноценно справится с этими задачами.
TestProject
TestProject – это полностью бесплатный фреймворк для автоматизированного тестирования с облачными и локальными HTML-отчетами. С помощью TestProject вы можете с легкостью собрать автоматизацию для тестирования мобильных, веб или иных приложений с помощью открытого SDK. Он поддерживает Python версии 3.6 и выше, а также фреймворки Pytest и Unittest (узнать больше можете здесь). TestProject включает в себя все зависимости, необходимые для обеспечения единственного кроссплатформенного тестирующего агента (посмотрите этот вебинар, чтобы узнать больше).
Преимущества:
Агент, включающий все сторонние библиотеки, необходимые для выполнения и разработки автоматизации тестирования для мобильных, веб или generic-тестов.
Бесплатные автоматические отчеты в форматах HTML/PDF (со скриншотами).
История выполнения доступна через RESTful API.
Всегда актуален за счет последних и стабильных версий драйверов Selenium/Appium.
Единый SDK для Web, Android, iOS и Generic-тестов.
Встроенный раннер и функционал для составления отчетов.
Кроссплатформенная поддержка для Mac, Windows, Linux и Docker.
Большое сообщество и поддержка: форум, блог и встроенный чат.
Недостатки:
Агент выполняет по одному тесту за раз, поэтому для параллельного тестирования вам понадобятся агенты Docker.
Функции коллаборации из гибридного облака ограничены при работе в автономном режиме. То есть в отличие от бесшовной совместной работы в гибридном облаке, при использовании локальной опции «on-prem» вам нужно будет реализовать совместную работу самостоятельно, сохранив тесты на общем сетевом диске/git.
Итог: Если вы ищете один фреймворк, который покрывает все ваши задачи по автоматизации от начала до конца, то TestProject определенно подходит для вас и идеально подходит для команд со смешанными навыками, от новичков до экспертов в автоматизации.
PyUnit (Unittest)
PyUnit (Unittest) – фреймворк для модульного тестирования на Python, вдохновлённый JUnit. Является частью стандартной библиотеки Python, таким образом, большинство разработчиков начинают свой путь в тестирование с него.
Преимущества:
Поскольку этот фреймворк является частью стандартной библиотеки, никаких дополнительных модулей ставить не нужно – все поставляется из коробки.
Предлагает простое и гибкое выполнение тест-кейсов.
Быстрая генерация отчетов о тестах в XML и unittest-sml-reporting.
Недостатки:
Цель кода теста порой становится неясной ввиду поддержки абстракции.
Большое количество шаблонного кода.
Из-за того, что фреймворк основан на Junit, для именования используется camelCase, а не snake_case, характерный для Python.
Итог: Если вам нужно базовое модульного тестирование и вы знакомы с xUnit-фреймворками, вам будет легко начать работать с PyUnit, и вероятно, для вас это будет наиболее удобно, и не нужно будет подтягивать дополнительные зависимости.
Nose2
Nose2 – это преемник Nose, который основан на PyUnit (Unittest), но с плагинами. Nose2 расширяет возможности PyUnit с помощью различных плагинов, которые добавляют поддержку выполнения тестов, обнаружение тестов, декораторы, фиктуры, параметризацию и т.д.
Преимущества:
Легко начать, поскольку он расширяет фреймворк PyUnit (Unittest), который поставляется из коробки в стандартной библиотеке Python.
Включает в себя большое количество встроенных плагинов, которые могут упростить и ускорить тестирование.
Поддерживает параллельное тестирование с помощью плагина mp.
Автоматически собирает тесты, если вы следуете рекомендациям по организации своей библиотеки и кода тестов.
Недостатки:
Отсутствие богатой документации, что может затормозить вас в самом начале.
Не так активно поддерживается в отличие от других фреймворков.
Итог: если вы уже пользуетесь PyUnit, можете попробовать Nose2 и понять, как он расширяет PyUnit.
Behave
Behave – один из самых популярных фреймворков BDD-тестирования (behavior-driven development) на Python. Несмотря на то, что он официально не является частью проекта Cucumber, он функционирует очень схоже с фреймворками Cucumber.
Преимущества:
Позволяет писать тест-кейсы на удобочитаемом языке, что упрощает совместную работу между командами с аналогичным функционалом.
Имеется большой объем документации и поддержка, которая поможет вам начать работу.
Полностью поддерживает Gherkin, таким образом создание функциональных файлов не требует особых технических знаний.
Есть интеграция с Django и Flask.
Недостатки:
Нет поддержки параллельного выполнения.
Только black-box тестирование.
Итог: Если ваша команда придерживается BDD-подхода и у вас уже есть какие-то знания о нем (например, о Cucumber, SpecFlow и т.д.) и вам нужно black-box тестирование, то обязательно обратите внимание на Behave. Также рассмотрите другие BDD-фреймворки, такие как Pytest-bdd, Lettuce (поговорим о нем ниже), Radish и остальные, о которых рассказывается в этой статье о сравнении BDD-фреймворков. Если вам нужно нечто большее, чем black-box тестирование, то лучше найти что-то иное.
Lettuce
Lettuce – другой BDD-фреймворк Python, основанный на Cucumber. Требует Python 2.7.14 или выше.
Преимущества:
Поддерживает Gherkin, что позволяет членам команды без технического бэкграунда легко создавать тесты на естественном языке.
По аналогии с Behave, он в основном для black-box тестирования, но может использоваться и для большего количества видов тестирования. Например, Lettuce может тестировать различные модели поведения и взаимодействия серверов и баз данных.
Недостатки:
Не хватает некоторого функционала из других фреймворков, поэтому Lettuce больше подходит для небольших проектов.
Не похоже, чтобы сам фреймворк и его документация активно поддерживались.
Чтобы убедиться в успешности реализации, нужно установить особую коммуникацию между всеми стейкхолдерами в проекте: разработчиками, тестировщиками и менеджерами.
Итог: Если у вас небольшой BDD-проект, Lettuce – отличный вариант для простого создания тестов на естественном языке, доступный всем членам команды.
Testify
Testify создан на замену Unittest и Nose и обладает расширенным функционалом по сравнению со стандартным Unittest.
Преимущества:
Используется для модульного, интеграционного и системного тестирования.
Для тех, кто знаком с Unittest, Testify очень прост в работе.
Наличие большого количества плагинов.
Подобно Nose2, Testify умеет обнаруживать тесты.
Простой синтаксис фикстур.
Недостатки:
Отсутствие большой документации, поэтому новичкам придется искать многие вещи самостоятельно.
Сложная реализация параллельного тестирования.
Итог: Если у вас есть опыт работы с Unittest, вам будет довольно легко перестроить существующие тесты для работы с Testify, так что определённо уделите этому время.
Заключение:
Вот мы и подошли к концу списка сравнения фреймворков тестирования на Python, и теперь нужно выбрать тот, который лучше всего отвечает вашим требованиям.
Вам нужно больше BDD? Углубиться в модульное тестирование или в функциональное? Есть ли у вашей команды технический бэкграунд и опыт в программировании или они новички? Эти и многие другие вопросы вам предстоит задать себе, когда вы будете принимать решение. У каждого из вышеперечисленных фреймворков есть свои преимущества и свои недостатки, и здесь нет «хороших» и «плохих» фреймворков, просто есть «подходящие». Подходящие под ваши собственные нужды и требования продукта.
Надеюсь, эта статья помогла вам не только понять, насколько Python хорош для автоматизированного тестирования, но и облегчила путь к более простому тестированию на Python!
Расскажите в комментариях о своем любимом фреймворке. Вы также можете рассказать о тех фреймворках, которые я пропустила!
Материал подготовлен в рамках курса «Python QA Engineer». Если вам интересно узнать подробнее о формате обучения и программе, познакомиться с преподавателем курса — приглашаем на день открытых дверей онлайн. Регистрация здесь.