QA Fes 2016. Иван Пашко. Теория Дарвина в тестах. Эволюция Wait-ов.

Q
Теория Дарвина в
тестах
Эволюция Wait-ов
Первый в Украине фестиваль тестирования
Киев - 2016
About me
▹ 7+ years in IT
▹ Automation Engineer
▹ Scrum Master
▹Betsson project, Ciklum
2
Agenda
▸ Теория Дарвина в
тестировании
▸Эволюция Wait
▸Выводы
3
Теория Дарвина в
тестировании
Теория Дарвина
▹Чарлз Дарвин первым сформулировал теорию
согласно которой главным (хотя и не единственным)
фактором эволюции является естественный отбор.
(c Wiki)
5
Теория Дарвина. Процесс эволюции
Процесс эволюции по Дарвину говорит нам:
▸ Улучшение
[органические формы медленно и постепенно преобразовывались и совершенствовались в
соответствии с окружающими условиями]
▸ Ветвление
[В основе преобразования видов в природе лежат такие свойства организмов, как
изменчивость и наследственность]
▸ Адаптация
[Результатом эволюции является приспособленность организмов к условиям их обитания
и многообразие видов в природе]
6
Теория Дарвина. Autotests
▹ Переход от мануальной работы к
автоматизации
▹ Удобство написания скриптов
▹ Создание тестовых наборов
данных
▹ Свой SDL (удобство написания
скриптов)
7
Record
&
Playback
Helpers
(function
reusing)
Data driven
Keyword
driven
Other
(hybrid)
Теория Дарвина. Page Objects
▹ Удобство написания скриптов
▹ Изобилие tool-ов эумляции (watir,
selenium, nightwatch)
▹ Изобилие страниц, переходов
между ними
8
Test
scripts
Wrappers
Page
Object
Actions,
Factories,
Chains
Теория Дарвина. Bender9
Эволюция Wait
Disclaimer
▹ E2E Тесты ( UI / Integration / System )
▹ Нет оповещения об окончании
события (No events)
▹ Обработка функций занимает время
11
http://img.picturequotes.com/2/371/370243/anything-less-than-immortality-is-a-complete-waste-of-
time-quote-1.jpg
12
[TestMethod]
public void CheckMagicPositiveFlow()
{
//Arrange
const string MAGIC_SPELL = "Expecto Patronum!";
//Act
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
var result = SUT.IsMagicAppeared();
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
Thread.Sleep(10000)
▹Проблема: Тесты падают не
дожидаясь нужного состояния.
▹Решение: Ожидать состояние
константное время
13
14
[TestMethod]
public void CheckMagicThreadSleep()
{
//Arrange
const string MAGIC_SPELL = "Expecto Patronum!";
//Act
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
Thread.Sleep(10000);
var result = SUT.IsMagicAppeared();
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
For / While / Do
▹Проблема: Выполнение тестов
занимает слишком много времени. Мы
ожидаем в пустую.
▹Решение: Опрашивать состояние
короткими временными интервалами.
15
16
...
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
for(int i = 0; i < MAGIC_WAIT_INTERVAL_MS; i+=100)
{
Thread.Sleep(100);
result = SUT.IsMagicAppeared();
if (result)
break;
}
result = SUT.IsMagicAppeared();
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
Encapsulation
▹Проблема: Код тестов разрастается
и дублируется.
▹Решение: Инкапсуляция. Создаем
метод-помощник
17
18
private static bool WaitForMagicAppearance()
{
for(int i=0; i < MAGIC_WAIT_INTERVAL_MS; i+= 100)
{
Thread.Sleep(100);
bool result = SUT.IsMagicAppeared();
if (result)
return result;
}
return false;
}
19
[TestMethod]
public void CheckMagicEncapsulation()
{
//Arrange
const string MAGIC_SPELL = "Expecto Patronum!";
//Act
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
var result = WaitForMagicAppearance();
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
Test helpers
▹Проблема: Под каждый метод надо
писать свой хелпер.
▹Решение: Сделаем универсальный
хелпер.
20
21
public static bool WaitFor(Func<bool> predicate, int timeout_ms)
{
for (int i = 0; i < timeout_ms; i+=100)
{
Thread.Sleep(100);
var result = predicate();
if (result)
{
return result;
}
}
return false;
}
22
[TestMethod]
public void CheckMagicGenericMethod()
{
//Arrange
const string MAGIC_SPELL = "Expecto Patronum!";
Func<bool> isMagicAppearredFunc = SUT.IsMagicAppeared;
//Act
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
var result = WaitFor(isMagicAppearredFunc, WAIT_INTERVAL_MS);
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
23
[TestMethod]
public void CheckMagicGenericMethod()
{
//Arrange
const string MAGIC_SPELL = "Expecto Patronum!";
//Act
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
var result = WaitFor(() =>
SUT.IsMagicAppearedWithParams(1,2),
INTERVAL_MS);
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
Probability
distribution
▹Проблема: Мы все еще долго ждем
▹Решение: Усовершенствуем наши
интервалы ожидания (фибоначчи,
вероятностное распределение)
24
25
26
public static IEnumerable<int> Fibonacchi()
{
var current = 1;
var next = 1;
while (true)
{
yield return current;
next += current;
current = next - current;
}
}
27
public static bool WaitFor(Func<bool> predicate, int timeout_ms)
{
int time = 0, n = 0;
while (time < timeout__ms)
{
var sleepTime = Fibonacchi().Skip(++n).First();
Thread.Sleep(sleepTime);
time += sleepTime;
var result = predicate();
if (result) return result;
}
return false;
}
Stop on Errors
▹Проблема: Выполнение Failed
тестов все еще долгое.
▹Решение: Добавляем проверку
текущего состояния.
28
29
public static bool WaitFor(Func<bool> predicate, Func<bool>
validateCurrentState, int timeout_limit_ms)
{
int time = 0, n = 0;
while (time < timeout_limit_ms)
{
...
if (!validateCurrentState())
Assert.Fail("State is wrong. We shouldn't wait
anymore!");
var result = predicate();
...
Syntax Sugar
▹Проблема: Удобство
использования хромает..
▹Решение: Extension methods
30
31
public static bool Wait(this Func<bool> predicate, int
timeout_limit_ms)
{
for (int i = 1; i < timeout_limit_ms; i+=100)
{
Thread.Sleep(100);
var result = predicate();
if (result)
return result;
}
return false;
}
32
[TestMethod]
public void CheckMagicExtensionMethod()
{
//Arrange
const string MAGIC_SPELL = "Expecto Patronum!";
Func<bool> isMagicAppeared = SUT.IsMagicAppeared;
//Act
SUT.DoMagic(MAGIC_SPELL);
//Magic is happening here..
var result = isMagicAppeared.Wait(MAGIC_WAIT_INTERVAL_MS);
//Assert
Assert.IsTrue(result, "Magic does not exist..");
}
Common pitfalls
Забываем про:
▹ время ожидания в интервалах
▹ время выполнения операции
▹ вутренние функции ожидания (explicit/implicit wait,
etc)
33
Что дальше?
▹ Polling  Events handling
▹ Inline Methods  Common Helpers  Extension
Methods
▹ Test Data Data Sets  Data Oracles
34
Выводы
Всегда есть что улучшить.
Ищите слабые места и
улучшайте их
Улучшать можно не только код -
но и процесс его создания
Если система не нуждается в
эволюции - незачем тратить
время
Варьируйте и адаптируйте
свои решения
35
36
Спасибо за
внимание!
Вопросы?
pashko.ivan@gmail.com
https://www.facebook.com/gro
ups/1180099188730673/
1 of 36

Recommended

Multiprocessor Programming Intro (lecture 3) by
Multiprocessor Programming Intro (lecture 3)Multiprocessor Programming Intro (lecture 3)
Multiprocessor Programming Intro (lecture 3)Dmitry Tsitelov
1.1K views44 slides
Сергей Париев - "обработка дедлоков в MySql" by
Сергей Париев - "обработка дедлоков в MySql"Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"railsclub
856 views43 slides
Синхронный MODX: как сделать настоящую синхронизацию и не застрелиться by
Синхронный MODX: как сделать настоящую синхронизацию и не застрелитьсяСинхронный MODX: как сделать настоящую синхронизацию и не застрелиться
Синхронный MODX: как сделать настоящую синхронизацию и не застрелитьсяMODX Беларусь
409 views22 slides
Михаил Давыдов - JavaScript. Асинхронность by
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьYandex
1.5K views36 slides
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн... by
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
1.6K views78 slides
Михаил Давыдов — JavaScript: Асинхронность by
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьYandex
3.2K views36 slides

More Related Content

Viewers also liked

QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe by
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQAFest
5.6K views75 slides
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз... by
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QAFest
1.4K views23 slides
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайников by
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайниковQA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайниковQAFest
3.4K views44 slides
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле? by
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QAFest
13.4K views54 slides
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика by
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQAFest
3.2K views44 slides
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops by
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
1.6K views54 slides

Viewers also liked(20)

QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe by QAFest
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшeQA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QA Fes 2016. Алексей Виноградов. Page Objects: лучше проще, да лучшe
QAFest5.6K views
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз... by QAFest
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QAFest1.4K views
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайников by QAFest
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайниковQA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QAFest3.4K views
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле? by QAFest
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QAFest13.4K views
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика by QAFest
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QAFest3.2K views
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops by QAFest
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QAFest1.6K views
QA Fes 2016. Ярослав Пернеровский. Не Jav'ой единой. Пример автоматизации тес... by QAFest
QA Fes 2016. Ярослав Пернеровский. Не Jav'ой единой. Пример автоматизации тес...QA Fes 2016. Ярослав Пернеровский. Не Jav'ой единой. Пример автоматизации тес...
QA Fes 2016. Ярослав Пернеровский. Не Jav'ой единой. Пример автоматизации тес...
QAFest1.1K views
QA Fes 2016. Игорь Бондаренко. Тестирование Ecommerce проектов. На что обраща... by QAFest
QA Fes 2016. Игорь Бондаренко. Тестирование Ecommerce проектов. На что обраща...QA Fes 2016. Игорь Бондаренко. Тестирование Ecommerce проектов. На что обраща...
QA Fes 2016. Игорь Бондаренко. Тестирование Ecommerce проектов. На что обраща...
QAFest829 views
QA Fes 2016. Катерина Овеченко & Михаил Дырда. История одной авантюры: наш не... by QAFest
QA Fes 2016. Катерина Овеченко & Михаил Дырда. История одной авантюры: наш не...QA Fes 2016. Катерина Овеченко & Михаил Дырда. История одной авантюры: наш не...
QA Fes 2016. Катерина Овеченко & Михаил Дырда. История одной авантюры: наш не...
QAFest828 views
QA Fest 2016. Антон Серпутько. Автоматизация запуска тестов с помощью Jenkins... by QAFest
QA Fest 2016. Антон Серпутько. Автоматизация запуска тестов с помощью Jenkins...QA Fest 2016. Антон Серпутько. Автоматизация запуска тестов с помощью Jenkins...
QA Fest 2016. Антон Серпутько. Автоматизация запуска тестов с помощью Jenkins...
QAFest1.4K views
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt by QAFest
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarktQA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QA Fes 2016. Игорь Любин. Об автоматическом тестировании бэкенда в MediaMarkt
QAFest897 views
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах by QAFest
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерахQA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QAFest872 views
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к... by QAFest
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QAFest1.1K views
QA Fes 2016. Артем Быковец. Как выживать тестировщику в Agile среде by QAFest
QA Fes 2016. Артем Быковец. Как выживать тестировщику в Agile средеQA Fes 2016. Артем Быковец. Как выживать тестировщику в Agile среде
QA Fes 2016. Артем Быковец. Как выживать тестировщику в Agile среде
QAFest1.9K views
QA Fest 2016. Екатерина Шепелева. Секрет успеха: как стать и оставаться востр... by QAFest
QA Fest 2016. Екатерина Шепелева. Секрет успеха: как стать и оставаться востр...QA Fest 2016. Екатерина Шепелева. Секрет успеха: как стать и оставаться востр...
QA Fest 2016. Екатерина Шепелева. Секрет успеха: как стать и оставаться востр...
QAFest999 views
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования by QAFest
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестированияQA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
QA Fest 2016. Денис Яременко. Как облегчить процесс мобильного тестирования
QAFest1.5K views
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при... by QAFest
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
QAFest1.4K views
QA Fes 2016. Роман Якимчук. Продвинутое тестирование состояний и переходов by QAFest
QA Fes 2016. Роман Якимчук. Продвинутое тестирование состояний и переходовQA Fes 2016. Роман Якимчук. Продвинутое тестирование состояний и переходов
QA Fes 2016. Роман Якимчук. Продвинутое тестирование состояний и переходов
QAFest1.5K views
How QA engineers could affect quality? by Mikalai Alimenkou
How QA engineers could affect quality?How QA engineers could affect quality?
How QA engineers could affect quality?
Mikalai Alimenkou6.6K views
Мобильный веб: назад в будущее by Badoo Development
Мобильный веб: назад в будущееМобильный веб: назад в будущее
Мобильный веб: назад в будущее
Badoo Development4.8K views

Similar to QA Fes 2016. Иван Пашко. Теория Дарвина в тестах. Эволюция Wait-ов.

Spock - the next stage of unit testing by
Spock - the next stage of unit testingSpock - the next stage of unit testing
Spock - the next stage of unit testingjugkaraganda
286 views49 slides
Типичные ошибки начинающих писать тесты на WebDriver by
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriverIgor Khrol
55.4K views31 slides
Thread by
ThreadThread
ThreadAlexander Rusin
601 views33 slides
Сложности микробенчмаркинга by
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркингаAndrey Akinshin
521 views66 slides
ZooKeeper Java Cloud by
ZooKeeper Java CloudZooKeeper Java Cloud
ZooKeeper Java CloudVladimir Badovskiy
911 views14 slides
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java by
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в JavaKrivoy Rog IT Community
335 views39 slides

Similar to QA Fes 2016. Иван Пашко. Теория Дарвина в тестах. Эволюция Wait-ов.(11)

Spock - the next stage of unit testing by jugkaraganda
Spock - the next stage of unit testingSpock - the next stage of unit testing
Spock - the next stage of unit testing
jugkaraganda286 views
Типичные ошибки начинающих писать тесты на WebDriver by Igor Khrol
Типичные ошибки начинающих писать тесты на WebDriverТипичные ошибки начинающих писать тесты на WebDriver
Типичные ошибки начинающих писать тесты на WebDriver
Igor Khrol55.4K views
Сложности микробенчмаркинга by Andrey Akinshin
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркинга
Andrey Akinshin521 views
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java by Krivoy Rog IT Community
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Javakranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
kranonit S11E01 Андрей Пономарёв: Тренинг по TDD в Java
Тестируем тесты с PIT (мутационное тестирование) by Vitebsk Miniq
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
Vitebsk Miniq378 views
Кванториум: софт скиллз by Nikolay Skirda
Кванториум: софт скиллзКванториум: софт скиллз
Кванториум: софт скиллз
Nikolay Skirda110 views
Грязная магия Java by CUSTIS
Грязная магия JavaГрязная магия Java
Грязная магия Java
CUSTIS768 views
Selenium, а давай подождем? by SQALab
Selenium, а давай подождем?Selenium, а давай подождем?
Selenium, а давай подождем?
SQALab4.4K views

More from QAFest

QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин by
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилинQA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилинQAFest
979 views44 slides
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future by
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The FutureQA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The FutureQAFest
931 views44 slides
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe... by
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...QAFest
322 views131 slides
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и... by
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QAFest
336 views92 slides
QA Fest 2019. Никита Галкин. Как зарабатывать больше by
QA Fest 2019. Никита Галкин. Как зарабатывать большеQA Fest 2019. Никита Галкин. Как зарабатывать больше
QA Fest 2019. Никита Галкин. Как зарабатывать большеQAFest
389 views40 slides
QA Fest 2019. Сергей Пирогов. Why everything is spoiled by
QA Fest 2019. Сергей Пирогов. Why everything is spoiledQA Fest 2019. Сергей Пирогов. Why everything is spoiled
QA Fest 2019. Сергей Пирогов. Why everything is spoiledQAFest
342 views33 slides

More from QAFest(20)

QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин by QAFest
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилинQA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QA Fest 2019. Сергій Короленко. Топ веб вразливостей за 40 хвилин
QAFest979 views
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future by QAFest
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The FutureQA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QA Fest 2019. Анна Чернышова. Self-healing test automation 2.0. The Future
QAFest931 views
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe... by QAFest
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QA Fest 2019. Doug Sillars. It's just too Slow: Testing Mobile application pe...
QAFest322 views
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и... by QAFest
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QA Fest 2019. Катерина Спринсян. Параллельное покрытие автотестами и другие и...
QAFest336 views
QA Fest 2019. Никита Галкин. Как зарабатывать больше by QAFest
QA Fest 2019. Никита Галкин. Как зарабатывать большеQA Fest 2019. Никита Галкин. Как зарабатывать больше
QA Fest 2019. Никита Галкин. Как зарабатывать больше
QAFest389 views
QA Fest 2019. Сергей Пирогов. Why everything is spoiled by QAFest
QA Fest 2019. Сергей Пирогов. Why everything is spoiledQA Fest 2019. Сергей Пирогов. Why everything is spoiled
QA Fest 2019. Сергей Пирогов. Why everything is spoiled
QAFest342 views
QA Fest 2019. Сергей Новик. Между мотивацией и выгоранием by QAFest
QA Fest 2019. Сергей Новик. Между мотивацией и выгораниемQA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
QA Fest 2019. Сергей Новик. Между мотивацией и выгоранием
QAFest249 views
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н... by QAFest
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
QA Fest 2019. Владимир Никонов. Код Шредингера или зачем и как мы тестируем н...
QAFest338 views
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV... by QAFest
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
QA Fest 2019. Владимир Трандафилов. GUI automation of WEB application with SV...
QAFest227 views
QA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster by QAFest
QA Fest 2019. Иван Крутов. Bulletproof Selenium ClusterQA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
QA Fest 2019. Иван Крутов. Bulletproof Selenium Cluster
QAFest282 views
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе... by QAFest
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QA Fest 2019. Николай Мижигурский. Миссия /*не*/выполнима: гуманитарий собесе...
QAFest251 views
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз... by QAFest
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
QA Fest 2019. Володимир Стиран. Чим раніше – тим вигідніше, але ніколи не піз...
QAFest301 views
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation by QAFest
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automationQA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
QA Fest 2019. Дмитрий Прокопук. Mocks and network tricks in UI automation
QAFest225 views
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в... by QAFest
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
QA Fest 2019. Екатерина Дядечко. Тестирование медицинского софта — вызовы и в...
QAFest243 views
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa... by QAFest
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
QA Fest 2019. Катерина Черникова. Tune your P’s: the pop-art of keeping testa...
QAFest376 views
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT by QAFest
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях ITQA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
QA Fest 2019. Алиса Бойко. Какнезапутаться в коммуникативных сетях IT
QAFest209 views
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении by QAFest
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложенииQA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
QA Fest 2019. Святослав Логин. Как найти уязвимости в мобильном приложении
QAFest607 views
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр... by QAFest
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
QA Fest 2019. Катерина Шепелєва та Інна Оснач. Що українцям потрібно знати пр...
QAFest321 views
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр... by QAFest
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
QA Fest 2019. Антон Серпутько. Нагрузочное тестирование распределенных асинхр...
QAFest296 views
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22 by QAFest
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
QA Fest 2019. Петр Тарасенко. QA Hackathon - The Cookbook 22
QAFest164 views

QA Fes 2016. Иван Пашко. Теория Дарвина в тестах. Эволюция Wait-ов.

  • 1. Теория Дарвина в тестах Эволюция Wait-ов Первый в Украине фестиваль тестирования Киев - 2016
  • 2. About me ▹ 7+ years in IT ▹ Automation Engineer ▹ Scrum Master ▹Betsson project, Ciklum 2
  • 3. Agenda ▸ Теория Дарвина в тестировании ▸Эволюция Wait ▸Выводы 3
  • 5. Теория Дарвина ▹Чарлз Дарвин первым сформулировал теорию согласно которой главным (хотя и не единственным) фактором эволюции является естественный отбор. (c Wiki) 5
  • 6. Теория Дарвина. Процесс эволюции Процесс эволюции по Дарвину говорит нам: ▸ Улучшение [органические формы медленно и постепенно преобразовывались и совершенствовались в соответствии с окружающими условиями] ▸ Ветвление [В основе преобразования видов в природе лежат такие свойства организмов, как изменчивость и наследственность] ▸ Адаптация [Результатом эволюции является приспособленность организмов к условиям их обитания и многообразие видов в природе] 6
  • 7. Теория Дарвина. Autotests ▹ Переход от мануальной работы к автоматизации ▹ Удобство написания скриптов ▹ Создание тестовых наборов данных ▹ Свой SDL (удобство написания скриптов) 7 Record & Playback Helpers (function reusing) Data driven Keyword driven Other (hybrid)
  • 8. Теория Дарвина. Page Objects ▹ Удобство написания скриптов ▹ Изобилие tool-ов эумляции (watir, selenium, nightwatch) ▹ Изобилие страниц, переходов между ними 8 Test scripts Wrappers Page Object Actions, Factories, Chains
  • 11. Disclaimer ▹ E2E Тесты ( UI / Integration / System ) ▹ Нет оповещения об окончании события (No events) ▹ Обработка функций занимает время 11 http://img.picturequotes.com/2/371/370243/anything-less-than-immortality-is-a-complete-waste-of- time-quote-1.jpg
  • 12. 12 [TestMethod] public void CheckMagicPositiveFlow() { //Arrange const string MAGIC_SPELL = "Expecto Patronum!"; //Act SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. var result = SUT.IsMagicAppeared(); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 13. Thread.Sleep(10000) ▹Проблема: Тесты падают не дожидаясь нужного состояния. ▹Решение: Ожидать состояние константное время 13
  • 14. 14 [TestMethod] public void CheckMagicThreadSleep() { //Arrange const string MAGIC_SPELL = "Expecto Patronum!"; //Act SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. Thread.Sleep(10000); var result = SUT.IsMagicAppeared(); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 15. For / While / Do ▹Проблема: Выполнение тестов занимает слишком много времени. Мы ожидаем в пустую. ▹Решение: Опрашивать состояние короткими временными интервалами. 15
  • 16. 16 ... SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. for(int i = 0; i < MAGIC_WAIT_INTERVAL_MS; i+=100) { Thread.Sleep(100); result = SUT.IsMagicAppeared(); if (result) break; } result = SUT.IsMagicAppeared(); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 17. Encapsulation ▹Проблема: Код тестов разрастается и дублируется. ▹Решение: Инкапсуляция. Создаем метод-помощник 17
  • 18. 18 private static bool WaitForMagicAppearance() { for(int i=0; i < MAGIC_WAIT_INTERVAL_MS; i+= 100) { Thread.Sleep(100); bool result = SUT.IsMagicAppeared(); if (result) return result; } return false; }
  • 19. 19 [TestMethod] public void CheckMagicEncapsulation() { //Arrange const string MAGIC_SPELL = "Expecto Patronum!"; //Act SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. var result = WaitForMagicAppearance(); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 20. Test helpers ▹Проблема: Под каждый метод надо писать свой хелпер. ▹Решение: Сделаем универсальный хелпер. 20
  • 21. 21 public static bool WaitFor(Func<bool> predicate, int timeout_ms) { for (int i = 0; i < timeout_ms; i+=100) { Thread.Sleep(100); var result = predicate(); if (result) { return result; } } return false; }
  • 22. 22 [TestMethod] public void CheckMagicGenericMethod() { //Arrange const string MAGIC_SPELL = "Expecto Patronum!"; Func<bool> isMagicAppearredFunc = SUT.IsMagicAppeared; //Act SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. var result = WaitFor(isMagicAppearredFunc, WAIT_INTERVAL_MS); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 23. 23 [TestMethod] public void CheckMagicGenericMethod() { //Arrange const string MAGIC_SPELL = "Expecto Patronum!"; //Act SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. var result = WaitFor(() => SUT.IsMagicAppearedWithParams(1,2), INTERVAL_MS); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 24. Probability distribution ▹Проблема: Мы все еще долго ждем ▹Решение: Усовершенствуем наши интервалы ожидания (фибоначчи, вероятностное распределение) 24
  • 25. 25
  • 26. 26 public static IEnumerable<int> Fibonacchi() { var current = 1; var next = 1; while (true) { yield return current; next += current; current = next - current; } }
  • 27. 27 public static bool WaitFor(Func<bool> predicate, int timeout_ms) { int time = 0, n = 0; while (time < timeout__ms) { var sleepTime = Fibonacchi().Skip(++n).First(); Thread.Sleep(sleepTime); time += sleepTime; var result = predicate(); if (result) return result; } return false; }
  • 28. Stop on Errors ▹Проблема: Выполнение Failed тестов все еще долгое. ▹Решение: Добавляем проверку текущего состояния. 28
  • 29. 29 public static bool WaitFor(Func<bool> predicate, Func<bool> validateCurrentState, int timeout_limit_ms) { int time = 0, n = 0; while (time < timeout_limit_ms) { ... if (!validateCurrentState()) Assert.Fail("State is wrong. We shouldn't wait anymore!"); var result = predicate(); ...
  • 30. Syntax Sugar ▹Проблема: Удобство использования хромает.. ▹Решение: Extension methods 30
  • 31. 31 public static bool Wait(this Func<bool> predicate, int timeout_limit_ms) { for (int i = 1; i < timeout_limit_ms; i+=100) { Thread.Sleep(100); var result = predicate(); if (result) return result; } return false; }
  • 32. 32 [TestMethod] public void CheckMagicExtensionMethod() { //Arrange const string MAGIC_SPELL = "Expecto Patronum!"; Func<bool> isMagicAppeared = SUT.IsMagicAppeared; //Act SUT.DoMagic(MAGIC_SPELL); //Magic is happening here.. var result = isMagicAppeared.Wait(MAGIC_WAIT_INTERVAL_MS); //Assert Assert.IsTrue(result, "Magic does not exist.."); }
  • 33. Common pitfalls Забываем про: ▹ время ожидания в интервалах ▹ время выполнения операции ▹ вутренние функции ожидания (explicit/implicit wait, etc) 33
  • 34. Что дальше? ▹ Polling  Events handling ▹ Inline Methods  Common Helpers  Extension Methods ▹ Test Data Data Sets  Data Oracles 34
  • 35. Выводы Всегда есть что улучшить. Ищите слабые места и улучшайте их Улучшать можно не только код - но и процесс его создания Если система не нуждается в эволюции - незачем тратить время Варьируйте и адаптируйте свои решения 35