Если вы когда-нибудь думали: «С какого же языка программирования мне следует начать свое путешествие в тестирование?» Ваш ответ – Python. Но он подойдет не только начинающим! В недавнем опросе, который я провела в LinkedIn, мы видим, что среди опытных программистов 35% проголосовали за то, что Python является их самым любимым языком программирования (немного опередив всеми любимую Java, которая заняла 2-е место с 32%).

На протяжении многих лет Python действительно набирает обороты как среди тестировщиков, так и среди разработчиков, да и в целом является самым динамично развивающимся языком программирования (как видно на диаграмме трендов Stack Overflow), и мы прекрасно понимаем, что это значит. Популярность = релевантность!

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

Что хорошего в Python для автоматизации тестирования?

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

Есть довольно много причин, по которым популярность Python растет в области автоматизации тестирования и версий, почему он считается лучшим вариантом для нее. Среди них вы найдете: Дзен Python (19 основополагающих принципов философии проектирования на Python), удобство для начинающих, но мощность для профессионалов; Python – одновременно объектно-ориентированный и функциональный, у него есть большая библиотека пакетов для тестирования, серьезное сообщество по всему миру и многое другое! Я рекомендую прочитать вам чуть больше об этом в блоге AutomationPanda.

Фреймворк для тестирования на Python, который вам подходит

С ростом применения Python растет и популярность фреймворков для тестирования на его основе. Поначалу может быть неясно, какой инструмент из всего многообразия следует выбрать, поскольку у каждого из них есть свои плюсы и минусы. Тем не менее, у каждого проекта и организации, есть свои требования и ограничения, поэтому нам нужно учитывать их все при выборе инструмента, который подойдет нам лучше всего. Чтобы лучше разобраться в этом вопросе, я рекомендую вам прочитать эти статьи:

  1. Как выбрать правильный инструмент для автоматизации тестирования

  2. Как выбрать лучший инструмент – процесс поиска

  3. Критерий выбора правильного функционального инструмента для тестирования

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

Преимущества и недостатки 8 лучших фреймворков для тестирования на Python

  1. Robot Framework

  2. Pytest

  3. TestProject

  4. PyUnit (Unittest)

  5. Nose2

  6. Behave

  7. Lettuce

  8. 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.

Недостатки:

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

Комментарии (9)


  1. zoktog
    07.09.2021 19:56
    +5

    у pytest есть сотни плагинов, из которых можно получить любые фишки других фреймворков( можно добавить и bdd, и KDT и ещё несколько подходов которые тут не озвучены). Это позволяет иметь один фреймворк в компании\проекте с любыми расширениями. Так же данный фреймворк знают многие тестировщики и новый сотрудник быстрее включится в работу. В 2021 году использовать не pytest это стрелять себе в ногу.


    1. conopus
      08.09.2021 08:27
      +1

      Очень уж категорично. Да, pytest хорош, и я тоже не видел ему альтернативы, но потом потребовалось быстро написать тесты для клиента SAP и готовая библиотека нашлась для Robot Framework. Попробовал его в работе и он мне показался очень хорош для командной работы. Если результатом вашей работы должны быть не только баг репорты, то RF это неплохой выбор. Если pytest ориентирован в первую очередь на unit тесты и писали его программисты для программистов, то RF писался держа в голове проблему "трёх амиго" - проблему коммуникации внутри проекта. Поэтому там и отчёты отличные "из коробки" и KDD с BDD не требует дополнительных плагинов. Его тесты вполне могут служить документацией по продукту, понятной в том числе и заказчику. А вот это может оказаться очень важным.

      Ну, и если мне потребуется быстро втаскивать мануальщиков в автоматизацию, я бы тоже предпочел RF. Написать для них "кубики" кийвордов или библиотеки будет быстрее и продуктивнее, чем переписывать тесты за ними.


  1. dolfinus
    08.09.2021 01:01

    Не тянет это на топ "лучших фреймворков", ну вот совсем ни разу. Ни примера самих тестов не привели, ни адекватного сравнения - только примитивные копирайтные описания.

    Из приведенного списка известна на самом деле только пара фреймворков, остальные сделаны на коленке парой энтузиастов, без документации и последний раз релизились в 2016 году. Зачем их использовать? Чтобы потом все переписывать на нормальный pytest? Так проще с самого начала на нем писать. Кому потом будут нужны специалисты, которые использовали эти фреймворки?

    Была бы возможность, поставил бы статье минус.


    1. conopus
      08.09.2021 07:43
      -1

      Так это же перевод статьи Эндрю Найта какого-то лохматого года. Откуда там будет что-то свежее?


      1. conopus
        08.09.2021 10:15

        А нет, не Найта. Но, про то, что кроме pytest ничего не нужно, я бы поспорил. Другие фреймворки от него заметно отстают, но спрос на Robot Framework вполне заметный. За этот год в Москве было 44 вакансии с ним: https://clingon.pythonanywhere.com/unit_test_frameworks В "Касперском", например, его используют.


        1. zoktog
          08.09.2021 14:36

          Robot Framework хорош только для примеров hello world, всё что сложнее: писать, дебажить, становится всё не удобнее и не удобнее с каждым методом написанным на нём, когда тестов больше несколько тысяч, на роботе можно вещаться. Никому не пожелаю такую работу. Пару раз приходилось в таком участвовать. На pytest в разы легче написать тесты чем dsl языке RF. А про поддержку, дебаг, и говорить нечего.


          1. conopus
            08.09.2021 15:03
            +1

            Чего-то сложного на нем действительно не писал, но там же все сложное пишется на обычном Python внутри кийвордов или библиотек. Про сложности с дебагом не понял. Для него же есть свои дебагеры, или они так плохи? С поддержкой у него все как у других FOSS продуктов — вся надежда на сообщество и документацию. Документация у него отличная. На мой взгляд, лучше чем у pytest: проще, понятнее и лучше структурирована. Есть не только справочники, но и руководства по архитектуре тестов: https://github.com/robotframework/HowToWriteGoodTestCases. Сообщество русскоязычное есть: https://t.me/robotframework_ru помощь там действительно можно найти, люди доброжелательные.

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


  1. saw_tooth
    08.09.2021 12:17

    • Хорошо это или плохо, но он заставляет вас работать в соответствии с заранее определенной методологией, поэтому поначалу кривая обучения может быть длиннее, чем обычно.

    Еще и не правильной к тому же.
    Парни не понимают вобще что такое жизненный цикл теста, и как он должен исполняться.
    https://github.com/robotframework/robotframework/issues/3089


  1. stalker_by
    08.09.2021 14:54

    8! RSpec смотрит на это все ... с подозрением :D