Перевод тестового фреймворка (Selenium/Facebook PHP WebDriver) на другой язык

Добрый день!
Есть фреймворк для функционального тестирования, который написан поверх связки Selenium(Facebook PHP WebDriver) на языке РНР.
Из функционала:

  • навигация, поиск элементов и проверка их состояния(есть\нет на странице, видимый\невидимый и т.д.), различное взаимодействие с ними(нажать, hover, ввести значение и т.д.), ожидание различных состояний элементов
  • парсинг HTML (библиотека Simple HTML DOM)
  • логирование (простой самописный логгер)
  • работа с базой данных (подготовка данных перед тестом, поиск нужных объектов для работы)

Суть проблемы.
Изначально РНР был выбран для автоматизации т.к. тестируемый web-проект также написан на стеке РНР/JS/MySQL и в случае чего, кто-то из разработчиков мог подключиться к написанию тестов.
Со временем стало ясно, что работа для девелоперов по основному проекту есть всегда, а РНР в среде QA-автоматизаторов спросом пользуется мало.
Инструментов и библиотек, насколько я понимаю, значительно меньше чем на Java, JS, Python + найти автоматизатора на этих языках значительно легче.
В свете описанной выше ситуации, периодически возникает желание переписать фреймворк на более популярный язык.

Объём фреймворка вместе с тестами на данный момент ~ 10000 строк.
У меня на данный момент коммерческий опыт только на РНР\JS. На Python писал ряд тестов в контексте прохождения курсов, язык понравился, с Java знаком поверхностно.

Из вариантов решения проблемы рассматриваю следующие:

  • оставить как есть, на РНР. Вариант приоритетный по понятным причинам - фреймворк уже написан, есть опыт с РНР в отличие от других языков.
  • перейти на Java. Родной язык для Selenium, множество библиотек, но порог входа выше чем у других языков
  • перейти на JS. Набирает популярность, сравнительно простой для изучения. Основан на Java :ghost:
  • перейти на Python. Показался проще и понятнее чем JS, достаточно популярным. Но отталкивает это неопределённость с версиями самого языка и, соответственно, библиотек, который уже 10 лет с 2 на 3 версию перейти не может.

Лично я, если решусь переписывать, склоняюсь по приоритетам:

  1. Python
  2. JS
  3. Java(крайне нехотя т.к. намного сложнее остальных и опыта с ним нет)

Спасибо тем, кто дочитал до конца. И вдвойне буду признателен тем, кто подскажет с высоты своего опыта, что делать)

p.s. убедительная просьба не скатываться в holywar. :slight_smile:

На вашем месте я бы использовал Python или Java. Основные причины - много людей используют данные языки, следовательно много поддержки можно найти. Это больше мое мнение, поскольку такого опыта, как переписание фреймворка на новый язык для проекта у меня самого нету.

1 лайк

Если в наличии есть достаточно времени на переписывание на другой ЯП уже готового фреймворка (опыт есть, и он показывает, что это задача довольно трудозатратная. Особенно, если автоматизатор один на проекте.), то я бы скорее всего порекомендовала Python. Относительно прост, приятен и лаконичен, большое коммьюнити, всегда найдете поддержку на том же stackoverflow, все необходимые библиотеки уже изобретены (вроде даже аналог селенида есть). Ну и + будет ценным упоминанием в вашем резюме:)

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

p.s. сама пишу на java, если что. На js и python опыт также есть, но не такой большой.

1 лайк

Если действовать в интересах проекта - то, конечно оставить на PHP. Это сохранит Nую сумму денег.

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

1 лайк

Если не секрет, почему при Вашем основном, насколько я понимаю, языке Java, советуете Python либо JS?

Если не ошибаюсь, @Campi001 предлагает только python, не Js (упомянула только, что владеет им в небольшой степени).