автотесты на python что это

Почему мне так нравится использовать Python для автоматизации тестирования?

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на 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 что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на 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 что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Тот же принцип параллельного тестирования применим и к другим фреймворкам тестирования на 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. Вместе с преподавателем сделаете разбор функциональности приложения, формализацию и описание тестовых сценариев, подготовите и настроите инфраструктуру и напишете авто-тесты.

Источник

Порараз бирацца: как мы учились писать автотесты на Python и что у нас получилось

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Привет, Хабр! Меня зовут Артем Иванюта, в «Магните» я занимаюсь тестированием информационных систем закупок. В статье я расскажу, как наша команда запускала автотесты web-интерфейсов силами одного сотрудника, как мы вписали их в CI/CD-процесс и с чем столкнулись, решая задачу. Кстати, вы наверняка уже догадались, но все-таки скажу — да, я и есть тот самый «один сотрудник». Так что никакого кликбейта.

Одиннадцать друзей Иванюты

В нашей команде 11 человек, мы отвечаем за тестирование 15 информационных систем. Всего в «Магните» их больше 600. Мы занимаемся тестированием web-инструментов цепочки поставок розничной сети. Это, например:

система автоматизированных рабочих мест сотрудников;

SRM-система снабжения сырьем собственных производств и закупочной логистики;

электронный документооборот EDI;

информационная система графика поставок товара в магазины,

система управления ареалами AMS.

В масштабах «Магнита» это 25 000 пользователей — наших сотрудников, 4 500 — контрагентов и 16 000 торговых точек. Мы производим релизы ежедневно, а сам цикл в среднем составляет от 2 до 4 недель. По сути от нас зависит своевременная поставка товаров тысяч поставщиков на полки 16 тысяч магазинов (и много чего еще).

Восстание машин: срываем релизы

Мой путь в компании начался в 2014 году с отдела технического сопровождения торговых точек. Я занимался удаленной поддержкой и настройкой оборудования в гипермаркетах «Магнит». Это были кассы, системы эквайринга, серверы.

В 2018 году отдел тестирования запустил внутреннюю школу тестировщиков. За месяц я освоил базу и навыки, а затем перешел в команду тестирования web-интерфейсов. Пришел я как раз вовремя: поток входящих задач начал стремительно расти. Компания пошла по пути DevOps. Запускались новые системы, серьезно обновлялись основные.

К началу 2019 года объем тестирования увеличился вдвое. Так количество тикетов на каждого возросло в среднем с 30 до 70 в месяц, а горизонт планирования релизов сдвинулся на 2 месяца вперед.

При этом количество людей в команде оставалось прежним — все те же 11 друзей Иванюты:)

Когда графики релизов начали срываться на регулярной основе, а рутинные операции занимать больше 50% времени, мы поняли, что дальше так не потянем. Тогда и было принято решение часть сценариев покрыть автотестами.

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Путь в питонисты

До 2019 года никто из нашей команды не занимался автотестами, 100% тестов обрабатывались вручную. Никто из нашей команды не умел кодить. И конечно мы не могли снижать темп основных задач. Поэтому всей командой уйти в обучение автоматизации тестирования тоже было нельзя. Решили, что в разведку пойдет кто-то один. Мне было интересно попробовать: я изучил опыт сообщества и остановился на python. Python считается универсальным языком, поскольку подходит под множество задач. К примеру, на Python написан Instagram, его используют в аналитике данных, запуске космических кораблей и. в автоматизации тестирования. Чтобы скорость работы команды не снижалась, приняли совместное решение — я иду обучаться, команда забирает 80% моих задач.

Какие цели мы поставили для внедрения автотестов:

Увеличение скорости тестирования.

Мы накопили довольно большую библиотеку регрессионных сценариев тестирования различных веб-интерфейсов. Релизы в команде проводятся каждый день, поэтому регресс востребован и выполняется тестировщиками регулярно вручную. Его выполнение занимало не меньше 8 часов, а автоматизированные тесты могли сократить время на обработку регресса до 95% и больше.

Повышение качества тестирования.

При частом прогоне рутинных проверок всегда есть риск пропустить ошибку. Машина же совершит её с меньшей вероятностью за счёт многократного прогона автотестов. Разработчик самостоятельно может запустить автотестирование после изменения кода без помощи тестировщика. То есть это время команды освобождается для других задач.

Разработанные автотесты нужно сопровождать и развивать. Мы решили сделать ставку на развитии своей команды и запустили «Школу автотестирования». Я на себе прочувствовал, как «заряжает» обучение на реальных задачах. В Магнит я прошел такой опыт дважды, получив и новую экспертизу, и развитие. Программу Школы выстроили по такому же принципу — много практики и реального опыта.

Поддержка DevOps-стратегии компании.

В 2018 году «Магнит» взял курс на развитие DevOps. Наши 15 систем не стали исключением. Их ждали обновление и переход на новые практики и инструменты. Автотесты — одна из обязательных стадий процесса CI/CD.

Вот так архитектурно он выстроен у нас:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Так мы договорились о целях и тактике. Следующая задача — понять, что именно покрывать автоматизацией.

Автоматизируем регресс

Мы обновляем информационные системы «Магнита» под условия бизнеса практически ежедневно:

Во-первых, мы следуем конкретному плану изменений и обновлений систем. Такой план формируем внутри ИТ ежемесячно для каждой системы.

Во-вторых, пользователи от бизнеса направляют запросы на новый функционал. В среднем на сотрудника приходится по 2–3 системы в день.

Получается, попытка автоматизировать все кейсы сразу была бы обречена на провал: сил могло хватить только на актуализацию тестовых сценариев.

После анализа всей базы тестовых случаев для автоматизации выбрали регрессионные сценарии.

Для нас регресс — один из самых трудоемких этапов тестирования, так как он направлен на проверку и выявление ошибок в статичном функционале. Такой функционал или не меняется, или меняется редко. Значит, каждый день мы выполняем именно типовые проверки.

В каждом регрессионном сценарии более 100 кейсов. Зачастую кейсы связаны между собой. Поэтому первое, что я сделал, — провел анализ тестовых случаев на предмет критичности и взаимосвязи функциональности.

В TMS системе TestRail создал 3 группы приоритета регрессионных сценариев для последующей автоматизации:

Критичный — например, кейсы направлены на проверку доступности всех вкладок, кнопок, фундаментальной логики приложения. Ошибки в этой группе тестов могут привести к полной блокировке работы инструмента;

Высокий — кейсы в большей степени направлены на проверку бизнес-логики и алгоритмов инструмента. Ошибки в этой группе тестов могут привести к некорректным данным, повлиять на работу самого приложения и связанных с ним систем;

Низкий — кейсы не влияют на бизнес-процессы, но должны выполняться при каждом регрессе. Например, поиск, фильтрация и другие.

Теперь расскажу про пошаговую настройку процесса и инструментов.

Запускаем змея на Pytest

Я использовал Python и его фреймворк Pytest. Оба инструмента широко используются в мире тестирования, по ним накоплена база знаний, есть много плагинов. Поэтому вместе с Selenium WebDriver такой набор удовлетворяет всем потребностям в тестировании web-интерфейсов.

Для работы с базой данных я использовал библиотеку SQLAlchemy. Это одна из самых популярных библиотек для работы с СУБД для Python.

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

При создании структуры проекта брал паттерн Page Object. Этот шаблон проектирования позволяет разделить код тестов и описание страниц. Так тесты приобретают читаемый вид, а методы работы со страницей мы можем переиспользовать. Результат: упрощаем поддержку кода и уменьшаем его количество.

Структура проекта выглядит так:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Configuration – для настройки подключения к БД, учетные данные для авторизации в приложении;

Locators – хранит локаторы для поиска элементов на странице;

Pages – содержит методы для работы со страницами. Для каждой вкладки приложения используется своя страница с методами работы с ней;

Tests – хранит сами тесты;

Tools – хранит инструменты для подключения к БД. Это создание самого подключения, методы работы с БД, запросы к БД.

conftest.py — хранение фикстур. Фикстуры в контексте pytest — это вспомогательные функции для наших тестов, которые не являются частью тестового сценария;

pytest.ini – для регистрации меток маркировки тестов;

requirements.txt – файл зависимостей приложения для автоматической установки пакетов python с помощью утилиты pip;

testrail.cfg – конфигурационный файл с настройками для TestRail.

Помещаем в base_page методы или локаторы, которые используются в кейсах для разных страниц:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Как в итоге выглядит тест? Лаконично 🙂

В pages мы расписываем сами методы. Клик на кнопку:

Для поиска элементов на странице я использовал язык запросов XPath. Часть элементов страницы имеют уникальные name или id, которые указали разработчики фронта, поэтому к ним легко обращаться:

А другая часть не имеет таких уникальных идентификаторов, поэтому здесь помогают возможности языка XPath:

Запуск и закрытие браузера вынесены в conftest.py.

Добавляем функцию, например так:

В самом тесте мы не расписываем авторизацию и переход на нужную вкладку, это все выносится в setup с помощью фикстуры:

Ключ на старт: запускаемся через Gitlab CI

Для каждого проекта есть свой job в Gitlab CI, который запускается при необходимости. Последняя версия проекта тянется с репозитория.

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

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Развернув интерфейс тестирования можно увидеть, что происходит в режиме реального времени:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Фреймворк Pytest позволяет выбрать часть кейсов или пропускать те, которые сейчас не нужны. Например, для кейсов по одной вкладке приложения ставим маркировку @pytest.mark и запускаем тестирование нужной вкладки приложения. Фикстуры позволяют запустить тестирование в нужной версии браузера.

Получаем отчет в TestRail

Так выглядит результат выполнения автотестов, переданный в TestRail:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

В названии передаю id джобы и название интерфейса, который тестирую. Вижу полную информацию по тестам, которые прошли успешно:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

и детальную информацию по ошибкам, если они есть:

автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это автотесты на python что это. Смотреть фото автотесты на python что это. Смотреть картинку автотесты на python что это. Картинка про автотесты на python что это. Фото автотесты на python что это

Как интегрировать автотесты в CI-процесс

Переменная CI_PIPELINE_ID добавлена для идентификации сборки в TestRail.

После пуша в ветку запускается сборка по алгоритму. Описание храним в файле gitlab-ci.yml. Если стадия автотестов пройдёт успешно, то актуальная версия выкатит в продакшн.

Автотесты во спасение или Выход из штопора

План сработал, мы смогли запустить автоматизацию и разгрузить команду:

Среднее время выполнения регрессионного сценария сократилось на

95% и стало занимать 20 минут;

Сократилось время выпуска релизов (Time To Market), а их количество в месяц выросло с 4 до 6;

Добились отказоустойчивости программного продукта при поставках, исключили риски в регрессе;

Из 1000 тестовых кейсов повысили количество покрытых автотестами до 400.

Этот год стал челленджем для всей команды и для меня лично.

Мы сделали выбор в пользу TestRail из-за его интеграции с основным инструментом тестирования Pytest. Плюсом стало наличие готовых фреймворков. Gitlab CI используется в разработке информационных систем коммерции и полностью соответствует нашему запросу. Поэтому предпочли тому же Jenkins.

По хорошей традиции запустили школу «Автоматизации тестирования» на практике, наш опыт может быть полезным другим командам тестирования в «Магните». Первые студенты-тестеры завершили обучение. Так практические навыки распространяются в компании.

Наша команда покрыла автотестами регресс на web-приложениях, сейчас мы готовы автоматизировать функциональное тестирование. Впереди более сложные задачи, и конечно нам будет полезен ваш опыт:

С какими проблемами перехода на автоматизацию тестирования столкнулись вы?

Как решали сложные кейсы автоматизации функционального тестирования?

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *