Thusydides или собственный фреймворк - что лучше?! Результаты опроса и анализ

Совсем недавно тут мы проводили достаточно интересный опрос - А какой webdriver framework используете Вы? И правда - сейчас существует достаточно богатый выбор уже готовых решений, осталось только выбрать подходящий. Или может всё таки использовать что-то своё?

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

  1. Какими свойствами должен обладать фреймворк, чтобы быть на первом месте?
  2. Почему чаще всего всё же используется «самописные» библиотеки?

Начнем по порядку.
Еще раз приведу результаты, на основании которых я делал выводы:

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

Подведя итоги первой части - давайте всё же попробуем ответить на вопрос - Какими свойствами должен обладать фреймворк, чтобы быть на первом месте?
Несмотря на то, что как видно из небольшого анализа(да и по логике вещей это кажется очевидным), очень важную роль играет «возраст», я бы не стал ставить его не первое место. На мой взгляд, из вышеописанных свойств самыми важными являются следующие:

  1. обилие фич - наверное самый важный показатель. Чем больше «полезных» функций есть в библиотеке - тем им больше хочется пользоваться, заменив кучу подключенных библиотек одной. Тут, разумеется, очень важно обратить внимание на слово «полезные», ведь фреймворк может и содержать 100 различных фич, но они могут быть совершенно «неудобоваримыми» и неудобными на для использования.
  2. порог вхождения и документация - фреймворк должно быть очень просто подключать, API должно быть легким в использовании, документации должно быть достаточно(но не много), и что не маловажно - должен быть приятный ресурс продукта. Лично для меня - важно, когда я захожу почитать о какой-то большой библиотеке и вижу понятный, хорошо сделанный сайт с хорошим описанием и примерами, с грамотной навигацией.
  3. раскрученность - чем больше фреймворк на слуху, чем чаще о нем рассказывают на различных конференциях, блогах и тп - тем к нему больше тянутся люди.
    Но, разумеется, все эти показатели может совокупность следующих : уникальности и своевременности. Как в свое время, например, появился Selenium.

В нашем опросе так же присутствовало еще несколько результатов, связанных с различными самописными фреймворками.

Результат “не использую java фреймворк” - это люди, пишущие не на Java. Чаще всего, наверное, используется python. Опять же за счет явно несложного порога вхождения.

А остальные два - они похожи по своей сути. Ведь чтобы использовать «чисто webdriver + java без наворотов" - всё равно приходится писать какой-то свой фреймворк?

И всё же - почему же автоматизаторы чаще используют что-то своё, а не прибегают к помощи уже написанных решений?

Тут можно придумать несколько возможных вариантов:

  1. тесты пишет новичок автоматизатор. И ему достаточно сложно взять большой продукт и разобраться в нем, по этому он пишет свой, хотя, наверное, мог бы потратить намного меньше времени, взяв уже готовое решение. Но он учится, а лучшее обучение - через написание собственного кода. И за это мы его не будем ругать. Возможно, в бущущем, он будет использовать selenide или thusydides.
  2. тесты пишет любой автоматизатор, который просто не знает о существовании того или иного фреймворка, по этому пишет своё.
  3. тесты пишет опытный автоматизатор. Он уже много раз использовал различные фреймворки, знает их плюсы и минусы, и за свой не малый срок работы сделал удобное и оптимальное решение, которое использует в своих проектах. Оно простое и отлично подходит под необходимые нужды.
  4. существующие фреймворки не удовлетворяют требованиям. То есть потребуется очень много времени, чтобы «подпилить» нужные функции в уже существующем решении и намного проще и оптимальнее использовать своё.

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

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

6 лайков

Аргумент, который я чаще всего слышу в пользу “чисто вебдрайвера”: “Знаю, что будет сложно, но хочется покопаться в кишках, чтобы самому во всём этом разбираться.”

1 лайк

Кстати да! Такое тоже бывает. Но этож тоже неплохо, так ведь?

Смотря, что ставить во главу угла - иногда важна быстрая разработка тестов, иногда важнее прозрачность и гибкость - которые безусловно выше для своего фреймворка (конечно в том, случае если на проекте - автоматизаторы не сменяют друг-друга)

1 лайк

Нет, это очень плохо. Если ты для рабочего проекта вместо отлаженной библиотеки берёшь голый вебдрайвер, чтобы понаступать на грабли и набраться опыта, то ты фактически обманываешь работодателя. Вместо продукта он будет оплачивать твоё обучение, причём весьма сомнительного качества.

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

Сколько людей - столько и мнений))

Можно разобраться и “копаясь в кишках” Thucydides. Более того, если что-то не нравится или что-то нужно добавить к нему. John Smart всегда приветствовал это, главное чтобы была польза другим и были тесты к коду - проект open sourced - GitHub - thucydides-webtests/thucydides: Thucydides is a tool that lets you use WebDriver-based unit or BDD tests to write more flexible and more reusable WebDriver-based tests, and also to generate documentation about your acceptance tests, including a narrative description of test, along with the corresponding screen shots, and also high-level summaries and aggregations of the test results. Я в свое время подобавлял некоторые части, которые мне нужны были.

1 лайк