Comments 38
прощайте тесты на Python'е, прощай Selenium.
Здравствуй SeleniumWebdriver :)
Так что прощай Java, прощайте тесты на Python'е, прощай Selenium.
Привет JS, привет непонятная либа, привет стремный мир javascript разработки?
Как-то шило на мыло получилось :)
Никогда не понимал в чем проблема писать тесты на Python. Язык то вроде простой как два пальца.
Совсем недавно занимался переносом автотестов с Ruby+Capybara на Javascript+webdriver.io.
Дело не в том, простой язык или нет, а дело в том, что он инородный для команды JS-разработчиков в целом. Ruby (ну или Python, Java, whatever) будет сложно интегрировать с основным флоу сборки, построенном на каком-нибудь Gulp.
плюс, это позволяет избежать смешения кода из разных языков — если потребовалось выполнить какой-то яваскрипт в браузере в процессе теста (вызов функции execute в примере)
вообще основной поинт статьи был в том, чтобы показать как можно максимально быстро начать использовать автотесты человеку без опыта в этой сфере — фронтендеру, например)
Вот что мне не понятно, так это что мешало раньше использовать все то же самое с chrome в "обычном" режиме, если так не хотелось использовать Java+Selenium? Разъясните, пожалуйста.
С этим не спорю. Сюда же дополнительный профит в виде отсутствия затрат на отрисовку страниц.
Так что прощай Java, прощайте тесты на Python'е, прощай Selenium.
Однако автор, по моему скромному мнению, ощутимо более существенным выделяет тезис именно против Selenium и "скачков" из рабочего окружения (js) в тестировочное (java и т.д.), а главное событие — появление headless browser — как-то скралось на его фоне...
Странно, что вообще gui-free-режимы в браузерах стали появляться только сейчас. Автотесты вроде бы уже давно практикуются. И если разработчики тех же firefox и opera подключатся к тренду (в чем я немного сомневаюсь, во всяком случае в плане сроков ожидания данной фичи), то будет великое счастье уже всем тестировщикам и всем тем, кто так или иначе связан с написанием и развертыванием этих тестов.
http://codecept.io/
Суть тестировщика не в том, чтобы ручками тыкать в браузер, а в дизайне тестов. Этот специально обученный человек должен разработать тесты, которые покроют больше функциональности и найдут больше багов, чем если их будет разрабатывать программист. Как эти тесты будут выполняться — автоматически или вручную — второй вопрос.
И вообще, мы же все снисходительны к себе и результатам своего труда. Свой код тестировать не так эффективно, как чужой. А ещё у разработчика и тестировщика разные образы мышления — не так-то просто переключаться между ними.
лучше давайте купим наконец-то кофе-машину
У вас там либо очень дешевые тестировщики, либо очень дорогие кофе-машины.
Мне любопытно, ведь с помощью хедлесс хрома можно сделать следущую конструкцию:
- Сайт написаный плохо.
- Хром
- chromedriver, который перегоняет новости в rss
- Rss ридер
- Профит.
Профит в том, что большинство современных сайтов написаны настолько плохо, что пользоваться на телефоне невозможно, а на ультрабуке — затруднительно. Но контент на них может быть хорошим.
А я запускаю с Селениумом в докер-контейнерах, без иксов. И не парюсь. Если хочется подебажить глазами: гашу контейнер с селениумом, запускаю селениум локально, и любуюсь в иксах.
Под селениум все уже написано до нас, и ничего сложного нет в том, чтобы под любой язык настроить решение. Может не пол часа, но зная свой стек и приложение, пусть час. Основная сложность автотестов не в том чтобы программно запускать браузер.
Не разделяю эйфории автора от описанного велосипеда.
а ваш комментарий звучит как «я пользуюсь тем, чем пользуюсь и знать не хочу ничего нового» :)
… по поводу того, что «основная сложность автотестов не в этом» — в принципе, согласен. всё веселье начинается, когда, например, хром внезапно начинает просто зависать на каких-то страницах и начинаешь гадать, что могло послужить причиной) и всё же стереотип по поводу того, что «автотесты — это только для энтерпрайза, а мы пока не доросли» — существует, согласитесь.
Навеяна тем что есть готовое решение без иксов, java, но со скриншотами: докерезированный selenium.
А либы предоставляющие биндинг с API selenium есть практически для любого языка.
Т.о. не вижу конкурентных преимуществ Вашего решения. Единственно, если проект на js и команда тоже, а docker не используется. Тогда да, м.б. быстрее.
У меня такого стереотипа нет. Бывал как в интерпрайзе без тестов, так и в стартапах с тестами. Реально внедрить и там и тут, если менеджмент не мешает.
готовое решение без иксов, java, но со скриншотами
в том-то и дело, что тут тоже со скриншотами)
либы предоставляющие биндинг с API selenium есть практически для любого языка
да, Nightwatch.js — это по сути и есть такая либа для JS'а
мне просто персонально нравится делать то, что можно делать без докера — без докера)
… но в целом понял вашу точку зрения, спасибо за комментарии!
С основным тезисом статьи про миграцию тестов на JS и headless Chrome, я согласен, но Nightwatch я бы не выбрал.
Дело в том, что этот инструмент является сразу и инструментом для общения с браузером, и тестовым фреймворком, и библиотекой ассертов. Такой комбайн будет трудно сочетать, например, с остальными тестами, написанными на Mocha или Jasmine.
Гораздо лучше взять отдельные специализированные инструменты для каждой задачи. Я для этого обычно использую такую связку: Mocha, webdriver.io и Allure. Каждый инструмент делает здесь только одну задачу, а значит, делает её хорошо.
Отдельные выражения в адрес Джавы и Питона, скажем, не совсем нейтральны, как будто это что-то плохое. Лучше следовало бы объяснить доступным языком, что если раньше на протяжении долгого времени у разработчика не было выбора, на чем писать тесты, то теперь, с появлением стандарта WebDriver, можно автоматизировать браузер с помощью любого языка.
WebDriver — это веб-сервер на локальном хосте, прокладка между разработчиком и сокет-сервером самого браузера. Это значит, что для написания либы потребуется только HTTP-клиент и парсинг джейсона. Например, клик по ссылке — это запрос вида POST /session/{session id}/element/{element id}/click
. Управлять браузером становится технически легко (но остается много тонкостей под капотом).
Что касается nightwatch, ты мы использовали эту либу в проекте. У меня сложилось впечатление, что она жульничает. Например, кликает по элементам нулевой толщины. Я полагаю, что под капотом она делает это (а так же другие операции) через Джаваскрипт, что есть читерство. После замены nightwatch на чистый WebDriver-протокол, при использовании тех же селекторов полезли ошибки, что по ним кликать нельзя.
Пользуясь случаем, попиарю свою библиотеку для Кложи — Etaoin. На ней сейчас гоняются наши тесты, полет нормальный.
И вот что: Headless Chrome не умеет делать скриншоты. Возвращает картинку сплошь залитую серым. Я рекомендую вам использовать обычный Хром. На CircleCI настроен X Display, тесты проходят без проблем.
Есть шикарный selenium-grid в докере. Вообще ничего делать не надо, просто работать с ремоутным селениумом.
npm install protractor
Конфигурированием файла protractor.conf.js для автоматического запуска селениума и использования драйвера хрома
exports.config = {
seleniumServerJar: './node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar',
chromeOnly: true, chromeDriver: './node_modules/protractor/selenium/chromedriver',
capabilities: {
browserName: 'chrome'
},
specs: ['./test/e2e/**/*.spec.js'],
onPrepare: function () {
browser.ignoreSynchronization = true;// Позволяет работать со страницами без angular
}
+ установка системы тестирования mocha+chai или jasmine.
Но это конечно с окном chrome — надо будет попробовать эту же связку в headless режиме
но тут у вас опять нужен Selenium Server, т.е. нужна Java)
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--headless", "--disable-gpu", "--window-size=800x600" ]
}
}
protractor и страницы без ангуляра отлично работает с параметром browser.ignoreSynchronization = true;
What is Nightwatch?
Nightwatch.js is an automated testing framework for web applications and websites, written in Node.js and using the W3C WebDriver API (formerly Selenium WebDriver).
Посмотрите mocha-headless-chrome, там нет Silenium от слова "совсем".
Как настроить простую систему автотестов без Java и Selenium