SlideShare a Scribd company logo
Тестирование 
CSS-регрессий с gemini 
Сергей Татаринцев, Яндекс 
Я.Cубботник в Киеве, 22 ноября
О чем рассказ 
Зачем тестировать верстку? 
Как это делать? 
Какие есть инструменты для этого? 
Почему мы сделали свой? 
Как им пользоваться? 
Как считать покрытие? 
2
Компонентный веб 
3
Библиотеки 
4 библиотеки 
62 блока 
Более 15 браузеров в поддержке 
Преимущественно ручное тестирование 
4
Тестировать вручную — 
долго и ненадежно 
5
6
Автоматизация 
jscs 
7
Регрессии в СSS – ??? 
8
9
Писать обычные тесты? 
10 
getComputedCss(block).borderWidth.should.be('2px')
11 
border box-shadow
Чего хочется? 
12
Тестировать в разных 
браузерах 
13
Браузер, в котором мы 
14
Все остальные 
15
Тестировать фрагменты 
страниц 
16
Страница 
17
Много страниц 
18
Поломка 
✘ 
19
Все плохо 
✘ ✘ ✘ ✘ ✘ 
✘ ✘ ✘ ✘ ✘ 
✘ ✘ ✘ ✘ ✘ 
✘ ✘ ✘ ✘ ✘ 
20
Плохо не все 
✘ 
✓ ✓ 
✓ 
21
Динамический контент 
22
Нельзя тестировать ничего 
Нельзя тестировать 
23
Что-то протестировать 
Нельзя тестировать 
24 
Можно тестировать 
Можно 
тестировать 
Можно тестировать
Тестирование в различных 
состояниях 
25
Просто ссылка 
Ссылка Ссылка 
Ссылка Ссылка 
26
Эталонные скриншоты 
хранить в репозитории 
27
Это быстрее 
28
git checkout long-time-ago 
29
30
Существующие 
инструменты 
31
DPXDT 
github.com/bslatkin/dpxdt 
Не нужен код тестов 
Нужен эталонный URL 
Скриншоты всей страницы 
В начальном состоянии 
32
casper.js + phantom.css 
github.com/Huddle/PhantomCSS 
Снимает фрагменты 
Тестирование различных 
состояний 
Только в phantom.js 
33
Huxley 
github.com/facebook/huxley 
Не нужен код тестов 
Тестирование различных состояний 
Скриншот всей страницы 
Один браузер 
34
Сравнение 
dpxdt phantom.css Huxley 
Разные браузеры ✘ ✘ ✘ 
Сравнение фрагментов ✘ ✘ 
Скриншоты в репозитории ✘ 
Различные состояния ✘ 
JavaScript ✘ ✘ 
35
WebDriverCSS 
Выпущен одновременно с нашим инструментом 
Нет «умного» diff 
Нет подсчета покрытия 
Нет GUI 
Не учитывает outline и box-shadow 
Есть возможность исключить область 
36
gemini 
Наш opensource инструмент для 
37
Состоит из 
38
Diff изображений 
39 
rgb(127, 127, 255) rgb(125, 125, 255)
Diff изображений 
40 
Одинаковые картинки
Для работы с 
41 
github.com/bem/png-img 
github.com/SevInf/looks-same
Работа с gemini 
42
Схема работы 
Тестовый набор 
Состояние 1 Действия 
Состояние 2 Действия 
Состояние N Действия 
43
Текстовое 
поле 
plain 
focused Нажать левую кнопку 
text Ввести текст 
44
Создание набора 
var gemini = require('gemini'); 
gemini.suite('input', function(suite) { 
}); 
45
Задание URL 
suite.setUrl('/some/url'); 
46
Область захвата 
suite.setCaptureElements('.text-field'); 
47
Захват начального состояния 
suite.capture('plain'); 
48
Состояние с действиями 
suite.capture('focus', function(actions) { 
}); 
49
Действия 
suite.capture('focus', function(actions) { 
actions.click('.text-field'); 
}); 
50
find 
suite.capture('text', function(actions, find) { 
actions.sendKeys(find(‘.text-field’), 'Hi!'); 
}); 
51
before 
suite.before(function(actions, find) { 
this.field = find('.text-field'); 
}); 
52
Финальный вариант 
var gemini = require('gemini'); 
gemini.suite('text-field', function() { 
suite.setUrl('/some/url') 
.setCaptureElements('.text-field') 
.before(function(actions, find) { 
this.field = find('.text-field'); 
}) 
.capture('plain') 
.capture('focus', function(actions, find) { 
actions.click(this.field); 
}) 
.capture('text', function(actions, find) { 
actions.sendKeys(this.field, 'Hi!'); 
}); 
}); 
53
Демо 
54
Кнопка 
55
CSS Кнопки 
button { 
background: linear-gradient(...); 
border: 3px solid #cccccc; 
line-height: 31px; 
font-size: 15px; 
outline: 0; 
} 
button:hover { 
border-color: #999999; 
} 
button:active { 
background: linear-gradient(...); 
border-color: #999999; 
} 
56
gather 
57
Правка 
button { 
background: linear-gradient(...); 
border: 3px solid #cccccc; 
border: 0; 
box-shadow: 0 0 0 3px solid #cccccc; 
line-height: 31px; 
font-size: 15px; 
outline: 0; 
} 
button:hover { 
border-color: #999999; 
} 
button:active { 
background: linear-gradient(...); 
border-color: #999999; 
} 
58
test 
59
html-отчет 
60
Исправление 
button:hover { 
box-shadow: 0 0 0 3px solid #999999; 
} 
button:active { 
background: linear-gradient(...); 
box-shadow: 0 0 0 3px solid #999999; 
} 
61
test (снова) 
62
Красная кнопка 
63
GUI 
64
Реальный пример 
github.com/bem/bem-components/ 
65
Покрытие кода 
66
CSS 
.first { 
… 
} 
.second { 
… 
} 
.third { 
… 
} 
67
Пример 
68 
First Second 
Third
Пример 
69 
First Second 
Third
Пример 
70 
First Second 
Third
Отчет 
.first { 
… 
} 
71 
.second { 
… 
} 
.third { 
… 
}
Где взять? 
ru.bem.info/tools/testing/gemini/ 
github.com/bem/gemini 
72
Сергей Татаринцев 
Яндекс 
@SevInf 
SevInf 
sevinf@yandex-team.ru 
73

More Related Content

PDF
Тестирование CSS-регрессий с gemini – OdessaJS
SevInf
 
PDF
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Yandex
 
PPTX
Автоматизированное тестирование верстки веб-сайтов, используя сравнение с диз...
SQALab
 
PDF
Тестируем мобильное приложение в суровых реалиях Интернета
SQALab
 
PDF
Т. Черемных "Автоматизация тестирования верстки", DUMP-2014
it-people
 
PDF
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Yandex
 
PPTX
E-com UI Team workflow
Aleksey Tabakman
 
PPTX
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 
Тестирование CSS-регрессий с gemini – OdessaJS
SevInf
 
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Yandex
 
Автоматизированное тестирование верстки веб-сайтов, используя сравнение с диз...
SQALab
 
Тестируем мобильное приложение в суровых реалиях Интернета
SQALab
 
Т. Черемных "Автоматизация тестирования верстки", DUMP-2014
it-people
 
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
Yandex
 
E-com UI Team workflow
Aleksey Tabakman
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
SQALab
 

What's hot (20)

PDF
«Тестируем веб приложения», Павел Сташевский
DevDay
 
PDF
Rebrov selenium camp2013
Andrey Rebrov
 
PDF
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
SQALab
 
PDF
М. Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
PDF
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
 
PPTX
Михаил Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
PPTX
(Seleniumcamp) Selenium RC for QA Engineer
Yan Alexeenko
 
PDF
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Alex Mikitenko
 
PPTX
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Oksana Avchinnikova
 
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
PPTX
Причины и способы имитации back-end'а
Oksana Avchinnikova
 
PPTX
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
QADay
 
PPTX
Как играть без игрока
SQALab
 
PPT
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Andrey Rebrov
 
PDF
JavaScript завтра / Сергей Рубанов (Exante Limited)
Ontico
 
PPTX
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
SQALab
 
PDF
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
Badoo Development
 
PPTX
Gradle. Новый уровень автоматизации для Android
SQALab
 
PPTX
Full stack веб-разработка используя C# и WebAssembly
Andrei Amialchenia
 
ODP
Selenium на практике и подводные камни
SQALab
 
«Тестируем веб приложения», Павел Сташевский
DevDay
 
Rebrov selenium camp2013
Andrey Rebrov
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
SQALab
 
М. Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Albina Tiupa
 
(Seleniumcamp) Selenium RC for QA Engineer
Yan Alexeenko
 
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Alex Mikitenko
 
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Oksana Avchinnikova
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
Причины и способы имитации back-end'а
Oksana Avchinnikova
 
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
QADay
 
Как играть без игрока
SQALab
 
Автоматизируйте это немедленно или коллекция инструментов автотестирования с ...
Andrey Rebrov
 
JavaScript завтра / Сергей Рубанов (Exante Limited)
Ontico
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
SQALab
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
Badoo Development
 
Gradle. Новый уровень автоматизации для Android
SQALab
 
Full stack веб-разработка используя C# и WebAssembly
Andrei Amialchenia
 
Selenium на практике и подводные камни
SQALab
 
Ad

Similar to Тестирование CSS-регрессий с Gemini — Сергей Татаринцев (17)

PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Roman Dvornov
 
PDF
Преимущества компонентной разработки для тестирования интерфейсов
Yandex
 
PDF
Библиотека bem-components — Ангелина Сидорцова, Яндекс
Yandex
 
PDF
Sergii Puzankov «UI Regression Testing with "Gemini"»
LogeekNightUkraine
 
PDF
2014 Jeeconf - Geb Spock
Bohdan Danyliuk
 
PPTX
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Ontico
 
PPTX
Gemini presentation
Artem Chechoro
 
PDF
SPA инструменты
Roman Dvornov
 
PDF
Тестирование безDOMных объектов
SQALab
 
PDF
Layout testing with galen framework selenium camp
anna_chernysheva
 
PDF
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Yandex
 
PDF
Автоматизация разработки курсов: путь от рутины к игре
Alexey Simonenko
 
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
PDF
Тестируй это / Виктор Русакович (GP Solutions)
Ontico
 
PDF
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
7bits
 
PDF
Cтажировка 2016-08-02 02 Юлия Ашаева. Инструменты тестировщика
SmartTools
 
PDF
Mobile Saturday. Тема 4. Автоматизация тестирования верстки (Александр Хотем...
GoIT
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Roman Dvornov
 
Преимущества компонентной разработки для тестирования интерфейсов
Yandex
 
Библиотека bem-components — Ангелина Сидорцова, Яндекс
Yandex
 
Sergii Puzankov «UI Regression Testing with "Gemini"»
LogeekNightUkraine
 
2014 Jeeconf - Geb Spock
Bohdan Danyliuk
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Ontico
 
Gemini presentation
Artem Chechoro
 
SPA инструменты
Roman Dvornov
 
Тестирование безDOMных объектов
SQALab
 
Layout testing with galen framework selenium camp
anna_chernysheva
 
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Yandex
 
Автоматизация разработки курсов: путь от рутины к игре
Alexey Simonenko
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
Тестируй это / Виктор Русакович (GP Solutions)
Ontico
 
Стажировка-2015. Разработка. Занятие 13. Сборка фронтенда
7bits
 
Cтажировка 2016-08-02 02 Юлия Ашаева. Инструменты тестировщика
SmartTools
 
Mobile Saturday. Тема 4. Автоматизация тестирования верстки (Александр Хотем...
GoIT
 
Ad

More from Yandex (20)

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

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