Runner python для чего
Автоматизированное тестирование с Pytest
Перевод статьи подготовлен специально для студентов курса «Python QA Engineer».
Мы живем в эпоху, когда программное обеспечение очень быстро отправляется на рынок. Из-за этого процесс разработки становится очень стрессовым. Высокие темпы внедрения ПО и быстрая доставка выглядят как хорошая составляющая бизнес-модели, однако здесь возникает вопрос о том, как поставлять программное обеспечение надлежащего качества.
Почему нужны автоматизированные тесты
У автоматизированного тестирования есть множество плюсов, вот три основных:
Переиспользование: Нет необходимости писать каждый раз новые скрипты, даже при выпуске новой версии операционной системы, если только в этом не появится острая необходимость.
Надежность: Люди склонны совершать ошибки, а машины совершают их с меньшей вероятностью. А еще они работают быстрее при выполнении повторяющихся шагов/тестов, которые необходимо выполнять постоянно.
Работа 24/7: Вы можете запустить тестирование в любое время суток даже удаленно. Если запустить тестирование ночью, то оно будет выполняться даже пока вы спите.
Развитый полнофункциональный инструмент тестирования pytest на Python
В настоящее время существует множество фреймворков и инструментов для тестирования. Встречаются разные разновидности фреймворков, например, управляемые данными, управляемые ключевыми словами, гибридные, BDD и т.д. Вы можете выбрать тот, который лучше всего будет отвечать вашим требованиям.
Должен сказать, что Python и pytest занимают огромную нишу в этом вопросе. Python и связанные с ним инструменты широко используются, вероятно потому, что они более доступны для людей, имеющих мало опыта программирования по сравнению с другими языками.
Фреймворк pytest позволяет легко писать небольшие тесты, но также масштабируется для поддержки сложного функционального тестирования приложений и библиотек.
Несколько ключевых особенностей pytest :
Автоматическое и конфигурируемое обнаружение тестов
Давайте посмотрим на очень простую тестовую функцию:
Шаблонный код? Не переживайте, фикстуры спешат на помощь!
Посмотрите на тестовые функции, которые тестируют базовые операции в программе Wallet:
В более контролируемой среде у вас может быть файл с тестовыми данными, например test-data.ini в вашем репозитории или оболочке, которая сможет его прочитать, при этом ваша тестовая функция может вызывать различные оболочки для чтения тестовых данных.
Но у меня есть тестовые случаи, которые я хочу выполнять на различных наборах данных!
Не беспокойтесь, у pytest есть классная функция для параметризации вашей фикстуры. Давайте посмотрим на примере.
Предположим, что у вашего продукта CLI – интерфейс, который управляется локально. Кроме того, у вашего продукта есть множество параметров по умолчанию, которые устанавливаются при запуске, и вы хотите проверить все значения этих самых параметров.
Вы могли подумать о написании отдельного тест-кейса для каждого из этих параметров, но с pytest все намного проще!
Круто, не правда ли? Вы только что написали 13 тест-кейсов (каждый устанавливает разное значение setting_value ), а в будущем, если вы добавите новый параметр в свой продукт, то все, что вам нужно будет сделать – это добавить еще один кортеж.
Как pytest интегрируется с тестированием пользовательского интерфейса с Selenium и тестами для API?
Что ж, у вашего продукта может быть несколько интерфейсов. CLI – как мы говорили выше. Аналогично GUI и API. Перед развертыванием вашего программного продукта важно протестировать их все. В корпоративном программном обеспечении, где несколько компонентов взаимосвязаны и зависят друг от друга, изменение в одной части может повлиять на все остальные.
Например, на высоком уровне это может быть проверка структуры репозитория.
Как вы видите на изображении выше, он дает хорошую возможность разделять компоненты:
apiobjects: хорошее место для создания оболочек для вызова конечных точек API. У вас может быть BaseAPIObject и производный класс, отвечающий вашим требованиям.
helpers: Можете добавить сюда свои вспомогательные методы.
pageobjects: шаблон архитектуры PageObjects можно использовать для создания классов различных страниц GUI. Мы используем Webium, который является библиотекой реализаций шаблонов Page Object для Python.
suites: вы можете написать свои наборы pylint-проверок для кода, они помогут получить большую уверенность в качестве вашего кода.
tests: вы можете каталогизировать тесты на основе ваших предпочтений. Это позволит легко управлять и обозревать ваши тесты.
Я привел это просто для справки, структура репозитория и зависимости могут быть организованы с учетом ваших личных потребностей.
У меня много тест-кейсов, и я хочу, чтобы они выполнялись параллельно
У вас может быть множество тест-кейсов в вашем наборе, и случается, что нужно запустить их параллельно и сократить общее время выполнения тестирования.
Давайте посмотрим, как он работает на примере.
У меня есть репозиторий автоматизированного тестирования CloudApp для моих GUI тестов на Selenium. Помимо этого, он постоянно растет и пополняется новыми тестами и теперь в нем лежит сотня тестов. То, что я хочу сделать – это запустить их параллельно и сократить общее время выполнения тестирования.
В терминале просто введите pytest в корневой папке проекта/папке с тестами. Это позволит выполнить все тесты.
pytest-xdist запустит все тесты параллельно!
Таким способом вы также сможете параллельно запустить несколько браузеров.
Отчеты
Pytest поставляется со встроенной поддержкой создания файлов с результатами тестирования, которые можно открыть с помощью Jenkins, Bamboo или других серверов непрерывной интеграции. Используйте следующее:
Это поможет сгенерировать отличный XML-файл, который можно открыть множеством парсеров.
Заключение
8 лучших фреймворков для тестирования с помощью Python в 2021 году
Если вы когда-нибудь думали: «С какого же языка программирования мне следует начать свое путешествие в тестирование?» Ваш ответ – Python. Но он подойдет не только начинающим! В недавнем опросе, который я провела в LinkedIn, мы видим, что среди опытных программистов 35% проголосовали за то, что Python является их самым любимым языком программирования (немного опередив всеми любимую Java, которая заняла 2-е место с 32%).
На протяжении многих лет Python действительно набирает обороты как среди тестировщиков, так и среди разработчиков, да и в целом является самым динамично развивающимся языком программирования (как видно на диаграмме трендов Stack Overflow), и мы прекрасно понимаем, что это значит. Популярность = релевантность!
К концу этой статьи я ставлю своей целью дать вам понимание того, насколько мощным является язык программирования Python и какой фреймворк для тестирования лучше всего подойдет вашему проекту исходя из его потребностей.
Что хорошего в Python для автоматизации тестирования?
Есть довольно много причин, по которым популярность Python растет в области автоматизации тестирования и версий, почему он считается лучшим вариантом для нее. Среди них вы найдете: Дзен Python (19 основополагающих принципов философии проектирования на Python), удобство для начинающих, но мощность для профессионалов; Python – одновременно объектно-ориентированный и функциональный, у него есть большая библиотека пакетов для тестирования, серьезное сообщество по всему миру и многое другое! Я рекомендую прочитать вам чуть больше об этом в блоге AutomationPanda.
Фреймворк для тестирования на Python, который вам подходит
С ростом применения Python растет и популярность фреймворков для тестирования на его основе. Поначалу может быть неясно, какой инструмент из всего многообразия следует выбрать, поскольку у каждого из них есть свои плюсы и минусы. Тем не менее, у каждого проекта и организации, есть свои требования и ограничения, поэтому нам нужно учитывать их все при выборе инструмента, который подойдет нам лучше всего. Чтобы лучше разобраться в этом вопросе, я рекомендую вам прочитать эти статьи:
И, конечно, зачем же нужны списки с плюсами и минусами, как ни для того, чтобы собрать важные сведения об инструментах в одном месте! Итак, давайте рассмотрим 8 лучших фреймворков для тестирования на Python и рассмотрим как их преимущества, так и недостатки, чтобы вам было проще выбрать идеальный фреймворк для тестирования.
Преимущества и недостатки 8 лучших фреймворков для тестирования на Python
Знакомство с тестированием в Python. Ч.1
От нашего стола к вашему. То есть от нашего курса «Разработчик Python», несмотря на стремительно приближающий Новый год, мы подготовили вам интересный перевод о различных методах тестирования в Python.
Это руководство для тех, кто уже написал классное приложение на Python, но еще не писал для
них тесты.
Тестирование в Python — обширная тема с кучей тонкостей, но не обязательно все усложнять. В несколько простых шагов можно создать простые тесты для приложения, постепенно наращивая сложность на их основе.
В этом руководстве вы узнаете, как создать базовый тест, выполнить его и найти все баги, до того как это сделают пользователи! Вы узнаете о доступных инструментах для написания и выполнения тестов, проверите производительность приложения и даже посмотрите на проблемы безопасности.
Тестирование Кода
Тестировать код можно разными способами. В этом руководстве вы познакомитесь с методами от наиболее простых до продвинутых.
Автоматизированное vs. Ручное Тестирование
Хорошие новости! Скорее всего вы уже сделали тест, но еще не осознали этого. Помните, как вы впервые запустили приложение и воспользовались им? Вы проверили функции и поэкспериментировали с ними? Такой процесс называется исследовательским тестированием, и он является формой ручного тестирования.
Исследовательское тестирование — тестирование, которое проводится без плана. Во время исследовательского тестирования вы исследуете приложение.
Чтобы создать полный список мануальных тестов, достаточно составить перечень всех функций приложения, различных типов ввода, которые оно принимает, и ожидаемые результаты. Теперь, каждый раз когда вы меняете что-то в коде, нужно заново проверять каждый из элементов этого списка.
Звучит безрадостно, верно?
Поэтому нужны автоматические тесты. Автоматическое тестирование — исполнение плана тестирования (части приложения, требующие тестирования, порядок их тестирования и ожидаемые результаты) с помощью скрипта, а не руками человека. В Python уже есть набор инструментов и библиотек, которые помогут создать автоматизированные тесты для вашего приложения. Рассмотрим эти инструменты и библиотеки в нашем туториале.
Модульные Тесты VS. Интеграционные Тесты
Мир тестирования полон терминов, и теперь, зная разницу между ручным и автоматизированным тестированием, опустимся на уровень глубже.
Подумайте, как можно протестировать фары машины? Вы включаете фары (назовем это шагом тестирования), выходите из машины сами или просите друга, чтобы проверить, что фары зажглись (а это — тестовое суждение). Тестирование нескольких компонентов называется интеграционным тестированием.
Подумайте о всех вещах, которые должны правильно работать, чтобы простая задача выдала корректный результат. Эти компоненты похожи на части вашего приложения: все те классы, функции, модули, что вы написали.
Главная сложность интеграционного тестирования возникает, когда интеграционный тест не дает правильный результат. Сложно оценить проблему, не имея возможности изолировать сломанную часть системы. Если фары не зажглись, возможно лампочки сломаны. Или может аккумулятор разряжен? А может проблема в генераторе? Или вообще сбой в компьютере машины?
Современные машины сами оповестят вас о поломке лампочек. Определяется это с помощью модульного теста.
Модульный тест (юнит-тест) — небольшой тест, проверяющий корректность работы отдельного компонента. Модульный тест помогает изолировать поломку и быстрее устранить ее.
Мы поговорили о двух видах тестов:
Значения правильные, поэтому в REPL ничего не будет выведено. Если результат sum() некорректный, будет выдана AssertionError с сообщением “Should be 6” (“Должно быть 6”). Проверим оператор утверждения еще раз, но теперь с некорректными значениями, чтобы получить AssertionError :
Вместо REPL, положите это в новый Python-файл с названием test_sum.py и выполните его снова:
Теперь у вас есть написанный тест-кейс (тестовый случай), утверждение и точка входа (командной строки). Теперь это можно выполнить в командной строке:
Вы видите успешный результат, “Everything passed” (“Все пройдено”).
sum() в Python принимает на вход любой итерируемый в качестве первого аргумента. Вы проверили список. Попробуем протестировать кортеж. Создадим новый файл с названием test_sum_2.py со следующим кодом:
Можно увидеть, как ошибка в коде вызывает ошибку в консоли с информацией, где она произошла, и каким был ожидаемый результат.
Такие тесты подойдут для простой проверки, но что если ошибки есть больше, чем в одном? На помощь приходят исполнители тестов (test runners). Исполнитель тестов — особое приложение, спроектированное для проведение тестов, проверки данных вывода и предоставления инструментов для отладки и диагностики тестов и приложений.
Выбор Исполнителя Тестов
Для Python доступно множество исполнителей тестов. Например, в стандартную библиотеку Python встроен unittest. В этом руководстве, будем использовать тест-кейсы и исполнители тестов unittest. Принципы работы unittest легко адаптируются для других фреймворков. Перечислим самые популярные исполнители тестов:
unittest встроен в стандартную библиотеку Python, начиная с версии 2.1. Вы наверняка столкнетесь с ним в коммерческих приложениях Python и проектах с открытым исходным кодом.
В unittest есть тестовый фреймворк и исполнитель тестов. При написании и исполнении тестов нужно соблюдать некоторые важные требования.
Чтобы превратить ранее написанный пример в тест-кейс unittest, необходимо:
Таким образом, вы выполнили два теста с помощью исполнителя тестов unittest.
Примечание: Если вы пишете тест-кейсы для Python 2 и 3 — будьте осторожны. В версиях Python 2.7 и ниже unittest называется unittest 2. При импорте из unittest вы получите разные версии с разными функциями в Python 2 и Python 3.
Чтобы узнать больше о unittest’ах почитайте unittest документацию.
Со временем, после написания сотни, а то и тысячи тестов для приложения, становится все сложнее понимать и использовать данные вывода unittest.
nose совместим со всеми тестами, написанными с unittest фреймворком, и может заменить его тестовый исполнитель. Разработка nose, как приложения с открытым исходным кодом, стала тормозиться, и был создан nose2. Если вы начинаете с нуля, рекомендуется использовать именно nose2.
Для начала работы с nose2 нужно установить его из PyPl и запустить в командной строке. nose2 попытается найти все тестовые скрипы с test*.py в названии и все тест-кейсы, унаследованные из unittest.TestCase в вашей текущей директории:
pytest поддерживает выполнение тест-кейсов unittest. Но настоящее преимущество pytest — его тест-кейсы. Тест-кейсы pytest — серия функций в Python-файле с test_ в начале названия.
Есть в нем и другие полезные функции:
Вы избавились от TestCase, использования классов и точек входа командной строки.
Больше информации можно найти на Сайте Документации Pytest.
Написание Первого Теста
Объединим все, что мы уже узнали, и вместо встроенной функции sum() протестируем простую реализацию с теми же требованиями.
Структура папок будет выглядеть так:
project/
│
└── my_sum/
└── __init__.py
При использовании __import__() вам не придется превращать папку проекта в пакет, и вы сможете указать имя файла. Это полезно, если имя файла конфликтует с названиями стандартных библиотек пакетов. Например, если math.py конфликтует с math модулем.
Как Структурировать Простой Тест
Перед написанием тестов, нужно решить несколько вопросов:
Код в этом примере:
Как Писать Утверждения
Последний шаг в написании теста — проверка соответствия выходных данных известным значениям. Это называют утверждением (assertion). Существует несколько общих рекомендаций по написанию утверждений:
Метод | Эквивалент |
---|---|
.assertEqual(a, b) | a == b |
.assertTrue(x) | bool(x) is True |
.assertFalse(x) | bool(x) is False |
.assertIs(a, b) | a is b |
.assertIsNone(x) | x is None |
.assertIn(a, b) | a in b |
.assertIsInstance(a, b) | isinstance(a, b) |
Писать тесты сложнее, чем просто смотреть на возвращаемое значение функции. Зачастую, выполнение кода меняет другие части окружения: атрибуты класса, файлы файловой системы, значения в базе данных. Это важная часть тестирования, которая называется побочные эффекты. Решите, тестируете ли вы побочный эффект до того, как включить его в список своих утверждений.
Если вы обнаружили, что в блоке кода, который вы хотите протестировать, много побочных эффектов, значит вы нарушаете Принцип Единственной Ответственности. Нарушение принципа единственной ответственности означает, что фрагмент кода делает слишком много вещей и требует рефакторинга. Следование принципу единственной ответственности — отличный способ проектирования кода, для которого не составит труда писать простые повторяемые модульные тесты, и, в конечном счете, создания надежных приложений.
Запуск Первого Теста
Вы создали первый тест и теперь нужно попробовать выполнить его. Понятно, что он будет пройден, но перед созданием более сложных тестов, нужно убедиться, что даже такие тесты выполняются успешно.
Запуск Исполнителей Тестов
Исполнитель тестов — приложение Python, которое выполняет тестовый код, проверяет утверждения и выдает результаты тестирования в консоли. В конец test.py добавьте этот небольшой фрагмент кода:
Другой способ — использовать командную строку unittest. Попробуем:
Мы исполнили один тест из test.py и вывели результаты в консоль. Многословный режим перечислил имена выполненных тестов и результаты каждого из них.
Вместо предоставления имени модуля, содержащего тесты, можно запросить авто-обнаружение при помощи следующего:
Эта команда будет искать в текущей директории файлы с test*.py в названии, чтобы протестировать их.
Понимание Результатов Тестирование
Это был очень простой пример, где все прошло успешно, поэтому попробуем понять выходные данные проваленного теста.
sum() должен принимать на вход другие списки числового типа, например дроби.
К началу кода в файле test.py добавьте выражение для импорта типа Fraction из модуля fractions стандартной библиотеки.
Теперь добавим тест с утверждением, ожидая некорректное значение. В нашем случае, ожидаем, что сумма ¼, ¼ и ⅖ будет равна 1:
В этих выходных данных вы видите следующее:
Запуск тестов из PyCharm
Если вы используете PyCharm IDE, то можете запустить unittest или pytest, выполнив следующие шаги:
Больше информации доступно на сайте PyCharm.
Запуск Тестов из Visual Studio Code
Если вы пользуетесь Microsoft Visual Studio Code IDE, поддержка unittest, nose и pytest уже встроена в плагин Python.
Если он у вас установлен, можно настроить конфигурацию тестов, открыв Command Palette по Ctrl+Shift+P и написав “Python test”. Вы увидите список вариантов:
Выберите Debug All Unit Tests, после чего VSCode отправит запрос для настройки тестового фреймворка. Кликните по шестеренке для выбора исполнителя тестов (unittest) и домашней директории (.).
По завершении настройки, вы увидите статус тестов в нижней части экрана и сможете быстро получить доступ к тестовым логам и повторно запустить тесты, кликнув по иконкам:
Видим, что тесты выполняются, но некоторые из них провалены.
В следующей части статьи мы рассмотрим тесты для фреймворков, таких как Django и Flask.
Ждём ваши вопросы и комментарии тут и, как всегда, можно зайти к Станиславу на день открытых дверей.
Почему мне так нравится использовать Python для автоматизации тестирования?
Когда дело доходит до автоматизации тестирования, первый и самый сложный вопрос, который встает перед вами это какой язык выбрать, чтобы он имел хорошую поддержку автоматизации тестирования. Python, Java, C#, Ruby и т.д. – лишь некоторые из популярных языков, которые можно использовать с фреймворком для автоматизации Selenium. Несмотря на это, во всем мире QA-команды активно используют именно Python, особенно в связке с Selenium WebDriver.
У разработчиков и тестировщиков появляется несколько вариантов, когда дело доходит до использования языков программирования с фреймворком Selenium. Как у инженера по автоматизации, у меня была возможность пользоваться разными языками, начиная с С и заканчивая Java, Python, C++ в зависимости от проекта. Несмотря на то, что мне удобно использовать Java и C# с Selenium, Python все равно остается лучшим языком для написания скриптов для автоматизации тестирования с этим фреймворком.
В этой статье я расскажу о 12 основных причинах, по которым автоматизированное тестирование на Python в связке с Selenium WebDriver – это отличный вариант в моем случае.
Немногословный и хорошо читаемый
Большинство из вас согласится, что Python – один из лучших языков программирования, когда речь идет о простоте написания кода и удобстве чтения. По сравнению с другими языками программирования, которые можно использовать для автоматизации тестирования с Selenium, Python не такой многословный и относительно прост в использовании.
Поскольку Python – скриптовый язык, тестировщику не нужно беспокоиться о компиляции для преобразования кода в исполняемый файл. Дзен Python, который является отличным руководством по автоматизации тестирования на Python, напоминает нам о том, что реализация, которую легко объяснить – это всегда хорошая идея! По сути, это значит, что тесты, реализованные как часть набора тестов должны быть удобочитаемыми, наглядными и принцип их работы должно быть легко объяснить.
API, реализующие автоматизацию тестирования на Python, используются для подключения к браузеру через фреймворк автоматизации Selenium. Если использовать Selenium WebDriver по назначению, то тесты пишутся предельно легко. Ниже я приложил скриншот с основополагающими принципами проектирования на Python (если вы напишете import this в командной строке, то получите Дзен Python):
Исчерпывающий список фреймворков для автоматизации тестирования на Python
Очень немногие языки программирования предлагают такое разнообразие для автоматизации тестирования, и это еще одно преимущество Python, которое делает его лучшим языком для автоматизации тестирования.
PyTest – лучший фреймворк для автоматизации тестирования на Python
Ранее мы говорили о популярных фреймворках для автоматизированного тестирования на Python, но этот список возглавляет PyTest, как лучший фреймворк. PyTest также может использоваться для модульного, интеграционного и сквозного тестирования, как и другие фреймворки Python.
Несмотря на то, что PyUnit (unittest) – фреймворк по умолчанию, разработчики и тестировщики активно использую PyTest, поскольку он функциональнее PyUnit. Тесты могут состоять из простых функций, или же они могут принимать входные параметры для поддержки параметризированного тестирования.
Фикстуры PyTest позволяют с легкостью выполнять тесты на различных сочетаниях браузеров и платформ. Параметризированные фикстуры PyTest можно выполнять с различными входными значениями.
Перенос существующих реализаций, использующих PyTest и Selenium WebDriver, на параметризованные фикстуры требует минимальных усилий. Фикстуры лучше всего подходят для выполнения операций настройки и очистки. Плагины, которыми можно расширить PyTest, могут помочь в покрытии кода, параллельном тестировании и многом другом.
Очень простое параллельное тестирование
Параллельное тестирование в Selenium широко используется для ускорения выполнения автоматизированных тестов на различных сочетаниях браузеров и платформ (т.е. операционных систем). Все языки программирования поддерживают параллельное тестирование (или параллельное выполнение) с помощью фреймворка Selenium, но его чертовски просто использовать в Python.
При использовании фреймворка PyTest плагин pytest-xdist помогает выполнять тесты параллельно. Этот вариант предпочтителен в тех случаях, когда тесты не являются потокобезопасными и нуждаются в изоляции состояния. Установить плагин можно выполнив pip install в терминале. Плагин pytest-parallel следует использовать для параллельного выполнения тестов Selenium. Он является потокобезопасным и не управляет состоянием в среде Python.
Следовательно, pytest-xdist реализует параллелизм, тогда как pytest-parallel – конкурентность и параллелизм. В них есть способ выделить максимальное количество воркеров (или процессов) для запуска максимального количества одновременных тестов на одного воркера.
Включение параллельного выполнения с помощью PyTest не требует каких-либо изменений в существующей реализации, поскольку соответствующие опции для параллельного тестирования предоставляются в терминале при запуске кода.
Тот же принцип параллельного тестирования применим и к другим фреймворкам тестирования на Python, таким как Node 2, Behavior, Lettuce и другим. С другой стороны, включение параллельного тестирования с помощью Selenium Java или Selenium C# или других комбинаций требует изменений в коде и подразумевает больше шагов, чем в Python.
Простота установки пакетов
PIP – это стандартная система менеджмента пакетов в Python. Установка нового пакета с помощью pip не требует загрузки пакета. Команда pip install ищет необходимый пакет в PyPI, подтягивает зависимости и устанавливает необходимые пакеты, чтобы обеспечить выполнение запроса на установку без каких-либо проблем.
Несмотря на то, что такие языки, как C# и Java, предлагают относительно схожие функции (например, консоль диспетчера пакетов в C#), установка пакетов в Python через pip – совершенно другой опыт!
Мультипарадигмальный язык программирования
Python – это мультипарадигмальный язык программирования. Следовательно, в нем есть полная поддержка ООП и структурного программирования. Большинство функций Python поддерживают функциональное программирование и аспектно-ориентированное программирование.
Требования аспектно-ориентированного программирования реализуются путем включения метапрограммирования, которое дает возможность программам рассматривать другие программы в качестве данных. Читабельность и написание тестовых функций на Python реализованы лучше, поскольку фреймворк не навязывает добавление функций в классы.
В отличие от других языков программирования, Python позволяет тестировщику решать, что следует использовать для автоматизации тестирования на Selenium – классы или функции.
Широкий выбор IDE
Можно использовать GVim, Notepad++ и Visual Studio Code для быстрого редактирования, особенно если сценарии автоматизации тестирования не настолько сложны. Visual Studio Code я выбираю в тех случаях, когда дело доходит до редактирования кода, поскольку он предоставляет некоторые плагины, которые в значительной степени облегчают задачи редактирования.
Динамическая типизация
Python использует динамическую типизацию и позднее связывание (или динамическое разрешение имен), которое связывает методы и имена переменных в ходе выполнения. Эта механика очень удобна для автоматизации тестирования на Python.
Python также предлагает такие опции, как Pyre и Mypy, которые используются для статической проверки типов. С их помощью Python позволяет сочетать возможности динамической и статической типизации.
Мощная и беспроблемная отчетность
Отчеты – одна из основных составляющих автоматизации тестирования с Selenium, ведь именно отчеты обеспечивают наибольшую наглядность процесса автоматизированного тестирования. Отчеты, которые выдают корректную информацию в сжатой и понятной форме, можно отправить заинтересованным сторонам, чтобы они были в курсе прогресса на фронте тестирования.
Интегрировать отчеты с автоматизацией тестирования на Selenium с помощью PyTest можно с помощью пакета pytest-html. Отчеты о тестах, сгенерированные с pytest-html, предоставляют визуальный контент для легкого сравнения результатов. Сгенерировать отчеты для тестов Selenium можно без особых усилий в PyTest.
С помощью API, предлагаемых cloud Selenium Grid, таких как Lambda Test, можно построить более внушительную стратегию ведения отчетности для автоматизированного тестирования.
Командная строка в помощь
Ранее мы упомянули ряд IDE, которые можно использовать для разработки и выполнения автоматизированного тестирования на Python. Большинство фреймворков для тестирования оснащены тест-раннерами, которые позволяют выполнять тесты из терминала (командной строки).
Если вы хорошо знакомы с Python, то комбинация IDE (например, Visual Studio Code) и тест-раннера поможет сделать эту работу за вас! Просто поставьте в IDE необходимые плагины для популярных фреймворков тестирования (например, PyTest, Behavior и т.д.). Теперь вы полностью готовы к насыщенному событиями путешествию в мир автоматизированного тестирования на Python!
Подходит как для больших, так и для маленьких проектов
В Python есть большая стандартная библиотека. Конструкции языка и объектно-ориентированный подход помогают создавать легко читаемый код, который выполняет необходимую работу.
Простая номенклатура имен, которой следуют фреймворки (например, тестовые функции в PyTest должны начинаться с test_), облегчает работу по опознаванию тестовых функций.
Начать автоматизировать тестирование на Python несложно, поскольку порог входа очень низкий. Язык подходит как для больших, так и для маленьких проектов, что делает его лучшим скриптовым языком для автоматизации тестирования.
Простая интеграция с инструментами CI/CD
Jenkins – один из самых популярных открытых инструментов для непрерывной интеграции (CI) и непрерывной доставки (CD). Travis CI, Circle CI, TeamCity, Bamboo, Azure Pipeline и т.д. – другие варианты, которые можно использовать вместо Jenkins, однако я все равно предпочитаю использовать Jenkins с «открытым исходным кодом».
Freestyle и пайплайн Jenkins – два варианта оркестрации работ в проекте. В отличие от других языков, Python не требует «сборки» как таковой, но сильная экосистема делает Python, Selenium и Jenkins убийственной комбинацией.
Экосистема Python содержит инструменты, которые можно легко интегрировать в Jenkins для генерации отчетов и тестирования, а также для отчетов по метрикам кода, такие как Pylint. Поскольку генерация отчетов PyTest может запускаться из самой командной строки, нет необходимости добавлять последовательность действий после сборки при использовании пайплайна Jenkins с PyTest.
Использовать Jenkins в связке с PyTest очень просто, так как переход от локальной среды выполнения к Jenkins подразумевает минимальное количество шагов (например, создание проекта, добавление параметров командной строки для выполнения и т. д.), что существенно упрощает переход! Jenkins предлагает прямой вариант создания проекта Maven, но помните про кривую обучения, если вы хотите использовать отчетность, что непосредственно к Jenkins не относится.
Вот и все!
Несмотря на то, что выбор лучшего языка программирования для автоматизации тестирования с Selenium весьма субъективен, Python на сегодняшний день является лучшим скриптовым языком для автоматизации тестирования. Легко начать автоматизировать тесты с Python, поскольку широкий спектр его фреймворков можно использовать для модульного, кросс-браузерного тестирования и других его видов. Я уверен, что вам понравится автоматизированное тестирование на Python, как только вы начнете им пользоваться.
Расскажите в комментариях о том, в связке с каким языком вы предпочитаете использовать Selenium, и как вы оцениваете его по сравнению с Python, бесспорным королем автоматизированного тестирования.
В преддверии старта курса «Python QA Engineer» мы приглашаем всех желающих записаться на бесплатный двухдневный интенсив в рамках которого вы сможете изучить детальное планирование авто-тестирования на Python. Вместе с преподавателем сделаете разбор функциональности приложения, формализацию и описание тестовых сценариев, подготовите и настроите инфраструктуру и напишете авто-тесты.