SlideShare a Scribd company logo
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Тестирование
CSS-регрессий с
Сергей Татаринцев, Яндекс
BEMup в Москве, 17 мая 2014
Обо мне
sevinf@yandex-team.ru
@SevInf
github.com/SevInf
Старший разработчик в группе разработки
интерфейсов
bit.ly/bemup-msk-gemini
Обеспечение качества кода
Стиль кода: jscs
Статический анализ: JSHint
Регрессии в JS: юнит-тесты
Регрессии в CSS: ???
Зачем автоматизировать?
Это быстрее
Это надежнее
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Чего хочется
Тестировать в разных браузерах
Скриншоты в разных состояних
Сравнивать фрагменты страницы
Эталонные скриншоты в репозитории
JavaScript
DPXDT
https://github.com/bslatkin/dpxdt
Не нужен код тестов
Нужен эталонный URL
Скриншоты всей страницы
casper.js + phantom.css
https://github.com/Huddle/
PhantomCSS
Снимает фрагменты
Тестирование различных состояний
Только в phantom.js
Huxley
https://github.com/facebook/huxley
Не нужен код тестов
Тестирование различных состояний
Скриншот всей страницы
Один бразуер
Сравнение
dpxdt phantom.css Huxley
Разные браузеры ✘ ✘ ✘
Сравнение фрагментов ✘ ✘
Скриншоты в репозитории ✘
Различные состояния ✘
JavaScript ✘ ✘
gemini
Схема работы
Тестовый набор
Состояние 1 Действия
Состояние 2 Действия
Состояние N Действия
Кнопка из bem-components
Кнопка
plain
hover Навести курсор
pressed Нажать левую кнопку
clicked Отпустить кнопку
Создание набора
var gemini = require('gemini');
!
gemini.suite('button', function(suite) {
});
Задание URL
!
suite.setUrl('/some/url');
!
Область захвата
!
suite.setCaptureElements('.button');
Захват начального состояния
suite.capture('plain');
!
Состояние с действиями
!
suite.capture('hovered', function(actions) {
});
!
Передвижение курсора
!
suite.capture('hovered', function(actions) {
actions.mouseMove('.button');
});
!
Нажатая кнопка
!
suite.capture('pressed', function(actions, find) {
actions.mouseDown(find('.button'));
});
!
Кнопка в фокусе
!
suite.capture('clicked', function(actions, find) {
actions.mouseUp(find('.button'));
});
!
before
!
suite.before(function(actions, find) {
this.button = find('.button');
});
!
Финальный вариант
var gemini = require('gemini');
!
gemini.suite('button', function() {
suite.setUrl('/some/url')
.setCaptureElements('.button')
.before(function(actions, find) {
this.button = find('.button');
})
.capture('plain')
.capture('hovered', function(actions, find) {
actions.mouseMove(this.button);
})
.capture('pressed', function(actions, find) {
actions.mouseDown(this.button);
})
.capture('clicked', function(actions, find) {
actions.mouseUp(this.button);
});
});
.gemini.yml
rootUrl: http://example.com
gridUrl: http://localhost:4444/wd/hub
browsers:
- {name: chrome, version: '33.0'}
- {name: opera, version: '12.16'}
- {name: firefox, version: '25.0'}
- {name: ie, version: '10.0'}
Демо
Полезные советы
Скриншоты - не замена юнит-тестам
Использовать статические данные
https://saucelabs.com/
Переменные среды
SAUCE_USERNAME=<USERNAME>
SAUCE_ACCESS_KEY=<ACCESS KEY>
.gemini.yml
gridUrl: http://ondemand.saucelabs.com/wd/hub
SauceConnect
https://saucelabs.com/docs/connect
<SAUCE CONNECT DIR>/bin/sc
https://travis-ci.org/
Интеграция с TravisCI
before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq -y graphicsmagick
.travis.yml
Интеграция с TravisCI
"scripts": {
"test": "gemini test"
}
package.json
SauceLabs + TravisCI
https://saucelabs.com/opensource/travis
!
Пример:
http://bit.ly/bc-gemini
Где взять?
ru.bem.info/tools/testing/gemini/
!
github.com/bem/gemini
sevinf@yandex-team.ru
@SevInf
SevInf
Сергей Татаринцев!
Яндекс
Ваш звонок очень важен для нас:	

http://bit.ly/msk-bemup-feedback

More Related Content

PDF
Тестирование CSS-регрессий с gemini – OdessaJS
PDF
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
PPTX
Автоматизированное тестирование верстки веб-сайтов, используя сравнение с диз...
PDF
Т. Черемных "Автоматизация тестирования верстки", DUMP-2014
PDF
Тестируем мобильное приложение в суровых реалиях Интернета
PPTX
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
PDF
«Тестируем веб приложения», Павел Сташевский
PPTX
(Seleniumcamp) Selenium RC for QA Engineer
Тестирование CSS-регрессий с gemini – OdessaJS
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Автоматизированное тестирование верстки веб-сайтов, используя сравнение с диз...
Т. Черемных "Автоматизация тестирования верстки", DUMP-2014
Тестируем мобильное приложение в суровых реалиях Интернета
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
«Тестируем веб приложения», Павел Сташевский
(Seleniumcamp) Selenium RC for QA Engineer

What's hot (20)

PDF
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
PPTX
Причины и способы имитации back-end'а
PPTX
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
PDF
Rebrov selenium camp2013
PPTX
GUI-автоматизация в Telerik Test Studio
PPTX
Как играть без игрока
PDF
Как мы приручили демона или процесс тестирования демонов в Badoo
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PPTX
Qa Automation - отбрасываем лишнее и тестируем суть
PPTX
Автоматизация тестирования ролей и привилегий
PDF
М. Боднарчук Современное функциональное тестирование с Codeception
PPTX
E-com UI Team workflow
ODP
Selenium на практике и подводные камни
PDF
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
PPTX
Михаил Боднарчук Современное функциональное тестирование с Codeception
PDF
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
ODP
The fast and the continuous
PDF
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
PDF
Scrum глазами тестировщика или как создать стратегию для любой задачи
PDF
Организация процесса ручного тестирования
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Причины и способы имитации back-end'а
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Rebrov selenium camp2013
GUI-автоматизация в Telerik Test Studio
Как играть без игрока
Как мы приручили демона или процесс тестирования демонов в Badoo
Как не положить тысячи серверов с помощью системы централизованного управлени...
Qa Automation - отбрасываем лишнее и тестируем суть
Автоматизация тестирования ролей и привилегий
М. Боднарчук Современное функциональное тестирование с Codeception
E-com UI Team workflow
Selenium на практике и подводные камни
«Winium — это как Selenium, только под Windows» – Глеб Головин, 2ГИС
Михаил Боднарчук Современное функциональное тестирование с Codeception
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
The fast and the continuous
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
Scrum глазами тестировщика или как создать стратегию для любой задачи
Организация процесса ручного тестирования
Ad

Viewers also liked (18)

PDF
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
PDF
Александр Тармолов "БЭМ и JavaScript: Тестирование"
PPTX
Тестирование веба без тестировщиков — успех или провал – Татьяна Рыженкова и ...
PDF
БЭМ в Мануфактуре
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
PDF
Emacs: многофункциональный комбайн
PDF
ELK: Moose-ively scaling your log system
PPTX
Опыт организации тестирования безопасности Web приложений в компании
PDF
Beyond Page Objects
PDF
Java Tools and Technologies Landscape for 2014 (image gallery)
PPTX
Тестирование уязвимостей веб приложений
PPTX
тестовые стратегии
PDF
Александр Русаков - TypeScript 2 in action
PDF
Beminar js
PPTX
Обезьянки против роботов. Часть I (TestLabs09)
PDF
Using The Page Object Pattern
PPTX
Automotive User Interface Design: Innovative UI design in a slow moving indus...
PDF
reveal.js 3.0.0
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Тестирование веба без тестировщиков — успех или провал – Татьяна Рыженкова и ...
БЭМ в Мануфактуре
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Emacs: многофункциональный комбайн
ELK: Moose-ively scaling your log system
Опыт организации тестирования безопасности Web приложений в компании
Beyond Page Objects
Java Tools and Technologies Landscape for 2014 (image gallery)
Тестирование уязвимостей веб приложений
тестовые стратегии
Александр Русаков - TypeScript 2 in action
Beminar js
Обезьянки против роботов. Часть I (TestLabs09)
Using The Page Object Pattern
Automotive User Interface Design: Innovative UI design in a slow moving indus...
reveal.js 3.0.0
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Сергей Татаринцев — Тестирование CSS-регрессий с Gemini