Добрый день!
Есть фреймворк для функционального тестирования, который написан поверх связки Selenium(Facebook PHP WebDriver) на языке РНР.
Из функционала:
- навигация, поиск элементов и проверка их состояния(есть\нет на странице, видимый\невидимый и т.д.), различное взаимодействие с ними(нажать, hover, ввести значение и т.д.), ожидание различных состояний элементов
- парсинг HTML (библиотека Simple HTML DOM)
- логирование (простой самописный логгер)
- работа с базой данных (подготовка данных перед тестом, поиск нужных объектов для работы)
Суть проблемы.
Изначально РНР был выбран для автоматизации т.к. тестируемый web-проект также написан на стеке РНР/JS/MySQL и в случае чего, кто-то из разработчиков мог подключиться к написанию тестов.
Со временем стало ясно, что работа для девелоперов по основному проекту есть всегда, а РНР в среде QA-автоматизаторов спросом пользуется мало и найти человека на поддержку в случае чего крайне проблематично.
Инструментов и библиотек, насколько я понимаю, значительно меньше чем на Java, JS, Python + найти автоматизатора на этих языках значительно легче.
В свете описанной выше ситуации, периодически возникает желание переписать фреймворк на более популярный язык.
Объём фреймворка вместе с тестами на данный момент ~ 10000 строк.
У меня на данный момент коммерческий опыт только на РНР\JS. На Python писал ряд тестов в контексте прохождения курсов, язык понравился, с Java знаком поверхностно.
Из вариантов решения проблемы рассматриваю следующие:
- оставить как есть, на РНР. Вариант приоритетный по понятным причинам - фреймворк уже написан, есть опыт с РНР в отличие от других языков.
- перейти на Java. Родной язык для Selenium, множество библиотек, но порог входа выше чем у других языков
- перейти на JS. Набирает популярность, сравнительно простой для изучения. Основан на Java :)
- перейти на Python. Показался проще и понятнее чем JS, достаточно популярным. Но отталкивает это неопределённость с версиями самого языка и, соответственно, библиотек, который уже 10 лет с 2 на 3 версию перейти не может.
Лично я, если решусь переписывать, склоняюсь по приоритетам:
1. Python
2. JS
3. Java(крайне нехотя т.к. намного сложнее остальных, возможно я не прав, и опыта с ним нет)
Спасибо тем, кто дочитал до конца. И вдвойне буду признателен тем, кто подскажет с высоты своего опыта, что делать)
p.s. убедительная просьба не скатываться в holywar.