SlideShare a Scribd company logo
Тестирование
CSS-регрессий с gemini
Сергей Татаринцев, Яндекс
OdessaJS, 5-6 июля 2014
Библиотеки
4 библиотеки
62 блока
Более 15 браузеров в поддержке
Преимущественно ручное тестирования
2
Тестировать вручную — долго
и ненадежно
3
4
Автоматизация
jscs
5
Регрессии в СSS – ???
6
7
Писать обычные тесты?
8
getComputedCss(block).borderWidth.should.be('2px')
9
border box-shadow
Чего хочется?
10
Тестировать в разных
браузерах
11
Браузер, в котором мы тестируем
12
Все остальные
13
Тестировать фрагменты
страниц
14
Страница
15
Много страниц
16
Поломка
✘
17
Все плохо
✘ ✘ ✘ ✘ ✘
✘ ✘ ✘ ✘ ✘
✘ ✘ ✘ ✘ ✘
✘ ✘ ✘ ✘ ✘
18
Плохо не все
✘
✓
✓✓
19
Динамический контент
20
Нельзя тестировать ничего
21
Нельзя тестировать
Что-то протестировать можно
22
Нельзя тестировать
Можно тестировать
Можно	

тестировать
Можно тестировать
Тестирование в различных
состояниях
23
Кнопка из bem-components
24
Эталонные скриншоты хранить
в репозитории
25
Это быстрее
26
git checkout long-time-ago
27
28
Существующие
инструменты
29
DPXDT
github.com/bslatkin/dpxdt
Не нужен код тестов
Нужен эталонный URL
Скриншоты всей страницы
В начальном состоянии
30
casper.js + phantom.css
github.com/Huddle/PhantomCSS
Снимает фрагменты
Тестирование различных состояний
Только в phantom.js
31
Huxley
github.com/facebook/huxley
Не нужен код тестов
Тестирование различных состояний
Скриншот всей страницы
Один бразуер
32
Сравнение
dpxdt phantom.css Huxley
Разные браузеры ✘ ✘ ✘
Сравнение фрагментов ✘ ✘
Скриншоты в репозитории ✘
Различные состояния ✘
JavaScript ✘ ✘
33
gemini
Наш opensource инструмент для тестирования
34
Состоит из
35
Схема работы
Тестовый набор
Состояние 1 Действия
Состояние 2 Действия
Состояние N Действия
36
Кнопка
plain
hover Навести курсор
pressed Нажать левую кнопку
focused Отпустить кнопку
37
Создание набора
var gemini = require('gemini');
!
gemini.suite('button', function(suite) {
!
});
38
Задание URL
!
suite.setUrl('/some/url');
39
Область захвата
suite.setCaptureElements('.button');
40
Захват начального состояния
suite.capture('plain');
41
Состояние с действиями
suite.capture('hovered', function(actions) {
!
});
42
Действия
suite.capture('hovered', function(actions) {
actions.mouseMove('.button');
});
43
find
suite.capture('pressed', function(actions, find) {
actions.mouseDown(find('.button'));
});
44
before
suite.before(function(actions, find) {
this.button = find('.button');
});
45
Финальный вариант
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);
});
46
.gemini.yml
rootUrl: http://example.com
gridUrl: http://localhost:4444/wd/hub
browsers:
chrome33:
browserName: chrome
version: '33.0'
opera12:
browserName: opera
version: '12.16'
firefox25:
browserName: firefox
version: '25.0'
ie9:
browserName: internet explorer
version: '9.0'
47
Демо
48
Интеграция
49
saucelabs.com
50
Переменные среды
SAUCE_USERNAME=<USERNAME>
SAUCE_ACCESS_KEY=<ACCESS KEY>
51
.gemini.yml
gridUrl: http://ondemand.saucelabs.com/wd/hub
52
SauceConnect
saucelabs.com/docs/connect
<SAUCE CONNECT DIR>/bin/sc
53
travis-ci.org
54
Интеграция с TravisCI
before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq -y graphicsmagick
.travis.yml
55
Интеграция с TravisCI
"scripts": {
"test": "gemini test"
}
package.json
56
SauceLabs + TravisCI
saucelabs.com/opensource/travis
Пример:
github.com/SevInf/OdessaJS-gemini
57
Полезные советы
Скриншоты — не замена юнит-тестам
Использовать статические данные
58
Где взять?
ru.bem.info/tools/testing/gemini/
!
github.com/bem/gemini
59
sevinf@yandex-team.ru
@SevInf
SevInf
Сергей Татаринцев!
Яндекс
60

More Related Content

PDF
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
PDF
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
PDF
Тестируем мобильное приложение в суровых реалиях Интернета
PDF
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
PPTX
E-com UI Team workflow
PPTX
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
PDF
Как мы приручили демона или процесс тестирования демонов в Badoo
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
Тестирование CSS-регрессий с Gemini — Сергей Татаринцев
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Тестируем мобильное приложение в суровых реалиях Интернета
Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"
E-com UI Team workflow
Как улучшить тесты на Selenium с помощью "визуального тестирования"?
Как мы приручили демона или процесс тестирования демонов в Badoo
Как не положить тысячи серверов с помощью системы централизованного управлени...

What's hot (20)

PPTX
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
PDF
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
PDF
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
PDF
Rebrov selenium camp2013
PPTX
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
PPTX
Причины и способы имитации back-end'а
PDF
М. Боднарчук Современное функциональное тестирование с Codeception
PDF
Reliable DOM testing with browser-monkey
PPTX
Михаил Боднарчук Современное функциональное тестирование с Codeception
PPTX
Как играть без игрока
PPTX
Gradle. Новый уровень автоматизации для Android
PDF
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
PDF
JavaScript завтра / Сергей Рубанов (Exante Limited)
PDF
QA MeetUp - Евгений Сабиров: "Рай тестировщика - миф или реальность?"
PDF
QAradise, Евгений Сабиров, Хост
PDF
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
ODP
The fast and the continuous
PDF
Scrum глазами тестировщика или как создать стратегию для любой задачи
PPTX
Qa Automation - отбрасываем лишнее и тестируем суть
PPTX
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Тестирование web-приложений на базе технологий Ruby/Cucumber/Watir Webdriver
Rebrov selenium camp2013
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
Причины и способы имитации back-end'а
М. Боднарчук Современное функциональное тестирование с Codeception
Reliable DOM testing with browser-monkey
Михаил Боднарчук Современное функциональное тестирование с Codeception
Как играть без игрока
Gradle. Новый уровень автоматизации для Android
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
JavaScript завтра / Сергей Рубанов (Exante Limited)
QA MeetUp - Евгений Сабиров: "Рай тестировщика - миф или реальность?"
QAradise, Евгений Сабиров, Хост
Способы оптимизации ручного тестирования веб-сайтов в мобильных браузерах
The fast and the continuous
Scrum глазами тестировщика или как создать стратегию для любой задачи
Qa Automation - отбрасываем лишнее и тестируем суть
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Ad

Viewers also liked (15)

PDF
БЭМ в Мануфактуре
PDF
bem-components — от методологии до full stack платформы
PDF
Преимущества компонентной разработки для тестирования интерфейсов
PDF
От БЭМ-методологии до Мануфактуры проектов
PDF
BEM for Javascript at CampJS III
PDF
Вебинар по БЭМ: верстаем веб-страницу
PDF
Вебинар по БЭМ: сборка и оптимизация проекта
PDF
Beminar js
PDF
Сайт с нуля на полном стеке БЭМ-технологий
PDF
Maintainable Frontend Development with BEM
PDF
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
PPTX
тестовые стратегии
PDF
Александр Русаков - TypeScript 2 in action
PDF
reveal.js 3.0.0
БЭМ в Мануфактуре
bem-components — от методологии до full stack платформы
Преимущества компонентной разработки для тестирования интерфейсов
От БЭМ-методологии до Мануфактуры проектов
BEM for Javascript at CampJS III
Вебинар по БЭМ: верстаем веб-страницу
Вебинар по БЭМ: сборка и оптимизация проекта
Beminar js
Сайт с нуля на полном стеке БЭМ-технологий
Maintainable Frontend Development with BEM
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
тестовые стратегии
Александр Русаков - TypeScript 2 in action
reveal.js 3.0.0
Ad

Тестирование CSS-регрессий с gemini – OdessaJS