SlideShare une entreprise Scribd logo
1  sur  20
МОТИВАЦИЯ
• Ваши автотесты постоянно валятся без
видимых причин
• Ваше приложение постоянно что-то
подгружает втихаря
• Ваше приложение не ожидает, что по
нему будут слишком уж быстро кликать
• Ваши автотесты проходят настолько
быстро, что вы не успеваете попить
кофе и хорошенько побраузать
ПРИМЕНИМОСТЬ
Используйте паттерн «Сон», чтобы:
• Подождать, пока какой-либо элемент появится на
странице
• Подождать, пока элемент исчезнет
• Подождать, пока у элемента изменится какой-нибудь
атрибут
• Подождать на случай, если элемент может появиться,
а может и нет
• Подождать, потому что иначе приложение тупо рухнет
• Просто подождать
СТРУКТУРА
УЧАСТНИКИ
• SleepService – «сервис сна»:
- определяет операцию sleep(), которая
позволяет осуществить процедуру ожидания.
Альтернативные наименования: pause(), wait() и т.п.
ОТНОШЕНИЯ
SleepService, как правило, не имеет смысла выделять в
отдельный класс. Вполне достаточно будет добавить
его функциональность в один или несколько из уже
существующих утилитных классов (возможно даже, с
применением интерфейса или абстрактного класса
CanSleep).
Клиенты получают доступ к процедуре сна через вызов
метод sleep().
РЕЗУЛЬТАТЫ
• Легко добавить ожидание в любой точке кода
• Любой компонент может при необходимости
приостановить свое выполнение
• Вызываемые автотестом методы исполняются
обстоятельно и без спешки
• Глядя на исполняющийся тест, можно по крайней
мере понимать, что он делает, и при этом успевать
заниматься прочими активностями
• Общее время выполнения тестовой сюиты
незначительно увеличивается за счет повышения
надежности тестов
РЕАЛИЗАЦИЯ
При реализации паттерна «Сон» необходимо рассмотреть
следующие вопросы:
• Сон должен блокировать выполнение теста
• Время сна должно быть можно конфигурировать
• Но должно быть можно инициировать сон и просто так,
не заморачиваясь на таймаутах
• Процедура сна должна быть масштабируемой
• В случае, если во время сна что-то пошло не так, об
этом надо куда-то сообщить
• Но в некоторых случаях можно особо из-за этого не
напрягаться
Простейшая реализация:
public static void sleep(long timeout) {
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Плюсы: просто и элегантно.
Минусы: может засорять лог стектрейсами. Все равно
никто не знает, что с ними делать.
ПРИМЕРЫ КОДА
Улучшенная реализация:
public static void sleep(long timeout) {
try {
Thread.sleep(timeout);
} catch (InterruptedException e) { }
}
Плюсы: еще проще и элегантнее.
Минусы: отсутствуют.
ПРИМЕРЫ КОДА
ПРИМЕРЫ КОДА
Продвинутая реализация с генерацией исключения:
public static void sleep(long timeout) {
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
}
Плюсы: показывает, что вы не какие-нибудь там и умеете
генерировать исключения. Обратите внимание, блок throws не
требуется, так как это RuntimeException!
Минусы: исключение нужно где-то как-то обработать.
ПРИМЕРЫ КОДА
Продвинутая реализация с логированием предупреждения:
public static void sleep(long timeout) {
try {
Thread.sleep(timeout);
} catch (InterruptedException e) {
LOGGER.warn("sleep() method was interrupted.", e);
}
}
Плюсы: обработка исключения на более высоком уровне больше не требуется!
Минусы: нужно инициализировать логгер. Засоряет лог предупреждениями,
которые все равно никто не читает.
ПРИМЕРЫ КОДА
Продвинутая реализация с таймаутом по умолчанию:
private static final long DEFAULT_TIMEOUT = 15000;
public static void sleep() {
sleep(DEFAULT_TIMEOUT);
}
Плюсы: не надо думать о величине таймаута.
Минусы: отсутствуют.
МАСШТАБИРУЕМОСТЬ
Иногда необходимо выполнить ожидание в течение
нестандартного отрезка времени. Как же сделать, чтобы
процедура сна была масштабируемой?
public void clientMethod() {
…
SleepService.sleep(sleepTime * 8);
…
}
Это решение в лоб, очевидно, не годится, так как неприменимо для
случая вызова метода sleep() без параметров. Как же быть?
МАСШТАБИРУЕМОСТЬ
Все очень просто!
public void clientMethod() {
…
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
SleepService.sleep(sleepTime);
…
}
АЛЬТЕРНАТИВЫ
Рассмотрим другие, неправильные, альтернативы решения
проблемы:
• [Решение] Реализовать процедуру «поллинга», т.е.
опроса элементов в цикле на предмет достижения
требуемого условия.
• [Ответ] Но это же неэффективно! Вместо того, чтобы
спокойно поспать, автотест должен постоянно
обрабатывать какие-то инструкции, делать запросы,
анализировать результаты и т.п. Все это негативно
сказывается на сроке службы процессора. Кроме того, в
этом случае автотест не полностью эмулирует действия
пользователя, который, как известно, никакие элементы
не опрашивает, а тупо залипает в экран, пока страница
грузится. Именно эту активность пользователя и
эмулирует шаблон проектирования «Сон».
АЛЬТЕРНАТИВЫ
• [Решение] Попросить разработчиков встроить
механизмы синхронизации загрузки страниц и
защиты от так называемого «happy clicking».
• [Ответ] Непрофессионально! Вы - автоматизаторы
тестирования, а не какие-нибудь там молокососы,
бегающие с просьбами к разработчикам. Вы вполне в
состоянии справиться с проблемой без постороннего
вмешательства.
АЛЬТЕРНАТИВЫ
• [Решение] Больше работать, меньше браузать и пить
кофе.
• [Ответ] Ха. Ха ха. Ха ха ха ха ха.
ТОЛЬКО JAVA?
НЕТ!
Шаблон «Сон» можно реализовать на любом языке
программирования!
• C#: System.Threading.Thread.Sleep(5000);
• Ruby: sleep 5
• Python: time.sleep(5)
• QTP (VBScript): Wait 5
ВОПРОСЫ?
=)

Contenu connexe

Tendances

Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?SQALab
 
Фреймворк для регрессионного тестирования на основе WebDriver
Фреймворк для регрессионного тестирования на основе WebDriverФреймворк для регрессионного тестирования на основе WebDriver
Фреймворк для регрессионного тестирования на основе WebDriverautomated-testing.info
 
Итак, вы тимлид
Итак, вы тимлидИтак, вы тимлид
Итак, вы тимлидAnton Piskunov
 
Совершенный тестовый фреймворк
Совершенный тестовый фреймворкСовершенный тестовый фреймворк
Совершенный тестовый фреймворкautomated-testing.info
 
Проблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestCompleteПроблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestCompleteautomated-testing.info
 
“Обезьянье тестирование” в мобильных проектах
“Обезьянье тестирование” в мобильных проектах“Обезьянье тестирование” в мобильных проектах
“Обезьянье тестирование” в мобильных проектахautomated-testing.info
 
The most common mistakes in the first game session and how to avoid them
The most common mistakes in the first game session and how to avoid themThe most common mistakes in the first game session and how to avoid them
The most common mistakes in the first game session and how to avoid themDevGAMM Conference
 
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живыхКурс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живыхautomated-testing.info
 
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...Ontico
 
A1QA Summer 2014 - Alien bugs
A1QA Summer 2014 - Alien bugsA1QA Summer 2014 - Alien bugs
A1QA Summer 2014 - Alien bugsPavel Novik
 
Usability: практические приёмы
Usability: практические приёмыUsability: практические приёмы
Usability: практические приёмыОльга Павлова
 
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest
 
У всех на виду: нюансы Open Source разработки
У всех на виду: нюансы Open Source разработкиУ всех на виду: нюансы Open Source разработки
У всех на виду: нюансы Open Source разработкиCUSTIS
 
В поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UIВ поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UIautomated-testing.info
 
Так говорят программисты
Так говорят программистыТак говорят программисты
Так говорят программистыprigarov
 
Denys Herashchenko “Плаваючі баги серед нас”
Denys Herashchenko “Плаваючі баги серед нас”Denys Herashchenko “Плаваючі баги серед нас”
Denys Herashchenko “Плаваючі баги серед нас”Dakiry
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was coolAndrey Tokarchuk
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 
Мульти-блиц выступление на Стачка-2012
Мульти-блиц выступление на Стачка-2012Мульти-блиц выступление на Стачка-2012
Мульти-блиц выступление на Стачка-2012Alexey Mahotkin
 
Гадкий я. Или как не попасть в "ловушки" на пути к успеху
Гадкий я. Или как не попасть в "ловушки" на пути к успехуГадкий я. Или как не попасть в "ловушки" на пути к успеху
Гадкий я. Или как не попасть в "ловушки" на пути к успехуRina Uzhevko
 

Tendances (20)

Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?Как же научиться программировать, в конце концов?
Как же научиться программировать, в конце концов?
 
Фреймворк для регрессионного тестирования на основе WebDriver
Фреймворк для регрессионного тестирования на основе WebDriverФреймворк для регрессионного тестирования на основе WebDriver
Фреймворк для регрессионного тестирования на основе WebDriver
 
Итак, вы тимлид
Итак, вы тимлидИтак, вы тимлид
Итак, вы тимлид
 
Совершенный тестовый фреймворк
Совершенный тестовый фреймворкСовершенный тестовый фреймворк
Совершенный тестовый фреймворк
 
Проблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestCompleteПроблемы автоматизации крупных проектов: TestComplete
Проблемы автоматизации крупных проектов: TestComplete
 
“Обезьянье тестирование” в мобильных проектах
“Обезьянье тестирование” в мобильных проектах“Обезьянье тестирование” в мобильных проектах
“Обезьянье тестирование” в мобильных проектах
 
The most common mistakes in the first game session and how to avoid them
The most common mistakes in the first game session and how to avoid themThe most common mistakes in the first game session and how to avoid them
The most common mistakes in the first game session and how to avoid them
 
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живыхКурс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
Курс молодого бойца-автоматизатора – как стать ветераном и остаться в живых
 
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
Как мы админа увольняли, или тонкости организации корпоративной безопасности ...
 
A1QA Summer 2014 - Alien bugs
A1QA Summer 2014 - Alien bugsA1QA Summer 2014 - Alien bugs
A1QA Summer 2014 - Alien bugs
 
Usability: практические приёмы
Usability: практические приёмыUsability: практические приёмы
Usability: практические приёмы
 
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery ПромисыCodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
CodeFest 2014. Гайдаренко О. — Промисы и jQuery Промисы
 
У всех на виду: нюансы Open Source разработки
У всех на виду: нюансы Open Source разработкиУ всех на виду: нюансы Open Source разработки
У всех на виду: нюансы Open Source разработки
 
В поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UIВ поисках магической кнопки или как приручить SOAP UI
В поисках магической кнопки или как приручить SOAP UI
 
Так говорят программисты
Так говорят программистыТак говорят программисты
Так говорят программисты
 
Denys Herashchenko “Плаваючі баги серед нас”
Denys Herashchenko “Плаваючі баги серед нас”Denys Herashchenko “Плаваючі баги серед нас”
Denys Herashchenko “Плаваючі баги серед нас”
 
Демонизированный PHP - before it was cool
Демонизированный PHP - before it was coolДемонизированный PHP - before it was cool
Демонизированный PHP - before it was cool
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 
Мульти-блиц выступление на Стачка-2012
Мульти-блиц выступление на Стачка-2012Мульти-блиц выступление на Стачка-2012
Мульти-блиц выступление на Стачка-2012
 
Гадкий я. Или как не попасть в "ловушки" на пути к успеху
Гадкий я. Или как не попасть в "ловушки" на пути к успехуГадкий я. Или как не попасть в "ловушки" на пути к успеху
Гадкий я. Или как не попасть в "ловушки" на пути к успеху
 

En vedette

Part I. How to stop fooling around and begin automating
Part I. How to stop fooling around and begin automatingPart I. How to stop fooling around and begin automating
Part I. How to stop fooling around and begin automatingÞorgeir Ingvarsson
 
Part II. How to automate properly
Part II. How to automate properlyPart II. How to automate properly
Part II. How to automate properlyÞorgeir Ingvarsson
 
Part III. How to maximize profit from automation
Part III. How to maximize profit from automationPart III. How to maximize profit from automation
Part III. How to maximize profit from automationÞorgeir Ingvarsson
 
Метрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцахМетрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцахSQALab
 
Javascript in big project
Javascript in big projectJavascript in big project
Javascript in big projectEvgeny Gusev
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...WrikeTechClub
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»WrikeTechClub
 
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...WrikeTechClub
 
Java Tools and Technologies Landscape for 2014 (image gallery)
Java Tools and Technologies Landscape for 2014 (image gallery)Java Tools and Technologies Landscape for 2014 (image gallery)
Java Tools and Technologies Landscape for 2014 (image gallery)ZeroTurnaround
 
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадКонцепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадSQALab
 
Мелочь пузатая или Объем тест кейса против его содержательности
Мелочь пузатая или Объем тест кейса против его содержательностиМелочь пузатая или Объем тест кейса против его содержательности
Мелочь пузатая или Объем тест кейса против его содержательностиAlexei Lupan
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverИлья Кожухов
 
Автоматизация тестирования: отбрасываем лишнее и проверяем суть
Автоматизация тестирования: отбрасываем лишнее и проверяем сутьАвтоматизация тестирования: отбрасываем лишнее и проверяем суть
Автоматизация тестирования: отбрасываем лишнее и проверяем сутьSQALab
 
Автоматизация функционального тестирования REST API: секреты, тонкости и подв...
Автоматизация функционального тестирования REST API: секреты, тонкости и подв...Автоматизация функционального тестирования REST API: секреты, тонкости и подв...
Автоматизация функционального тестирования REST API: секреты, тонкости и подв...SQALab
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QAFest
 
Тренировка служебных тестировщиков
Тренировка служебных тестировщиковТренировка служебных тестировщиков
Тренировка служебных тестировщиковSQALab
 
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...Dakiry
 

En vedette (19)

Part I. How to stop fooling around and begin automating
Part I. How to stop fooling around and begin automatingPart I. How to stop fooling around and begin automating
Part I. How to stop fooling around and begin automating
 
Part II. How to automate properly
Part II. How to automate properlyPart II. How to automate properly
Part II. How to automate properly
 
Part III. How to maximize profit from automation
Part III. How to maximize profit from automationPart III. How to maximize profit from automation
Part III. How to maximize profit from automation
 
The Dangers of Cucumber
The Dangers of CucumberThe Dangers of Cucumber
The Dangers of Cucumber
 
Метрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцахМетрики автоматизированного тестирования на пальцах
Метрики автоматизированного тестирования на пальцах
 
Javascript in big project
Javascript in big projectJavascript in big project
Javascript in big project
 
Automation patterns on practice
Automation patterns on practiceAutomation patterns on practice
Automation patterns on practice
 
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
Илья Кудинов «Развитие процессов тестирования в Badoo за три года, или как мы...
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...Александр Шуров, Олег Николенко  «Как устроено автоматическое frontend-тестир...
Александр Шуров, Олег Николенко «Как устроено автоматическое frontend-тестир...
 
Java Tools and Technologies Landscape for 2014 (image gallery)
Java Tools and Technologies Landscape for 2014 (image gallery)Java Tools and Technologies Landscape for 2014 (image gallery)
Java Tools and Technologies Landscape for 2014 (image gallery)
 
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадКонцепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
 
Мелочь пузатая или Объем тест кейса против его содержательности
Мелочь пузатая или Объем тест кейса против его содержательностиМелочь пузатая или Объем тест кейса против его содержательности
Мелочь пузатая или Объем тест кейса против его содержательности
 
XPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriverXPath локаторы в Selenium WebDriver
XPath локаторы в Selenium WebDriver
 
Автоматизация тестирования: отбрасываем лишнее и проверяем суть
Автоматизация тестирования: отбрасываем лишнее и проверяем сутьАвтоматизация тестирования: отбрасываем лишнее и проверяем суть
Автоматизация тестирования: отбрасываем лишнее и проверяем суть
 
Автоматизация функционального тестирования REST API: секреты, тонкости и подв...
Автоматизация функционального тестирования REST API: секреты, тонкости и подв...Автоматизация функционального тестирования REST API: секреты, тонкости и подв...
Автоматизация функционального тестирования REST API: секреты, тонкости и подв...
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
 
Тренировка служебных тестировщиков
Тренировка служебных тестировщиковТренировка служебных тестировщиков
Тренировка служебных тестировщиков
 
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
DaKiRY_BAQ2016_QADay_Круглий стіл: "Чи помре ручне тестування з часом" Учасни...
 

Similaire à UI Automation Patterns: "Sleep" Pattern

Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....
Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....
Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....Yandex
 
Spock - the next stage of unit testing
Spock - the next stage of unit testingSpock - the next stage of unit testing
Spock - the next stage of unit testingjugkaraganda
 
КРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходКРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходKirill Lebedev
 
Image-based automation
Image-based automationImage-based automation
Image-based automationVitali Shulha
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAndrey Rebrov
 
Универсальная методика поиска неисправностей от Cisco TAC Игорь Тумкин
Универсальная методика поиска неисправностей от Cisco TAC Игорь ТумкинУниверсальная методика поиска неисправностей от Cisco TAC Игорь Тумкин
Универсальная методика поиска неисправностей от Cisco TAC Игорь ТумкинCisco Russia
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysLiloSEA
 
Установка: скрипты VS гайдов: что проще и что лучше?
Установка: скрипты VS гайдов: что проще и что лучше?Установка: скрипты VS гайдов: что проще и что лучше?
Установка: скрипты VS гайдов: что проще и что лучше?SQALab
 
Poka yoke,jidoka,andon
Poka yoke,jidoka,andonPoka yoke,jidoka,andon
Poka yoke,jidoka,andonssuser44e6fd
 
мартюшев почему юнит-тесты не работают. история большого проекта
мартюшев   почему юнит-тесты не работают. история большого проектамартюшев   почему юнит-тесты не работают. история большого проекта
мартюшев почему юнит-тесты не работают. история большого проектаMagneta AI
 
мартюшев почему юнит-тесты не работают. история большого проекта
мартюшев   почему юнит-тесты не работают. история большого проектамартюшев   почему юнит-тесты не работают. история большого проекта
мартюшев почему юнит-тесты не работают. история большого проектаMagneta AI
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееRoman Dvornov
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубыAleksandr Tarasov
 

Similaire à UI Automation Patterns: "Sleep" Pattern (20)

Типичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....
Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....
Дарья Егорушкина, «Лаборатория Касперского» — Экспертиза текста в интерфейсе....
 
Spock - the next stage of unit testing
Spock - the next stage of unit testingSpock - the next stage of unit testing
Spock - the next stage of unit testing
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
КРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подходКРИ 2008. Проектирование игр: функциональный подход
КРИ 2008. Проектирование игр: функциональный подход
 
Image-based automation
Image-based automationImage-based automation
Image-based automation
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Automation Functional Testing in Agile Projects
Automation Functional Testing in Agile ProjectsAutomation Functional Testing in Agile Projects
Automation Functional Testing in Agile Projects
 
Универсальная методика поиска неисправностей от Cisco TAC Игорь Тумкин
Универсальная методика поиска неисправностей от Cisco TAC Игорь ТумкинУниверсальная методика поиска неисправностей от Cisco TAC Игорь Тумкин
Универсальная методика поиска неисправностей от Cisco TAC Игорь Тумкин
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
 
Установка: скрипты VS гайдов: что проще и что лучше?
Установка: скрипты VS гайдов: что проще и что лучше?Установка: скрипты VS гайдов: что проще и что лучше?
Установка: скрипты VS гайдов: что проще и что лучше?
 
Poka yoke,jidoka,andon
Poka yoke,jidoka,andonPoka yoke,jidoka,andon
Poka yoke,jidoka,andon
 
мартюшев почему юнит-тесты не работают. история большого проекта
мартюшев   почему юнит-тесты не работают. история большого проектамартюшев   почему юнит-тесты не работают. история большого проекта
мартюшев почему юнит-тесты не работают. история большого проекта
 
мартюшев почему юнит-тесты не работают. история большого проекта
мартюшев   почему юнит-тесты не работают. история большого проектамартюшев   почему юнит-тесты не работают. история большого проекта
мартюшев почему юнит-тесты не работают. история большого проекта
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
Joker2014
Joker2014Joker2014
Joker2014
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 

UI Automation Patterns: "Sleep" Pattern

  • 1.
  • 2. МОТИВАЦИЯ • Ваши автотесты постоянно валятся без видимых причин • Ваше приложение постоянно что-то подгружает втихаря • Ваше приложение не ожидает, что по нему будут слишком уж быстро кликать • Ваши автотесты проходят настолько быстро, что вы не успеваете попить кофе и хорошенько побраузать
  • 3. ПРИМЕНИМОСТЬ Используйте паттерн «Сон», чтобы: • Подождать, пока какой-либо элемент появится на странице • Подождать, пока элемент исчезнет • Подождать, пока у элемента изменится какой-нибудь атрибут • Подождать на случай, если элемент может появиться, а может и нет • Подождать, потому что иначе приложение тупо рухнет • Просто подождать
  • 5. УЧАСТНИКИ • SleepService – «сервис сна»: - определяет операцию sleep(), которая позволяет осуществить процедуру ожидания. Альтернативные наименования: pause(), wait() и т.п.
  • 6. ОТНОШЕНИЯ SleepService, как правило, не имеет смысла выделять в отдельный класс. Вполне достаточно будет добавить его функциональность в один или несколько из уже существующих утилитных классов (возможно даже, с применением интерфейса или абстрактного класса CanSleep). Клиенты получают доступ к процедуре сна через вызов метод sleep().
  • 7. РЕЗУЛЬТАТЫ • Легко добавить ожидание в любой точке кода • Любой компонент может при необходимости приостановить свое выполнение • Вызываемые автотестом методы исполняются обстоятельно и без спешки • Глядя на исполняющийся тест, можно по крайней мере понимать, что он делает, и при этом успевать заниматься прочими активностями • Общее время выполнения тестовой сюиты незначительно увеличивается за счет повышения надежности тестов
  • 8. РЕАЛИЗАЦИЯ При реализации паттерна «Сон» необходимо рассмотреть следующие вопросы: • Сон должен блокировать выполнение теста • Время сна должно быть можно конфигурировать • Но должно быть можно инициировать сон и просто так, не заморачиваясь на таймаутах • Процедура сна должна быть масштабируемой • В случае, если во время сна что-то пошло не так, об этом надо куда-то сообщить • Но в некоторых случаях можно особо из-за этого не напрягаться
  • 9. Простейшая реализация: public static void sleep(long timeout) { try { Thread.sleep(timeout); } catch (InterruptedException e) { e.printStackTrace(); } } Плюсы: просто и элегантно. Минусы: может засорять лог стектрейсами. Все равно никто не знает, что с ними делать. ПРИМЕРЫ КОДА
  • 10. Улучшенная реализация: public static void sleep(long timeout) { try { Thread.sleep(timeout); } catch (InterruptedException e) { } } Плюсы: еще проще и элегантнее. Минусы: отсутствуют. ПРИМЕРЫ КОДА
  • 11. ПРИМЕРЫ КОДА Продвинутая реализация с генерацией исключения: public static void sleep(long timeout) { try { Thread.sleep(timeout); } catch (InterruptedException e) { throw new RuntimeException(e.getMessage()); } } Плюсы: показывает, что вы не какие-нибудь там и умеете генерировать исключения. Обратите внимание, блок throws не требуется, так как это RuntimeException! Минусы: исключение нужно где-то как-то обработать.
  • 12. ПРИМЕРЫ КОДА Продвинутая реализация с логированием предупреждения: public static void sleep(long timeout) { try { Thread.sleep(timeout); } catch (InterruptedException e) { LOGGER.warn("sleep() method was interrupted.", e); } } Плюсы: обработка исключения на более высоком уровне больше не требуется! Минусы: нужно инициализировать логгер. Засоряет лог предупреждениями, которые все равно никто не читает.
  • 13. ПРИМЕРЫ КОДА Продвинутая реализация с таймаутом по умолчанию: private static final long DEFAULT_TIMEOUT = 15000; public static void sleep() { sleep(DEFAULT_TIMEOUT); } Плюсы: не надо думать о величине таймаута. Минусы: отсутствуют.
  • 14. МАСШТАБИРУЕМОСТЬ Иногда необходимо выполнить ожидание в течение нестандартного отрезка времени. Как же сделать, чтобы процедура сна была масштабируемой? public void clientMethod() { … SleepService.sleep(sleepTime * 8); … } Это решение в лоб, очевидно, не годится, так как неприменимо для случая вызова метода sleep() без параметров. Как же быть?
  • 15. МАСШТАБИРУЕМОСТЬ Все очень просто! public void clientMethod() { … SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); SleepService.sleep(sleepTime); … }
  • 16. АЛЬТЕРНАТИВЫ Рассмотрим другие, неправильные, альтернативы решения проблемы: • [Решение] Реализовать процедуру «поллинга», т.е. опроса элементов в цикле на предмет достижения требуемого условия. • [Ответ] Но это же неэффективно! Вместо того, чтобы спокойно поспать, автотест должен постоянно обрабатывать какие-то инструкции, делать запросы, анализировать результаты и т.п. Все это негативно сказывается на сроке службы процессора. Кроме того, в этом случае автотест не полностью эмулирует действия пользователя, который, как известно, никакие элементы не опрашивает, а тупо залипает в экран, пока страница грузится. Именно эту активность пользователя и эмулирует шаблон проектирования «Сон».
  • 17. АЛЬТЕРНАТИВЫ • [Решение] Попросить разработчиков встроить механизмы синхронизации загрузки страниц и защиты от так называемого «happy clicking». • [Ответ] Непрофессионально! Вы - автоматизаторы тестирования, а не какие-нибудь там молокососы, бегающие с просьбами к разработчикам. Вы вполне в состоянии справиться с проблемой без постороннего вмешательства.
  • 18. АЛЬТЕРНАТИВЫ • [Решение] Больше работать, меньше браузать и пить кофе. • [Ответ] Ха. Ха ха. Ха ха ха ха ха.
  • 19. ТОЛЬКО JAVA? НЕТ! Шаблон «Сон» можно реализовать на любом языке программирования! • C#: System.Threading.Thread.Sleep(5000); • Ruby: sleep 5 • Python: time.sleep(5) • QTP (VBScript): Wait 5