Совсем недавно тут мы проводили достаточно интересный опрос - А какой webdriver framework используете Вы? И правда - сейчас существует достаточно богатый выбор уже готовых решений, осталось только выбрать подходящий. Или может всё таки использовать что-то своё?
В этой статье я постараюсь проанализировать результаты опроса, высказать свои мысли по поводу результатов и попробую на их основании ответить на следующие вопросы:
- Какими свойствами должен обладать фреймворк, чтобы быть на первом месте?
- Почему чаще всего всё же используется «самописные» библиотеки?
Начнем по порядку.
Еще раз приведу результаты, на основании которых я делал выводы:
Тут же хотелось бы немного разделить фреймворки следующим образом:
в первой группе будут - Thucydides, Html Elements и Selenide
во второй - cucumber-jvm и jbehave.
Остальное пока оставим в стороне.Я специально разделил их, так как всё-таки первые - это строго selenium фреймворки, а вторые - это фреймворки для BDD и их можно использовать как в связке с Webdriver, так и без нее.
Итак. Почему же результаты расположились именно таким образом? Анализ хотелось бы провести так же отдельно для разных групп.
Объем предоставляемых возможностей
Первое, что приходит на ум - это объем предоставляемых возможностей.
Тут, как и в опросе - явный лидер Thucydides. Это и полноценная поддержка Webdriver фич, и BDD, и достаточно симпатичный встроенный отчет.
Если отталкиваться от этого показателя, то тогда на втором месте должен был бы быть Selenide, так как это - полноценный фреймворк для упрощения написания selenium тестов, в то время как Html Elements - это лишь небольшое облегчение работы с веб элементами в тестах.
Тут, кажется, selenide проиграл, так как он достаточно молод по сравнению с другими.
«возраст» наших «подсудимых»
Плавно перетекаем ко второму показателю - «возраст» наших «подсудимых». Разумно будет предположить, что от «выдержки» зависит и кол-во пользователей.
И опять выигрывает Thusydides. И проигрывает Html Elements. Возможно, стоит рассматривать не время первого коммита в репозиторий, как я пытался это сделать, а выход в “продакшн”. Тут, к сожалению, достаточно сложно поймать даты, но по ощущениям - результаты опроса прямо пропорциональны дате выхода - чем раньше продукт был пущен в бой, тем больше у него голосов.
Порог вхождения
Третий показатель, который напрашивается - это так называемый порог вхождения, то есть насколько просто начать пользоваться библиотекой.
Так как Html Elements самый небольшой из них - то тут, наверное, он берет первое место. На второе я бы поставил Selenide, он обладает неплохим и простым сайтом с документацией и видеопримерами. Сложнее всего видится вхождение и познание многообразия фич Thusydides. То есть в случае с этим показателем - результаты не совпадают с результатами опроса.
Популярность
Четвертый показатель - это количество ресурсов с примерами, разборами типичных ошибок и тп. Тут опять же лидирует Thusydides, проигрывает Selenide. И опять явно прослеживается зависимость на «возраст».
Раскрученность
Пятый - «раскрученность» - о чем больше говорят на различных семинарах, что больше на слуху? Время раскручивания Thusydides, наверное, уже позади, но он уже успел себя показать. И за счет этого - тут я бы тоже поставил его на первое место. Дальше - Html Elements. Просто за счет того, что он более стар, да и спикеров в компании разработчике Яндекс найдется не мало. К сожалению, опять проигрывает Selenide. Хотя, насколько видно, в последнее время он потихоньку начинает «раскрутку».
Исходя из вышесказанного - по сумме балов выигрывает Thusydides, второе место - Html Elements, третье - Selenide. Получился следующий пъедестал почета(да не судите строго, хочется как-то немного добавить красок в текст):
Хотя, кажется, что со временем результаты поменяются. Уже достаточно много слов было сказано и написано в упрек Thusydides, так что осмелюсь предположить, что не долго ему осталось находиться на вершине этого небольшого пьедестала. Я лично среди этих фреймворков сделаю ставку на Selenide. На мой взгляд у него может быть неплохое будущее.
Что же касается 2-х BDD фреймворков - cucumber, как мне кажется, выигрывает за счет так же своего возраста. По сути - фреймворки похожи друг на друга, обладают схожим набором фич. Так же cucmber есть и для многих языков программирования, что несомненно тоже дает ему пару балов вперед.
Подведя итоги первой части - давайте всё же попробуем ответить на вопрос - Какими свойствами должен обладать фреймворк, чтобы быть на первом месте?
Несмотря на то, что как видно из небольшого анализа(да и по логике вещей это кажется очевидным), очень важную роль играет «возраст», я бы не стал ставить его не первое место. На мой взгляд, из вышеописанных свойств самыми важными являются следующие:
- обилие фич - наверное самый важный показатель. Чем больше «полезных» функций есть в библиотеке - тем им больше хочется пользоваться, заменив кучу подключенных библиотек одной. Тут, разумеется, очень важно обратить внимание на слово «полезные», ведь фреймворк может и содержать 100 различных фич, но они могут быть совершенно «неудобоваримыми» и неудобными на для использования.
- порог вхождения и документация - фреймворк должно быть очень просто подключать, API должно быть легким в использовании, документации должно быть достаточно(но не много), и что не маловажно - должен быть приятный ресурс продукта. Лично для меня - важно, когда я захожу почитать о какой-то большой библиотеке и вижу понятный, хорошо сделанный сайт с хорошим описанием и примерами, с грамотной навигацией.
-
раскрученность - чем больше фреймворк на слуху, чем чаще о нем рассказывают на различных конференциях, блогах и тп - тем к нему больше тянутся люди.
Но, разумеется, все эти показатели может совокупность следующих : уникальности и своевременности. Как в свое время, например, появился Selenium.
В нашем опросе так же присутствовало еще несколько результатов, связанных с различными самописными фреймворками.
Результат “не использую java фреймворк” - это люди, пишущие не на Java. Чаще всего, наверное, используется python. Опять же за счет явно несложного порога вхождения.
А остальные два - они похожи по своей сути. Ведь чтобы использовать «чисто webdriver + java без наворотов" - всё равно приходится писать какой-то свой фреймворк?
И всё же - почему же автоматизаторы чаще используют что-то своё, а не прибегают к помощи уже написанных решений?
Тут можно придумать несколько возможных вариантов:
- тесты пишет новичок автоматизатор. И ему достаточно сложно взять большой продукт и разобраться в нем, по этому он пишет свой, хотя, наверное, мог бы потратить намного меньше времени, взяв уже готовое решение. Но он учится, а лучшее обучение - через написание собственного кода. И за это мы его не будем ругать. Возможно, в бущущем, он будет использовать selenide или thusydides.
- тесты пишет любой автоматизатор, который просто не знает о существовании того или иного фреймворка, по этому пишет своё.
- тесты пишет опытный автоматизатор. Он уже много раз использовал различные фреймворки, знает их плюсы и минусы, и за свой не малый срок работы сделал удобное и оптимальное решение, которое использует в своих проектах. Оно простое и отлично подходит под необходимые нужды.
- существующие фреймворки не удовлетворяют требованиям. То есть потребуется очень много времени, чтобы «подпилить» нужные функции в уже существующем решении и намного проще и оптимальнее использовать своё.
Почему-то многие считают, что это плохо, писать свои фреймворки. На мой же взгляд - это очень даже хорошо. Существующие решения не всегда сделаны оптимально, а уж тем более не всегда оптимально используются для решения задач. То есть взять библиотеку из 1000 классов и использовать из нее 2 намного хуже, чем самому реализовать те самые нужные функции. Тем более, что через создание собственных фреймворков рождаются новые решения, которые в последствии приобретают популярность и используются множеством людей.
В самом конце - хочется отдельно отметить, что это лишь мои мысли, высказанные на основании опроса. У кого-то они могут быть другими. Но, разумеется, обсуждние(а не холивар) приветствуется.