Именно на Каталине и проблема github.com/dsheiko/puppetry/issues/50
Как я отписал, если найти приложение в Finder, Ctrl-Click и выбрать Open — открывается и работает без проблем. На днях проверяли.
Selenium IDE (https://selenium.dev/selenium-ide/)
Плюсы:
— Selenium Grid
— тесты Selenium, выполняются по ощущениям быстрее чем Puppeteer (https://pptr.dev/)
— тесты Selenium можно ранить на различных браузерах
— огромное коммьюнити, проект живет очень давно
Минусы:
— реализован как расширения для браузеров, как по мне, очень неудобно управлять структурой тестов
— из браузера можно записать отдельные сценарии, но серьезные тесты надо писать кодом, что делать с Selenium API сравнительно сложно
Puppetry
— конвертирует тесты в JavaScript (Node.js) — это кому плюс, а кому минус :)
— создание тестов, помимо рекордера, не требует никаких специфических знаний, только CSS (и тут реально много возможностей, что порой удивительно для визуальной среды)
— «печеньки»
— тестирование по скриншотам (как PhantomCSS)
— тестирование сценариев зависящих от высланных электронных писем
— шаблон, выражения, переменные (скажем, можно указать, что значение элемента input будет сгенерированно по критериям docs.puppetry.app/template#faker)
Есть такой метод page.assignVarRemotely, он стучится по указанному URL, и удерживает ход выполнения тестов на паузе пока не придет ответ сервера удовлетворяющий заданному условию (или timeout). Именно таким образом я тестирую сценарии зависящие от ответа в электроной почте docs.puppetry.app/testing-techniques/testing-emails/example-with-restmail.net.
Т.е. не слазить в БД, но опросить REST метод, который лазит в БД.
Компонентные тесты конечно никто не отменял :) Но они тестируют компоненты в изоляции. Взаимодействие компонентов можно протестировать только сквозными тестами, также как скажем RWD страницы. Некоторые типы тестирования, как скажем CSS regression, теоретически можно применить в компонентных тестах, но не практично.
Unsigned developer. В Security & Privacy/General, там должно быть — Puppetry заблокирован, потому как от неидентифицированного разработчика, открыть все-равно?! support.apple.com/en-us/HT202491
Автогенерация — это на стороне приложения. Хотя проблема актуальная — в приложении поменялся layout, тесты упали. В Puppetry цели отделены от тестов (просто пары — переменная: селектор ). Т.е. проще рефакторить. Ну и при разумном использовании CSS (особенно псевдо-селекторов) docs.puppetry.app/tips-and-tricks/embrace-the-power-of-css#lists можно создавать тесты допускающие изменение структуры старницы. Например, селектор a[href*=«facebook.com»] найдет ссылку «Поделиться на Facebook» независимо от ее положения в DOM (ключевое слово в href надо удлинить, если есть другие ссылки с facebook.com). Также как и в Selenium можно адресовать элементы по наличию определенного текста в textNode.
Справедливо. Мы не могли убедить наших тестеров писать автоматизированные тесты годами. Я «вскармливал» им примеры тестов на Selenium, Nightmare, Dalek.js, Zombie.js, все без толку. Потом работал с Puppeteer и понял что можно обойтись без кодирования. Написал Puppetry, предложил им. Т.е. проблемы и почему — дать возможность создавать тесты без написания кода. Впрочем, будучи программистом, я сам пользуюсь Puppetry — так быстрее и удобнее — не надо держать в голове API веб-драйвера, не надо копаться в снипеттах, нет вероятности ошибок кода, которые сложно продебаггить. На Welcome page есть кнопка Demo Project, в нем около десятка примеров для разных типов тестирования. Один из них — полный тест TODOMVC согласно их спецификации github.com/tastejs/todomvc/blob/master/app-spec.md)
Чем отличается от других? Из подобных (www.ranorex.com, www.testcraft.io, ..) платные, что не всем подходит. Попадалось еще web-based решение, которое раннит тесты на своем сервере. Т.е. они не смогут достучаться до stage среды (изолированной от внешнего доступа)
Грабли… В ветке 2.0 реально не хватало групповых операций над записями (copy/paste,delete, enable/disable), для утверждения target.assertVisible не было опций, что на практике не работает (важно как именно виден элемент: доступен, display, visibility, opacity, in viewport). Вообщем все проблемы о которых мне известно исправлены в версии 3.0.0. Разве что повис пока запрос на снипеты (вызов один из другого и выполнение без тестов).
Всмысле? Скажем, мы используем Puppetry для тестирования корпоративного сайта (stage env), порядка 50 тестов, покрывающих RWD, sanity (наличие важных компонентов), exhaustive тесты для форм, бюджет производительности и все сценарии по авторизации/регистрации, включая анализ автоматически высылаемых электронных писем. Есть еще проект электронного магазина, там тестируется Google Analytics, потому как много используется Tracker API для сбора телеметрии Enhanced Ecommerce.
Спасибо за статью — тема актуальная. Однако что касается визуальных эффектов имеет смысл полагаться на
requestAnimationFrame (http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/ или vimeo.com/77905678) вместо timer loops, так как этот именно метод предназначем и оптимизирован для подобных задач.
Относительно совместимости — это вопрос компромиса. Девелопер может по-прежнему писать Vanilla JS и использовать shim (скажем, из MDN коллекции, как это делает Лиа Вероу). Опять же проверка совместимости нынче не проблема. Достойный код должен быть густо покрыт тестами в любом случае. И далее в ходе интеграции (по коммиту) когда тесты будут отправлены на www.browserstack.com/ (скажем через bunyip) — отчет покажет определенно насколько кроссбраузеная поддержка имплементации соответсвует ТЗ. Опять же помним о YAGNI — если поддержки IE6 нет в требованиях, держать код поддержки в проекте точно не лучшая идея
Как вариант: библиотека MicroRequireJs github.com/dsheiko/micro-requirejs.
Очень простое и легкое (1K) решение. Не требует адаптации зависимых модулей:
rjs.define("//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", "jQuery");
rjs.require(['jQuery"], function(){
var $ = window.jQuery;
});
Презентация Marcin Wichary — познавательно. Особенно понравился трюк со спрайтами.
David DeSandro — ни одной новой идеи, старо как Open Source
Jeroen Wijering — на любителя
Anne van Kesteren — доклад построен настолько скучно, что парень (а это парень как оказалось) запомился только тем, что «засветил» яндексовский браузер
Phil Hawksworth — гениально! Не сколько содержание, сколько подача, структура, цитаты, оформление презентации
Peter Nederlof — это ведь тот самый чувак, котрый едва не уснул во время выступления
Rebecca Murphey — «В слайдах последнего докладчика вы НЕ найдёте много полезных советов». Ее выступление было похоже на урок в советской школе: «Children, don't repeat yourselves». Причем, судя по ее примерам, ей как-то не случилось читать что-либо типа Clean Code: A Handbook of Agile Software Craftsmanship, ну или хотя бы The Art of Readable Code
Когда-то бы статья, быть может даже здесь на Хабре. Элегантная иньекция сквозной функциональности. Возможно если поработать с кодом, можно выйти на фреймворк, если вдруг никто этого еще не сделал.
class Event extends ArrayObject {
public function __invoke() {
foreach($this as $callback)
call_user_func_array($callback, func_get_args());
}
}
$test = new Event();
/* Setting up callbacks */
$test[] = function($msg, $txt) {
echo "This is the event!
";
};
Система преподавания языков в СНГ — одна большая проблема. Здесь в Германии теория, синтаксис, грамматика идет никогда не подается сухими конспектами. Теюе подают правила в живом языку в игровой форме и, как бы, между прочим. Задача преподавателя приобщить тебя к языку. Ну да ладно. Что касается английского, по своему опыту могу сказать, для того чтобы понимать нативную речь надо знать хотя бы основные фразовые глаголы и это важно. Да и ваш язык без них будет, как из русского учебника — «корректный», но оторванный от жизни. Для себя я писал простенькую аплкуху demo.dsheiko.com/english для самопроверки
Американцы обычно произносят MySQL как maɪ ˈsiːkwəl
Не разу не слышал Putty как «пати», все коллеги — англичане, немцы, американцы, итальянцы и т.д. говорят «пути». Хотя на нэйтив-спикеров тоже не стоит ориентироваться, скажем, серверные англичане всегда читают «u» как «у» и потом плучается вместо баджет — буджет и т.д.
Как я отписал, если найти приложение в Finder, Ctrl-Click и выбрать Open — открывается и работает без проблем. На днях проверяли.
Плюсы:
— Selenium Grid
— тесты Selenium, выполняются по ощущениям быстрее чем Puppeteer (https://pptr.dev/)
— тесты Selenium можно ранить на различных браузерах
— огромное коммьюнити, проект живет очень давно
Минусы:
— реализован как расширения для браузеров, как по мне, очень неудобно управлять структурой тестов
— из браузера можно записать отдельные сценарии, но серьезные тесты надо писать кодом, что делать с Selenium API сравнительно сложно
Есть и более технические проблемы, поэтому все пытаются создать альтернативы
www.testim.io/blog/selenium-tests-fragile, crossbrowsertesting.com/blog/selenium/problems-selenium-webdriver
Puppetry
— конвертирует тесты в JavaScript (Node.js) — это кому плюс, а кому минус :)
— создание тестов, помимо рекордера, не требует никаких специфических знаний, только CSS (и тут реально много возможностей, что порой удивительно для визуальной среды)
— «печеньки»
Т.е. не слазить в БД, но опросить REST метод, который лазит в БД.
support.apple.com/en-us/HT202491
Чем отличается от других? Из подобных (www.ranorex.com, www.testcraft.io, ..) платные, что не всем подходит. Попадалось еще web-based решение, которое раннит тесты на своем сервере. Т.е. они не смогут достучаться до stage среды (изолированной от внешнего доступа)
Грабли… В ветке 2.0 реально не хватало групповых операций над записями (copy/paste,delete, enable/disable), для утверждения target.assertVisible не было опций, что на практике не работает (важно как именно виден элемент: доступен, display, visibility, opacity, in viewport). Вообщем все проблемы о которых мне известно исправлены в версии 3.0.0. Разве что повис пока запрос на снипеты (вызов один из другого и выполнение без тестов).
Разные стратегии представлены на примерах в доках:
docs.puppetry.app/testing-techniques
requestAnimationFrame (http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/ или vimeo.com/77905678) вместо timer loops, так как этот именно метод предназначем и оптимизирован для подобных задач.
Относительно совместимости — это вопрос компромиса. Девелопер может по-прежнему писать Vanilla JS и использовать shim (скажем, из MDN коллекции, как это делает Лиа Вероу). Опять же проверка совместимости нынче не проблема. Достойный код должен быть густо покрыт тестами в любом случае. И далее в ходе интеграции (по коммиту) когда тесты будут отправлены на www.browserstack.com/ (скажем через bunyip) — отчет покажет определенно насколько кроссбраузеная поддержка имплементации соответсвует ТЗ. Опять же помним о YAGNI — если поддержки IE6 нет в требованиях, держать код поддержки в проекте точно не лучшая идея
rachelandrew.co.uk/presentations/new-css-layout
patrickhlauke.github.io/touch/
leggetter.github.io/talks/realtime-tech-stack/#/
speakerdeck.com/philhawksworth/i-can-smell-your-cms-at-bdconf
www.slideshare.net/natashadrooney/making-it-work-offline-current-future-offline-apis-for-web-apps
Очень простое и легкое (1K) решение. Не требует адаптации зависимых модулей:
David DeSandro — ни одной новой идеи, старо как Open Source
Jeroen Wijering — на любителя
Anne van Kesteren — доклад построен настолько скучно, что парень (а это парень как оказалось) запомился только тем, что «засветил» яндексовский браузер
Phil Hawksworth — гениально! Не сколько содержание, сколько подача, структура, цитаты, оформление презентации
Peter Nederlof — это ведь тот самый чувак, котрый едва не уснул во время выступления
Rebecca Murphey — «В слайдах последнего докладчика вы НЕ найдёте много полезных советов». Ее выступление было похоже на урок в советской школе: «Children, don't repeat yourselves». Причем, судя по ее примерам, ей как-то не случилось читать что-либо типа Clean Code: A Handbook of Agile Software Craftsmanship, ну или хотя бы The Art of Readable Code
class Event extends ArrayObject {
public function __invoke() {
foreach($this as $callback)
call_user_func_array($callback, func_get_args());
}
}
$test = new Event();
/* Setting up callbacks */
$test[] = function($msg, $txt) {
echo "This is the event!
";
};
$test[] = function($msg, $txt) {
echo "Message: $msg. Text: $txt
";
};
$test[] = function($msg, $txt) {
echo "Works great!
";
};
/* call */
$test("Some message", "Some text");
Не разу не слышал Putty как «пати», все коллеги — англичане, немцы, американцы, итальянцы и т.д. говорят «пути». Хотя на нэйтив-спикеров тоже не стоит ориентироваться, скажем, серверные англичане всегда читают «u» как «у» и потом плучается вместо баджет — буджет и т.д.