Python + Selenium Web Driver tools for automated testing

Здравствуйте коллеги!

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

НО…
Функционал фреймворка то я переписал, и сейчас мне не хватает инструментов, что у меня были на джав.

Посоветуйте, пожалуйста аналоги решений на питоне:

  1. На джаве, я конечно же использовал TestNG для написания тестов, и ко всем этим аннотациям, хмл тест планам и к запуску используя Gradle, я привык. Как мне можно это реализовать с питоном?
    Создание тест планов из написаных тестов.
    Запуск тест плана из Jenkins/CircleCI и т.д. Не важно откуда, важно что бы из командной строки.
    Примерная реализация @dependsOnMethod, @group, @beforeMethod, @dataProvider аннотаций. Может какой то фреймворк вменяемый есть как ТетсНГ.
  2. Репорт я использовал Gradle HTML report, который генерился после выполнения джоба, ну я его еще немного подправлял добавляя видео, скриншоты, логи в сам репорт. Что я могу использовать на питоне что бы получать какой то вменяемы ХТМЛ репорт?
  3. Запуск тест планов в нескольких потоках с разными конфигурациями.

Заранее благодарен.

Смотрите в сторону pytest и allure от Яндекса Как в Яндексе используют PyTest и другие фреймворки для функционального тестирования / Habr

3 лайка

http://pythontesting.net/framework/pytest/pytest-introduction/
http://programeveryday.com/post/pytest-the-best-python-testing-module/

1 лайк

Спасибо, попробую реализовать Pytest+Allure.

Если у кого то есть еще какие то советы касаемо полезных инструментов для автоматизации на питоне - буду благодарен :slight_smile:

Библиотека requests для тестирования REST сервисов (так же можно и применить частично к SOAP)

Ну это встроенная, эту и использую :wink:

Это сторонняя библиотека :slight_smile:

К py.test есть плугины.
Полезные:

  • assume (чтобы assert не валил весь тест)
  • xdist (параллелизация)
  • repeat
  • reorder

http://plugincompat.herokuapp.com/ - тут их полно. Я пробовал только выше указанные. Остальные пока не нужны.

2 лайка

Поднял систему с Jenkins+Selenium Grid+PyTest+Allure+Docker всем спасибо, вроде все красиво и удобно.

Еще вопрос по Dockerу, кто то может посоветовать имеджи для Грида кроме Firefox and Chrome?
Есть ли что то для Opera, Safari, IE, Edge?

Еще хотел бы прикрутить видео рекординг для фейл тестов. Кто то может посоветовать какой-то рекордер для питона и интеграцию файлов с Аллурой?

Спасибо!

Можно поинтересоваться почему вы стали использовать Selenium Grid и Docker (очень интересно, мы не используем мало ли что не знаем =) ) ?

тут целая тема есть

1 лайк

@mrGorobec, вот собственно и ответ :slight_smile: Быстро, и изолировано разворачиваеться среда тестирования за 3-5 сек :slight_smile:

+Можно динамически создавать столько контейнеров с нодами на сколько хватит ресурсов системы.

Еще одна интересная ситуация, которую не могу додумать до конца: Как же все таки эфективно организовать свои тесты.

Пример:

  • тесты храню в разных файлах, которые относяться к специфический фичи приложения
  • с помощью маркеров от аллуры могу запускать тесты конкретной фичи, конкретных стори

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

  1. Вынести сетап тесты (создание пользователя, коннект к чему то там) как алур степы, и сделать перчень необходимых степов(тестов) в setupClass методе класса фичи.
  2. У меня есть спицифический клас для динамического добавления и использования переменных между тестами. Может быть, например, когда мы пытаемся прочитать Vars().user_email переменной в тесте, и если ее нет, искать как то тест где происходит ее сет (Vars().user_email=random.bla_bla_bla) т выполнять его :slight_smile: . Но это из области фантастики получаеться, хотя выполнимо.

Как вы организовываете свои тесты?
Заранее благодарен.

Я считаю, что тесты должны быть независимыми друг от друга.
Приведите пример депенденси, как вы написали.

Что бы запустить тест любой фичи - нужно создать нового позьвателя.

  1. В тестовом плане, сейчас я создаю пользователя вначале, а потом использую его для всех тестов. Значит ли это что каждый тест должен создавать для себя нового пользователя что бы быть независимый?
  2. Для того что бы протестировать совместимость с другой системой, мне нужно приконектиться к ней в нашем приложении, используя пользователя созданого заранее, потом авторизироваться и создать учетную запись в приложении. Из этого всего у меня получаеться целый тест сьют для того что бы проверить один функционал. Но таких функционалов много, и значит ли это что для каждого теста мне нада проделывать такую большую работу снова и снова что бы они были независимы?
    В таком случае тестирование привратиться в 90% сетап тестов и 10% функциональных, что будет убивать время и станет не эфективным, я так думаю.

Но если как то динамически определяться какие тесты нада выполнить перев выполнение основного теста, и если они еще не выполнялись - проранать, а если выполнялись и статус ОКЕЙ, просто выполнить основной тест. Это было бы очень крутая система.

В Jenkins можно настроить зависимость джобов друг от друга.
Один джоб запускает тест по подготовке данных, если он прошел успешно, стартуют остальные джобы.

Jenkins не должен беспокоиться про тест депенденси. Это всего лишь старт поинт. Что я делаю в дженкинсе с зависимостью это зпускаю разного уровня планы (джобы) после успешного выполнения предыдущего (Smoke->Acceptance->Feature specific plans/jobs).
Тут у меня проблема с организацией и построением этих планов из тестов внутри фреймворка. :frowning:

Может эта тема вдохновит?
http://devork.be/talks/advanced-fixtures/advfix.html

Мне просто так не приходилось заморачиваться, специфика такая.

Спасибо, почитаю. А как вы организовали свои тесты? В каких файлах/классах они находяться. Как сгрупированы? :slight_smile: