83
Вам не нужен Автоматизатор! @yashaka

Вам не нужен Автоматизатор!

  • Upload
    sqalab

  • View
    1.033

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Вам не нужен Автоматизатор!

Вам не нужен Автоматизатор!

@yashaka

Page 2: Вам не нужен Автоматизатор!

Автоматизация это сложно…или нет?

Page 3: Вам не нужен Автоматизатор!

Нет:p

Page 4: Вам не нужен Автоматизатор!

Нет:p

(по крайней мере для WEB UI)

Page 5: Вам не нужен Автоматизатор!

если знать как её готовить;)

Нет:p

Page 6: Вам не нужен Автоматизатор!

Но всему свое время:)

Page 7: Вам не нужен Автоматизатор!

Начнем сначала…

Page 8: Вам не нужен Автоматизатор!

Продукт

Page 9: Вам не нужен Автоматизатор!

Шушпанчики

Page 10: Вам не нужен Автоматизатор!

Юз кейсы (черновик)Деревья

шпят

едят

бегают

висят

Норы

шпят

едят

бегают

During All activities:

шуршпанят

Особенные случаи:

GIVEN шпятWHEN есть кто за 2 метра

THEN становятся невидимыми

Переходы:

деревья > норы

деревья < норы

Page 11: Вам не нужен Автоматизатор!

Деревья

шпят *

едят *

бегают *

висят *

Норы

шпят *

едят *

бегают *

During All activities:

шуршпанят

Особенные случаи:

GIVEN шпятWHEN есть кто за 2 метра

THEN становятся невидимыми

Переходы:

деревья > норы *

деревья < норы *

Выбираем высокоприоритетные “фичи”

Page 12: Вам не нужен Автоматизатор!

Деревья

шпят *

едят *

бегают *

висят *

Норы

шпят *

едят *

бегают *

Переходы:

деревья > норы *

деревья < норы *

Что бы автоматизировать в первую очередь

и побыстрей (Smoke)

Page 13: Вам не нужен Автоматизатор!

Сценарий (End to End)перебежать в нору

побегатьперебежать на дерево

повисетьпоесть

перебежать в норупошпать

Page 14: Вам не нужен Автоматизатор!

Деревья

шпят

едят e

бегают

висят e

Норы

шпят e

едят

бегают e

During All activities:

шуршпанят

Особенные случаи:

GIVEN шпятWHEN есть кто за 2 метра

THEN становятся невидимыми

Переходы:

деревья > норы e

деревья < норы e

Прослеживаем покрытие

Page 15: Вам не нужен Автоматизатор!

Коробит?

Page 16: Вам не нужен Автоматизатор!

будь DRY ;)

Улучшаем наглядность

будь DRY

Page 17: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?

побегать !!e ! !

повисеть - !!e !

поесть !! !!e !

пошпать !!e !! !

- невидимым ? !! !Переходы: норы > деревья

eноры < деревья

e

Page 18: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?

побегать !!e ! !

повисеть - !!e !

поесть !! !!e !

пошпать !!e !! !

- невидимым ? !! !Переходы: норы > деревья

eноры < деревья

e

Дыра в покрытии

Page 19: Вам не нужен Автоматизатор!

E2E тест одной Фичиперебежать на

дерево

пошпать невидимым

перебежать в норупобегать

перебежать на дерево

повисетьпоесть

перебежать в норупошпать

Заканчиваем Smoke покрытие

Page 20: Вам не нужен Автоматизатор!

E2E тест одной Фичиперебежать на

дерево

пошпать невидимым

проверить шуршпание

Используем момент для увеличения покрытия

перебежать в норупобегать

перебежать на дерево

повисетьпоесть

перебежать в норупошпать

Page 21: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?

побегать !!e ! !

повисеть - !!e !

поесть !! !!e !

пошпать !!e !! !

- невидимым ? !!f !fПереходы: норы > деревья

eноры < деревья

e

Page 22: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?

побегать !!e !f !f

повисеть - !!e !f

поесть !!f !!e !f

пошпать !!e !!f !f

- невидимым ? !!f !f

Закончили Smoke? - Переходим к полному (приемочному) покрытию с помощью фиче-тестов

Page 23: Вам не нужен Автоматизатор!

Советы: покрываем

функциональные юз-кейсывысокого приоритета,

(пользователь будет использовать регулярно)

Page 24: Вам не нужен Автоматизатор!

Советы: НЕ покрываем

низко-приоритетные проверкипроверки “всех возможных вариаций”

Page 25: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?

побегать !!e !f !f

повисеть - !!e !f

поесть !!f !!e !f

пошпать !!e !!f !f

- невидимым ? !!f !f

Нет низко-приоритетным проверкам

Page 26: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?побегать !!e !f !f

- быстро- медленно

повисеть - !!e !f- низко- высоко

поесть !!f !!e !f- много- мало

пошпать !!e !!f !f- невидимым ? !!f !f

Нет проверкам “всех возможных вариаций”

Page 27: Вам не нужен Автоматизатор!

Действия\Контексты Норы Деревья шуршпанят?побегать !!e !f !f

- быстро- медленно

повисеть - !!e !f- низко- высоко

поесть !!f !!e !f- много- мало

пошпать !!e !!f !f- невидимым ? !!f !f

Должны быть покрыты на уровне юнит тестов

разные вариации одной “функции”(дающие тот же

“user flow” )

Page 28: Вам не нужен Автоматизатор!

Мы здесь => => Только:функциональн

ыеюз-кейсывысокого

приоритетаразные вариации

одной “функции”

Здесь =>

Page 29: Вам не нужен Автоматизатор!

Избегаем =>переносим

дополнительные требования такие как“разные типы даных”,

и другие “вариации функций”, и т. д. …<= в

=> из

Page 30: Вам не нужен Автоматизатор!

Где код?

Page 31: Вам не нужен Автоматизатор!

Спокойствие и только спокойствие:)

Page 32: Вам не нужен Автоматизатор!

Product

От

Page 33: Вам не нужен Автоматизатор!

Product

До

Page 34: Вам не нужен Автоматизатор!

Действия

бегать, висеть, есть, шпать

создать, редактировать, удалить, переключить

(активная/завершенная), переключить все

Контексты

норы, деревьяфильтры:

все, активные, завершенные

Page 35: Вам не нужен Автоматизатор!

Действия

бегать, висеть, есть, шпать

create, edit, delete, toggle, toggle all

Контексты

норы, деревьяфильтры:

all, active, completed

Page 36: Вам не нужен Автоматизатор!

Одно и то же ;)

Page 37: Вам не нужен Автоматизатор!

Сценарий (End to End)перебежать в нору

побегатьперебежать на дерево

повисетьпоесть

перебежать в норупошпать

Page 38: Вам не нужен Автоматизатор!

Сценарий (End to End)given at todomvc

add "a" toggle "a" filter active

filter completededit "a" to "a edited"

toggle "a edited"…

Page 39: Вам не нужен Автоматизатор!

Добавляем ожидаемые результатыgiven at todomvc

add "a" toggle "a" filter active

assert no tasks

filter completededit "a" to "a edited"

toggle "a edited"

assert no tasks

Page 40: Вам не нужен Автоматизатор!

given at todomvc add "a"

toggle "a"

filter active

assert no tasks

filter completededit "a" to "a edited"

toggle "a edited"

assert no tasks

Часто можем оставить “неявные” проверки

Page 41: Вам не нужен Автоматизатор!

Демо

Page 42: Вам не нужен Автоматизатор!

Начнем же кодить ;)given at todomvc

add "a" toggle "a" filter active

assert no tasks

filter completededit "a" to "a edited"

toggle "a edited"

assert no tasks

Page 43: Вам не нужен Автоматизатор!

Помогаем компьютеру понять код (на Java)givenAtTodoMVC();

add("a");

toggle("a"); filterActive();

assertNoTasks();

filterCompleted();

edit("a", "a edited");

toggle("a edited");

assertNoTasks();

//…

Page 44: Вам не нужен Автоматизатор!

public class TodoMVCTest { @Test public void testTasksLifeCycle(){ givenAtTodoMVC(); add("a"); toggle("a"); filterActive(); assertNoTasks(); filterCompleted(); edit("a", "a edited"); toggle("a edited"); assertNoTasks(); //... }}

Page 45: Вам не нужен Автоматизатор!

public class TodoMVCTest { @Test public void testTasksLifeCycle(){ givenAtTodoMVC(); add("a"); toggle("a"); filterActive(); assertNoTasks(); filterCompleted(); edit("a", "a edited"); toggle("a edited"); assertNoTasks(); //... }}

?

Page 46: Вам не нужен Автоматизатор!

public static void givenAtTodoMVC(){ open("https://todomvc4tasj.herokuapp.com/"); newTask.shouldBe(enabled);}

givenAtTodoMVC();

Page 47: Вам не нужен Автоматизатор!

public static SelenideElement newTask = $("#new-todo");

newTask

CSS Selector

Page 48: Вам не нужен Автоматизатор!

CSS Selector ?

Page 49: Вам не нужен Автоматизатор!
Page 50: Вам не нужен Автоматизатор!
Page 51: Вам не нужен Автоматизатор!
Page 52: Вам не нужен Автоматизатор!
Page 53: Вам не нужен Автоматизатор!
Page 54: Вам не нужен Автоматизатор!

[id=“new-todo"] <=> #new-todo

Page 55: Вам не нужен Автоматизатор!

public static SelenideElement newTask = $("#new-todo");

newTask

[id=“new-todo"] <=> #new-todo

Page 56: Вам не нужен Автоматизатор!

public static void add(String taskText) { newTask.setValue(taskText).pressEnter();}

add("a");

Page 57: Вам не нужен Автоматизатор!

public static void toggle(String taskText) { tasks.findBy(exactText(taskText)).$(".toggle").click();}

toggle("a");

Page 58: Вам не нужен Автоматизатор!

public static void toggle(String taskText) { tasks.findBy(exactText(taskText)).$(".toggle").click();}

toggle("a");

Page 59: Вам не нужен Автоматизатор!

public static ElementsCollection tasks = $$("#todo-list>li");

tasks

Page 60: Вам не нужен Автоматизатор!

public static ElementsCollection tasks = $$("#todo-list>li");

tasks

Page 61: Вам не нужен Автоматизатор!
Page 62: Вам не нужен Автоматизатор!

public static void toggle(String taskText) { tasks.findBy(exactText(taskText)).$(".toggle").click();}

toggle("a");

Page 63: Вам не нужен Автоматизатор!
Page 64: Вам не нужен Автоматизатор!

public static void filterActive(){ $(By.linkText("Active")).click();}

filterActive();

Page 65: Вам не нужен Автоматизатор!

By.linkText("Active")

Page 66: Вам не нужен Автоматизатор!

public static void assertNoTasks() { tasks.filterBy(visible).shouldBe(empty);}

assertNoTasks();

Page 67: Вам не нужен Автоматизатор!

tasks.filterBy(visible).shouldBe(empty);

Page 68: Вам не нужен Автоматизатор!

public class TodoMVCTest { @Test public void testTasksLifeCycle(){ givenAtTodoMVC(); add("a"); toggle("a"); filterActive(); assertNoTasks(); filterCompleted(); edit("a", "a edited"); toggle("a edited"); assertNoTasks(); //... }}

Page 69: Вам не нужен Автоматизатор!

open("https://todomvc4tasj.herokuapp.com/");newTask.shouldBe(enabled);

newTask = $("#new-todo");tasks = $$("#todo-list>li");

newTask.setValue("a").pressEnter();

tasks.findBy(exactText("a")).$(".toggle").click();

$(By.linkText("Active")).click();

tasks.filterBy(visible).shouldBe(empty);

Page 70: Вам не нужен Автоматизатор!

Просто?

Page 71: Вам не нужен Автоматизатор!

End to End Юнит/1-фича-на-тестСтиль тестов

перебежать на дерево

пошпать невидимым

перебежать в нору

побегать

перебежать на дерево

повисеть

поесть

перебежать в нору

пошпать

Page 72: Вам не нужен Автоматизатор!

public void testFiltering(){ givenAtTodoMVC(); add("a"); toggle("a"); filterActive(); assertNoTasks(); filterCompleted(); edit("a", "a edited"); toggle("a edited"); assertNoTasks(); //...}

public void testDelete(){ givenAtTodoMVC(); add("a"); delete("a"); assertNoTasks();}

End to End Юнит/1-фича-на-тестСтиль тестов

Page 73: Вам не нужен Автоматизатор!

End to EndПлюсы

+ больше покрытия за меньшее время

с меньшими усилиями во время реализации POC

для фреймворка+ интеграционное покрытие

+ в случае багов, дают более

полный репорт+ с репортах проще идентифицировать проблему

=> + меньше времени и

усилий на саппорт

“Фиче-тесты”

Page 74: Вам не нужен Автоматизатор!

End to EndКогда использовать?

+ в начале, во время разработки POC для фреймворка+ в спешке, для покрытия как можно большего количества фич+ для “черновиков”+ для интеграционного покрытия

+ для новых фич+ на регулярной

основе, когда POC утвержден

“Фиче-тесты”

Page 75: Вам не нужен Автоматизатор!

Разве это было сложно? :)

Page 76: Вам не нужен Автоматизатор!

Простые инструменты?

Page 77: Вам не нужен Автоматизатор!

Easy tools?Java: Selenide

Python: Selene is coming…

C#: NSelene is coming…

Ruby: Capybara

? JavaScript: Protractor

? PHP: Codeception

Page 78: Вам не нужен Автоматизатор!

Как начать?Выбрать язык

Выучить язык (книги, интерактивные туториалы, koans, exercism.io, google.com, другое)

Выбрать “простые инструменты”

Найти ментора (друг, программист на проекте, it-чаты, форумы, другое…)

Вперед!

Page 79: Вам не нужен Автоматизатор!

Как выбрать язык?Есть проект?

=> язык на котором пишут разработчики (бекенд)

Нет проекта но нужно побыстрее найти работу?

=> самый популярный язык на рынке

Нет проекта, не важна скорость нахождения работы, важно удовольствие от процесса программирования?

=> язык который подходит вам по стилю

Page 80: Вам не нужен Автоматизатор!

Нет простого инструмента для нужного языка?

Недостаточно опыта?

=> попросить программистов помочь

Есть опыт/время?

=> реализовать самому

Page 81: Вам не нужен Автоматизатор!

Послесловие

Есть хорошие практики в контексте,

но нет самых лучших практик.

(c) Cem Kaner, James Bach

Page 82: Вам не нужен Автоматизатор!

Вопросы

Page 83: Вам не нужен Автоматизатор!

Спасибо

github.com/yashaka

youtube.com/c/ItlabsNetUa

gitter.im/yashaka/better-selenium

slideshare.net/yashaka

[email protected] @yashaka