Как стать автором
Обновить

Puppetry 3: автоматизированное тестирование без единой строки кода

Время на прочтение2 мин
Количество просмотров8.5K
Всего голосов 10: ↑10 и ↓0+10
Комментарии26

Комментарии 26

НЛО прилетело и опубликовало эту надпись здесь
Всмысле? Скажем, мы используем Puppetry для тестирования корпоративного сайта (stage env), порядка 50 тестов, покрывающих RWD, sanity (наличие важных компонентов), exhaustive тесты для форм, бюджет производительности и все сценарии по авторизации/регистрации, включая анализ автоматически высылаемых электронных писем. Есть еще проект электронного магазина, там тестируется Google Analytics, потому как много используется Tracker API для сбора телеметрии Enhanced Ecommerce.

Разные стратегии представлены на примерах в доках:
docs.puppetry.app/testing-techniques
НЛО прилетело и опубликовало эту надпись здесь

Судя по гитхабу Дмитрий и есть автор этой программы. Так что тут уместней вопрос не "почему выбрали?", а "когда запилите такую-то фичу?".

НЛО прилетело и опубликовало эту надпись здесь
да, все верно
Справедливо. Мы не могли убедить наших тестеров писать автоматизированные тесты годами. Я «вскармливал» им примеры тестов на 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. Разве что повис пока запрос на снипеты (вызов один из другого и выполнение без тестов).
НЛО прилетело и опубликовало эту надпись здесь
С моей стороны извинять, что не указал в посте Disclosure. Я думал об этом, но не нашел подходящую форму, чтобы вписывалась в содержание.
Очень интересная и симпатичная программа. Надо попробовать применить её для скраппинга и автоматизации браузера))

В полной мере данный инструмент покажет себя, если при разработке приложения применить автогенерацию стабильных глобально уникальных семантичных идентификаторов, как описано тут: https://habr.com/ru/post/461395/

Автогенерация — это на стороне приложения. Хотя проблема актуальная — в приложении поменялся 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.

Ну как проще. css селекторы приходится поддерживать вручную, вручную же обеспечивать их уникальность, и чинить после чуть ли не каждого изменения вёрстки. С семантической автогенерацией же тесты получаются куда более стабильными.


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

Компонентные тесты конечно никто не отменял :) Но они тестируют компоненты в изоляции. Взаимодействие компонентов можно протестировать только сквозными тестами, также как скажем RWD страницы. Некоторые типы тестирования, как скажем CSS regression, теоретически можно применить в компонентных тестах, но не практично.

Взаимодействие компонент проверяется тестами компонента следующего уровня.

Скачал приложение для MacOS, запускаю, и...The application “puppetry” can’t be opened.
Unsigned developer. В Security & Privacy/General, там должно быть — Puppetry заблокирован, потому как от неидентифицированного разработчика, открыть все-равно?!
support.apple.com/en-us/HT202491
Такая же ситуация на MacOS Catalina,
Именно на Каталине и проблема github.com/dsheiko/puppetry/issues/50
Как я отписал, если найти приложение в Finder, Ctrl-Click и выбрать Open — открывается и работает без проблем. На днях проверяли.
Не дописала сообщение, извините. Спасибо за инструкцию, для себя смогла так открыть только после того, как переместила и распаковала программу на рабочем столе, из раздела Загрузки открытие через Control не срабатывало.
«просто игрушка, годная лишь для простейших тестов»
Можно ли из этого приложения слазить в базу данных и продолжить тест с учетом какой-либо настройки?
Есть такой метод page.assignVarRemotely, он стучится по указанному URL, и удерживает ход выполнения тестов на паузе пока не придет ответ сервера удовлетворяющий заданному условию (или timeout). Именно таким образом я тестирую сценарии зависящие от ответа в электроной почте docs.puppetry.app/testing-techniques/testing-emails/example-with-restmail.net.
Т.е. не слазить в БД, но опросить REST метод, который лазит в БД.
Добрый день, rglab
не могли бы Вы сравнить Puppetry с Selenium IDE? Его большой плюс в возможности конвертировать записанные действия в код (python/C#) с дальнейшим выполнением на Selenium Grid.
Спасибо.
Selenium IDE (https://selenium.dev/selenium-ide/)
Плюсы:
— 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 (и тут реально много возможностей, что порой удивительно для визуальной среды)
— «печеньки»
  • — тестирование по скриншотам (как PhantomCSS)
  • — тестирование сценариев зависящих от высланных электронных писем
  • — шаблон, выражения, переменные (скажем, можно указать, что значение элемента input будет сгенерированно по критериям docs.puppetry.app/template#faker)
  • — и много других

Спасибо, за развернутый ответ!
Приложение можно в Linux установить из snap пакетов. Супер!
Спасибо за отличную программу, буду пробовать.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории