3 октября 2018

Selenium != framework

Senior Test Engineer Noveo Антон Малев-Ланецкий, уже знакомый вам по некоторым нашим постам, относится к своей работе с душой и не может пройти мимо, когда в Интернете кто-то неправ :) Особенно если безобидная на первый взгляд неточность вносит серьёзную путаницу в умы причастных. Об одной из таких неточностей он написал пост в свой блог: https://rebooter.github.io/blog/selenium-!=-framework/. С разрешения автора делимся этим постом с вами!

Noveo Test Engineer

Сидел я как-то томным вечером и думал, что моё фанбойство к Codeception слишком затянулось и пора искать что-нибудь новенькое. Внезапно возникшая мысль тут же заставила меня пойти в гуглопоиск и ввести что-то вроде automation test frameworks, дабы получить какой-нибудь топ самых-самых классных. Конечно, увидел я там всякое, что с болью, но можно  за уши притянуть к званию “framework”, однако верного камрада Selenium я там точно не ожидал увидеть. И практически каждая подборка гордо давала ему это звание и ставила почти в первые ряды. После пятой ссылки у меня начало припекать, и захотелось рассказать, почему НЕЛЬЗЯ называть Selenium фреймворком и почему мне так хочется откусить кому-нибудь лицо всего лишь из-за какого-то наименования.

Framework

Предлагаю сначала разобраться с этим модным словом – фреймворк, а то уж шибко часто оно тут мелькает. Можно смело залезть в вики (как русскоязычную, так и в англоязычную), посмотреть в словаре значение слова (например, тут) и узнать, что англицизм “фреймворк” в какой-то мере можно заменить русизмом “каркас”. Это будет немного топорно, но обо всём по порядку.

Возьмём в качестве примера какой-нибудь фреймворк для веб-разработки — пусть будет Symfony. Какие возможности он нам даёт?

  • Набор библиотек под названием “Они по-любому юзаются в каждом проекте”.
  • Объединение этих библиотек в какую-либо единую структуру.
  • Предоставление единого стиля, метода, модели или шаблона (читай, паттерна) разработки приложения, которому удобно следует сообщество фреймворка (не всегда, но всё же) и которое является стандартом для этого инструмента.
  • Иногда возможность расширяемости и модифицируемости для своих коварных целей.
SuperNightClub: Bender Edition
Когда мы узнаём о понятии framework ближе

Представим, что мы хотим открыть ночной клуб и нам добрые люди дали суперкрутой фреймворк для постройки ночных клубов SuperNightClub: Bender Edition. Он сразу даёт нам возможность сделать пару простых вещей: поставить помещение, установить там барную стойку и заказать бухло. Раскуривая мануал, мы узнаём, как мы можем легко и просто (не всегда) реализовать бармена, официантов (если они нужны), диджея и другие жизненно необходимые вещи для ночных танцулек и кутежа. При этом наш фреймворк хоть немного, но позаботился о начинающих бедолагах, и наше помещение уже имеет сигнализацию, настроенный механизм взаимодействия между барменом и официантами, а в некоторых мануалах прямо по шагам расписано, как мы можем нанять охрану или разнообразить меню нашей кухни (если она у нас есть). И всё это чудо мы творим через какую-нибудь условную консоль в вашем офисе администратора клуба: написал какие-то команды и появился новый бармен, прописал ещё немного — и вот нажатием одной кнопки можно получить еженедельный отчёт о каждой тусовке, и так далее.

Мы имеем какой-то набор базовых инструментов под капотом (молоток, пила, лопата, дрель, шпатель), самые примитивные действия (забить, копать, пилить, сверлить) и основные принципы, где и для чего мы будем с этим взаимодействовать (просверлить дыру в стене, отпилить брусок, закопать создателей топов про фреймворки). Это упрощает описание типичных процессов, подводит их под какой-то стандарт и собирает всё самое необходимое в одной коробке.

Лопата

Мне кажется, тут уже должна возникнуть благая мысль, мол “Selenium даёт только возможность взаимодействия с web driver”, “там нет никакого набора других инструментов”, “нужно много ещё чего сделать, чтоб написать полноценный, но простой тест”. Поздравляю, мы смогли ответить на вопрос “почему Selenium не фреймворк”, всего лишь разобрав понятие фреймворка. И всё действительно обстоит именно так, ведь для полноценных тестов нам нужны:

  • Assert’ы, которые будут сравнивать один результат с другим и в панике падать, если результаты не совпадают.
  • Отчётность, которая позволит нам прогнать какой-то тестовый набор и сказать “вот тут упало, вот тут нет, а вот тут вообще не смотри, всё плохо”.
  • Какая-то стандартизация, ведь мы не хотим писать каждый раз один и тот же велосипед.
  • Возможность использовать в тестах какие-то сторонние функции для различных извращённых нужд.

И это только базовый набор. Даёт ли этот набор Selenium? Правильно, не даёт. Только тыкать в браузер, только жамкать кнопки.

Вывод: Selenium — это прекрасная библиотека для взаимодействия с web driver (или с чем-то на основе), тулза, которая позволяет тыкать кнопки и прикинуться юзверем.

Учить матчасть

Надеюсь, что я объяснил своё повышение температуры при виде “Selenium – top 1 framework for autotesting!”. Казалось бы, ну назвали не так, ну что такого, а в итоге получаем такого рода подборки, начинающих, которые искренне верят в причастность Selenium к лику фреймворков и другую вытекающую путаницу. Многие берут Selenium и начинают прикручивать различные xUnit, другие библиотеки для полноценного использования, делая как раз тот самый фреймворк, на котором будет удобно писать и поддерживать тесты. Кто-то берёт уже готовые решения типа Codeception (PHP, JS), Selenide (Java), Golem (Python) или Cypress (JS). Вот последние чуваки – фреймворки, а Selenium – нет. Mic drop.

P.S. Будет круто, если вы выскажите своё “э, слышь” или своё “всё чётко” в комментариях.

Noveo Test Engineer

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте в нашем блоге

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: