SlideShare a Scribd company logo
1 of 111
Download to read offline
Алексей Малейков
Разработчик в HTML Academy
2016
Радости и гадости
регрессионного
тестирования вёрстки
Задача
• Курс по основам HTML и CSS
Задача
• Курс по основам HTML и CSS
• 12 000 пользователей записались на курс
Задача
• Курс по основам HTML и CSS
• 12 000 пользователей записались на курс
• Автоматизация проверки
Найди отличия
Регрессионное тестирование
Регрессионное тестирование
Регрессионное тестирование
Интерактивные задания на сайте
Проверка
• JavaScript
Проверка
• JavaScript
• DOM
Проверка
• JavaScript
• DOM
• Computed style
Серверная проверка
• PhantomJS
Серверная проверка
• PhantomJS
• WebKit
Серверная проверка
• PhantomJS
• WebKit
• JavaScript API
Серверная проверка
• PhantomJS
• WebKit
• JavaScript API
$ phantomjs /path/to/your/script.js params
var page = require('webpage').create();
page.open(url, function(status) {
if (status === 'success') {
…
}
});
Серверная проверка
var page = require('webpage').create();
page.open(url, function(status) {
if (status === 'success') {
var result = page.evaluate(function() {
return HtmlacademyTask.runChecks();
});
console.log(result);
}
});
Серверная проверка
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.onAlert = function(msg) {
console.log(msg);
};
page.open(url, function(status) {
…
});
Серверная проверка
Испытания
Испытания
var page = require('webpage').create();
page.viewportSize = {
width: width,
height: height
};
page.open(url, function(status) {
if (status === 'success') {
page.render(output);
}
});
Проверка
ImageMagick
ImageMagick
Cреднеквадратическое
отклонение (RMSE)
ImageMagick
Cреднеквадратическое
отклонение (RMSE)
$ compare -metric RMSE image1.png image2.png diff.png
ImageMagick
Cреднеквадратическое
отклонение (RMSE)
$ compare -metric RMSE image1.png image2.png diff.png
13222.7 (0.201766)
ImageMagick
Cреднеквадратическое
отклонение (RMSE)
$ compare -metric RMSE image1.png image2.png diff.png
13222.7 (0.201766)
(1-0.201766) * 100 = ~79%
Система проверки вёрстки
Принцип работы
• Макет
Принцип работы
• Макет
• Образец вёрстки
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1
2
3
4
5
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1. Разметка
1
2
3
4
5
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1. Разметка
2. Сетка
1
2
3
4
5
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1. Разметка
2. Сетка
3. Оформление
1
2
3
4
5
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1. Разметка
2. Сетка
3. Оформление
• Проверка страницы целиком
1
2
3
4
5
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1. Разметка
2. Сетка
3. Оформление
• Проверка страницы целиком
• Скриншоты (PhantomJS)
1
2
3
4
5
Принцип работы
• Макет
• Образец вёрстки
• Проверка пяти блоков
1. Разметка
2. Сетка
3. Оформление
• Проверка страницы целиком
• Скриншоты (PhantomJS)
• Сравнение (ImageMagick)
1
2
3
4
5
Работа с архивами
– project.zip
— img/
— css/
— index.html
Работа с архивами
– project.zip
— img/
— css/
— index.html
– Мой Проект.rar
— Мой проект/
— img/
— css/
— стили.css
— project_index.html
Работа с архивами
– project.zip
— img/
— css/
— index.html
– Мой Проект.rar
— Мой проект/
— img/
— css/
— стили.css
— project_index.html
• To zip or not to zip
Работа с архивами
– project.zip
— img/
— css/
— index.html
– Мой Проект.rar
— Мой проект/
— img/
— css/
— стили.css
— project_index.html
• To zip or not to zip
• Поиск index.html
Чужая вёрстка
Чужая вёрстка
• Не знаем классов
и идентификаторов
Чужая вёрстка
• Не знаем классов
и идентификаторов
• Не знаем тегов
Чужая вёрстка
• Не знаем классов
и идентификаторов
• Не знаем тегов
• Знаем только общую структуру
Чужая вёрстка
Чужая вёрстка
Чужая вёрстка
body > *:nth-child(N) {
…
}
Поиск нужных блоков
Поиск нужных блоков
body > *:nth-child(2) {
box-shadow: inset 0 0 0 6px #000000;
}
Поиск нужных блоков
body > *:nth-child(2) {
box-shadow: inset 0 0 0 6px #000000;
}
body > *:not(:nth-child(2)) {
visibility: hidden;
}
Поиск нужных блоков
body > *:nth-child(2) {
box-shadow: inset 0 0 0 6px #000000;
}
body > *:not(:nth-child(2)) {
display: none;
}
var page = require('webpage').create();
page.open(url, function(status) {
if (status === 'success') {
page.evaluate(function() {
…
});
page.render(output);
}
});
Скриншоты блоков
1. Разметка
Проверка разметки
• Получаем чистый HTML
Проверка разметки
• Получаем чистый HTML
• Вырезаем все стили
Проверка разметки
• Получаем чистый HTML
• Вырезаем все стили
• Частично проверяем семантику
var page = require('webpage').create();
page.onResourceRequested = function(data, request) {
if ((/.+.css$/gi).test(data['url'])) {
request.abort();
}
};
page.open(url, function(status) {
…
});
Проверка разметки
page.evaluate(function() {
var links = document.querySelectorAll('[rel=stylesheet]');
[].forEach.call(links, function(element) {
element.parentNode.removeChild(element);
});
});
Проверка разметки
page.evaluate(function() {
var links = document.querySelectorAll('[rel=stylesheet]');
[].forEach.call(links, function(element) {
element.parentNode.removeChild(element);
});
});
Проверка разметки
var styles = document.querySelectorAll('style');
[].forEach.call(styles, function(element) {
element.parentNode.removeChild(element);
});
page.evaluate(function() {
var links = document.querySelectorAll('[rel=stylesheet]');
[].forEach.call(links, function(element) {
element.parentNode.removeChild(element);
});
});
Проверка разметки
var styles = document.querySelectorAll('style');
[].forEach.call(styles, function(element) {
element.parentNode.removeChild(element);
});
var attrs = document.querySelectorAll('[style]');
[].forEach.call(attrs, function(element) {
element.removeAttribute('style');
});
Проверка разметки
Проверка разметки
Особенности разметки
Особенности разметки
<table>
<tr>
<td>Название</td>
<td>Длительность</td>
<td>Описание</td>
</tr>
<tr>
<td>Дневное обучение</td>
<td>4 года</td>
<td>Наиболее интенсивный вариант обучения, для тех, кто
не терпит компромиссов ни в чем</td>
</tr>
</table>
Особенности разметки
<table>
<thead>
<tr>
<td>Название</td>
<td>Длительность</td>
<td>Описание</td>
</tr>
</thead>
<tbody>
<tr>
<td>Дневное обучение</td>
<td>4 года</td>
<td>Наиболее интенсивный вариант обучения, для тех,
кто не терпит компромиссов ни в чем</td>
</tr>
</tbody>
</table>
Особенности разметки
Особенности разметки
2. Сетки
Поиск сеток
• Выделяем структурные блоки
Поиск сеток
• Выделяем структурные блоки
• Скрываем все декоративные
элементы
// первый уровень
body > * {
background: #333333;
box-shadow: inset 0 0 0 4px #cccccc;

}
Поиск сеток
// первый уровень
body > * {
background: #333333;
box-shadow: inset 0 0 0 4px #cccccc;

}
body > *::before,
body > *::after {
visibility: hidden;
}
Поиск сеток
Поиск сеток
// второй уровень
body > * > * {
background: #660000;
box-shadow: inset 0 0 0 4px #ff9999;

}
Поиск сеток
// второй уровень
body > * > * {
background: #660000;
box-shadow: inset 0 0 0 4px #ff9999;

}
body > * > *::before,
body > * > *::after {
visibility: hidden;
}
Поиск сеток
// третий уровень
body > * > * > * {
background: #000066;
box-shadow: inset 0 0 0 4px #9999ff;

}
Поиск сеток
// третий уровень
body > * > * > * {
background: #000066;
box-shadow: inset 0 0 0 4px #9999ff;

}
body > * > * > *::before,
body > * > * > *::after {
visibility: hidden;
}
Поиск сеток
// третий уровень
body > * > * > * {
background: #000066;
box-shadow: inset 0 0 0 4px #9999ff;

}
body > * > * > *::before,
body > * > * > *::after {
visibility: hidden;
}
// все уровни глубже
body > * > * > * > * {
visibility: hidden;
}
// убираем весь текст
body, body * {
color: transparent;
}
Поиск сеток
Поиск сеток
Поиск сеток
Поиск сеток
Поиск сеток
3. Оформление
Проверка оформления
Оригинал
Проверка оформления
Результат
Проверка оформления
Уровень совпадения — 87%
Различия в цветах
#6451d5 #7232d8
Шрифты
В поисках идеала
Выбор есть, даже когда нет выбора
1. Разметка
Выбор есть, даже когда нет выбора
2. Сетка
Выбор есть, даже когда нет выбора
3. Оформление
Наши требования
• 15 из 17 проверок
• 95% совпадения
1
2
3
4
5
Наши требования
• 12 из 17 проверок
• 90% совпадения
1
2
3
4
5
Результаты
• 12 000 записались на курс
• 5 700 начали проходить
• 1 000 успешно прошли курс
• 830 приступили к итоговому испытанию
• 520 успешно прошли итоговое испытание
• 10 итоговых испытаний на 100%
Регрессионное тестирование
• SlimerJS

slimerjs.org
Регрессионное тестирование
• SlimerJS

slimerjs.org
• CasperJS

casperjs.org
Регрессионное тестирование
• SlimerJS

slimerjs.org
• CasperJS

casperjs.org
• PhantomCSS

github.com/Huddle/PhantomCSS
Регрессионное тестирование
• SlimerJS

slimerjs.org
• CasperJS

casperjs.org
• PhantomCSS

github.com/Huddle/PhantomCSS
• BackstopJS

garris.github.io/BackstopJS/
Регрессионное тестирование
• SlimerJS

slimerjs.org
• CasperJS

casperjs.org
• PhantomCSS

github.com/Huddle/PhantomCSS
• BackstopJS

garris.github.io/BackstopJS/
• Gemini

gemini-testing.github.io/gemini/
Вопросы?
htmlacademy.ruhtmlacademy htmlacademy_ru

More Related Content

What's hot

М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
JDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяJDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяSQALab
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстромRoman Dvornov
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb SpockBohdan Danyliuk
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?SQALab
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Yandex
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Fwdays
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"Roman Dvornov
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»Roman Dvornov
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.Igor Shkulipa
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQAFest
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
 

What's hot (20)

М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
JDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажетсяJDI: Автоматизировать проще, чем кажется
JDI: Автоматизировать проще, чем кажется
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
Быстро о быстром
Быстро о быстромБыстро о быстром
Быстро о быстром
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Selenium, а давай подождем?
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
 
DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"DOM-шаблонизаторы – не только "быстро"
DOM-шаблонизаторы – не только "быстро"
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Basis.js – «под капотом»
Basis.js – «под капотом»Basis.js – «под капотом»
Basis.js – «под капотом»
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
 
Не бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их многоНе бойся, это всего лишь данные... просто их много
Не бойся, это всего лишь данные... просто их много
 

Viewers also liked

Electrónica y Drones
Electrónica y DronesElectrónica y Drones
Electrónica y DronesRene Vega
 
Las dos caras de la crisis paera el bolsillo (Europa sur)
Las dos caras de la crisis paera el bolsillo (Europa sur)Las dos caras de la crisis paera el bolsillo (Europa sur)
Las dos caras de la crisis paera el bolsillo (Europa sur)EAE Business School
 
Vivir con 645,3 euros (La opinión de a coruña)
Vivir con 645,3 euros (La opinión de a coruña)Vivir con 645,3 euros (La opinión de a coruña)
Vivir con 645,3 euros (La opinión de a coruña)EAE Business School
 
Delivering major projects in government presentation, Joanna Lewis & Chris Ba...
Delivering major projects in government presentation, Joanna Lewis & Chris Ba...Delivering major projects in government presentation, Joanna Lewis & Chris Ba...
Delivering major projects in government presentation, Joanna Lewis & Chris Ba...Association for Project Management
 
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с GeminiСергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с GeminiYandex
 
The synergy between benefits management and change management, workshop 2, Ne...
The synergy between benefits management and change management, workshop 2, Ne...The synergy between benefits management and change management, workshop 2, Ne...
The synergy between benefits management and change management, workshop 2, Ne...Association for Project Management
 
Sinefa - It's about time
Sinefa - It's about timeSinefa - It's about time
Sinefa - It's about timeChris Siakos
 

Viewers also liked (14)

Electrónica y Drones
Electrónica y DronesElectrónica y Drones
Electrónica y Drones
 
Dressing the wheel
Dressing the wheelDressing the wheel
Dressing the wheel
 
Las dos caras de la crisis paera el bolsillo (Europa sur)
Las dos caras de la crisis paera el bolsillo (Europa sur)Las dos caras de la crisis paera el bolsillo (Europa sur)
Las dos caras de la crisis paera el bolsillo (Europa sur)
 
CV CC
CV CCCV CC
CV CC
 
Farmacia
FarmaciaFarmacia
Farmacia
 
Vivir con 645,3 euros (La opinión de a coruña)
Vivir con 645,3 euros (La opinión de a coruña)Vivir con 645,3 euros (La opinión de a coruña)
Vivir con 645,3 euros (La opinión de a coruña)
 
Anime lml
Anime lmlAnime lml
Anime lml
 
Disturbance and Ecology of Coastal Plain Forests
Disturbance and Ecology of Coastal Plain ForestsDisturbance and Ecology of Coastal Plain Forests
Disturbance and Ecology of Coastal Plain Forests
 
Delivering major projects in government presentation, Joanna Lewis & Chris Ba...
Delivering major projects in government presentation, Joanna Lewis & Chris Ba...Delivering major projects in government presentation, Joanna Lewis & Chris Ba...
Delivering major projects in government presentation, Joanna Lewis & Chris Ba...
 
Tidal zones notes ppt
Tidal zones notes pptTidal zones notes ppt
Tidal zones notes ppt
 
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с GeminiСергей Татаринцев — Тестирование CSS-регрессий с Gemini
Сергей Татаринцев — Тестирование CSS-регрессий с Gemini
 
The synergy between benefits management and change management, workshop 2, Ne...
The synergy between benefits management and change management, workshop 2, Ne...The synergy between benefits management and change management, workshop 2, Ne...
The synergy between benefits management and change management, workshop 2, Ne...
 
Industrial tour
Industrial tourIndustrial tour
Industrial tour
 
Sinefa - It's about time
Sinefa - It's about timeSinefa - It's about time
Sinefa - It's about time
 

Similar to Регрессионное тестирование верстки

Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в DjangoMoscowDjango
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Автоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреАвтоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреAlexey Simonenko
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерRoman Dvornov
 
PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDaysdavertmik
 
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2GoQA
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
Psgi app
Psgi appPsgi app
Psgi appund3f
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupalYury Glushkov
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 

Similar to Регрессионное тестирование верстки (20)

Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в Django
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Автоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игреАвтоматизация разработки курсов: путь от рутины к игре
Автоматизация разработки курсов: путь от рутины к игре
 
Unit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьерUnit-тестирование скриншотами: преодолеваем звуковой барьер
Unit-тестирование скриншотами: преодолеваем звуковой барьер
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDays
 
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
СВЯТ ЛОГИН «Як провести пошук на xss атаку» Online QADay 2020 #2
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
Psgi app
Psgi appPsgi app
Psgi app
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Jquery selector optimization in drupal
Jquery selector optimization in drupalJquery selector optimization in drupal
Jquery selector optimization in drupal
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 

Регрессионное тестирование верстки