37
AUTOMATED- TESTING.INFO Тесты в стиле BDD на C# Подходы и инструменты (SpecFlow, BDDfy) Дмитрий Жарий, http://zhariy.com EPAM Systems, Май 2013

Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

A U T O M AT E D -T E S T I N G . I N F O

Тесты в стиле BDD на C#Подходы и инструменты (SpecFlow, BDDfy)

Дмитрий Жарий, http://zhariy.com

EPAM Systems, Май 2013

Page 2: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

A U T O M AT E D -T E S T I N G . I N F O

2

BEHAVIOR-DRIVEN DEVELOPMENT

Без лишней философии

Page 3: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

3 A U T O M AT E D -T E S T I N G . I N F O

BDD – это обсуждение

Когда команда собирается вместе

для обсуждения конкретной (новой)

функциональности.

Участники команды приходят к

общему пониманию работы системы,

иллюстрируя эту работу примерами.

Page 4: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

4 A U T O M AT E D -T E S T I N G . I N F O

BDD – это когда результат обсуждения записывается

Раз мы уж мы приняли решение, так

почему бы не записать его? Или

нарисовать?

Идея BDD не ограничивает нас ни в

чём

Page 5: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

5 A U T O M AT E D -T E S T I N G . I N F O

BDD – это когда мы автоматизируем важные примеры

В момент обсуждения – мы находим

требования. Вместе создаем

спецификацию.

Если мы автоматизируем проверку

требований…

Документация будет проверять

систему.

Это – живая документация

Page 6: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

6 A U T O M AT E D -T E S T I N G . I N F O

Если бы Маслоу придумал треугольник BDD

1. Обсуждение. Общие понимание (Достаточно)

2. Запись требований (Круто)

3. Автоматизация(Ваще супер!)

Page 7: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

A U T O M AT E D -T E S T I N G . I N F O

7

О ЧЕМ ДОКЛАД, КЭП?

Page 8: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

8 A U T O M AT E D -T E S T I N G . I N F O

BDD-инструмент… Так это ж топор!

•Рубить дерево•Забивать гвозди•Отбиваться от зомби

Page 9: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

9 A U T O M AT E D -T E S T I N G . I N F O

В BDD есть инструменты, которые решают определенную задачу

1. SpecFlow (Cucumber, JBehave )Используется для создания высокоуровневых сценариев для «бизнеса»

2. BDDfy/MSpec (Rspec, easyb…) ближе к коду, ближе к разработчикам

3. Unit Tests (юнит тест фреймворки ) – это код. Понятен разработчикам

Page 10: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

10 A U T O M AT E D -T E S T I N G . I N F O

От «техники» к «бизнесу»

Page 11: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

11 A U T O M AT E D -T E S T I N G . I N F O

Page 12: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

12 A U T O M AT E D -T E S T I N G . I N F O

Unit Saibot

Очень гибкий, но порой, его трудно разглядеть.Особенно в темное время

Page 13: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

13 A U T O M AT E D -T E S T I N G . I N F O

Unit Saibot - код[TestMethod]public void When_Player_X_puts_three_in_a_row_it_should_win(){ // Arrange var row1 = new[] { "X", "X", "O" }; var row2 = new[] { "X", "O", "O" }; var row3 = new[] { " ", " ", " " }; var game = new Game(row1, row2, row3);

// Act

game.PlayAt(2, 0);

// Assert

Assert.AreEqual("X", game.Winner);}

Page 14: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

14 A U T O M AT E D -T E S T I N G . I N F O

Unit Saibot отчет

Page 15: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

15 A U T O M AT E D -T E S T I N G . I N F O

Unit Saibot – резюме

Page 16: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

16 A U T O M AT E D -T E S T I N G . I N F O

BDDfy-tana

Находится где-то междудобром (кодом) и требованиями…

https://github.com/TestStack/TestStack.BDDfy

Page 17: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

17 A U T O M AT E D -T E S T I N G . I N F O

BDDfy-tana - код

[TestMethod]public void X_Wins_situation(){ var row1 = new[] { "X", "X", "O" }; var row2 = new[] { "X", "O", "O" }; var row3 = new[] { " ", " ", " " };

this.Given(_ => Given_the_following_board(row1, row2, row3)) .When(_ => When_X_moves_at(2, 0)) .Then(_ => Then_the_winner_should_be("X")) .BDDfy();}

Page 18: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

18 A U T O M AT E D -T E S T I N G . I N F O

BDDfy-tana - отчеты

Page 19: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

19 A U T O M AT E D -T E S T I N G . I N F O

BDDfy-tana – резюме

Page 20: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

20 A U T O M AT E D -T E S T I N G . I N F O

Sub-SpecFlow

Ну… работа на сторонетребований… это значитчасто «морозиться»

http://www.specflow.org/specflownew/

Page 21: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

21 A U T O M AT E D -T E S T I N G . I N F O

Sub-SpecFlow (бизнес сценарий)Сценарий: Ничейный исход игры Дано игровая доска в след. состоянии: | * | C0 | C1 | C2 | | Р0 | X | X | O | | Р1 | O | O | X | | Р2 | | O | X | Когда "X"-ки делают ход Ряд="2", Строка="0" То игра должна завершиться ничьей

Сценарий: 0-ки выигрывают Дано игровая доска в след. состоянии: | * | C0 | C1 | C2 | | Р0 | X | X | O | | Р1 | X | O | | | Р2 | | | | Когда “0"-ки делают ход Ряд="2", Строка="0" Тогда победить должны “0"-ки

Page 22: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

22 A U T O M AT E D -T E S T I N G . I N F O

Sub-SpecFlow (Keyword-driven)Сценарий: Создание нового проекта Дано Залогинится «admin» «admin» И Кликнуть ссылка-текст «Проекты» И Кликнуть ссылка-css «a[dataid=’addnew’]» И Напечатать «Привет» в поле-css “input[id=name]”

Когда Нажать кнопка-id “btnSave”

То Подождать 2000 И Проверить заголовок содержит “Привет - Project”

Это не бизнес-сценарий. Это – КОД

Page 23: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

23 A U T O M AT E D -T E S T I N G . I N F O

Sub-SpecFlow - отчеты

Page 24: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

24 A U T O M AT E D -T E S T I N G . I N F O

Sub-SpecFlow – резюме

Page 25: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

A U T O M AT E D -T E S T I N G . I N F O

25

READY?

Page 26: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

26 A U T O M AT E D -T E S T I N G . I N F O

Round 1. Fight!Юнит тест для игрового движка

Цель игры в крестики–нолики – выстроить ряд из трех своих фигур. Вы играете на поле 3 на 3. Первый игрок известен как X, второй – 0. Игроки по очереди ставят X-ки и 0-ки на игровом поле пока один не выстроит 3 фигуры в ряд или все 9 квадратов не будут заполнены. X-ки всегда ходят первыми. В случае, если все квадраты заполнены, и ни один игрок не выстроил ряд из 3-х фигур – объявляется ничья.

Page 27: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

27 A U T O M AT E D -T E S T I N G . I N F O

Round 1. Юнит-тесты. Выводы

Unit Saibot BDDfy-tana Sub SpecFlow

Читабельность* высокая высокая высокая

Усилия на поддержку очень низкие низкие средние

Скорость создания

очень высокая высокая средняя

Скорость прохода

очень высокая

очень высокая

очень высокая

* Читают тесты -- программисты

Page 28: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

28 A U T O M AT E D -T E S T I N G . I N F O

Round 2. Fight!Системные тесты на Selenium (Record&Play)

Page 29: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

29 A U T O M AT E D -T E S T I N G . I N F O

Round 2. Системные тесты (Record&Play). Выводы

Unit Saibot BDDfy-tana Sub SpecFlow

Читабельность* низкая высокая высокая

Усилия на поддержку** высокие высокие высокие

Скорость создания низкая низкая низкая

Скорость прохода средняя средняя средняя

* Читабельность теста, не кода

** Сам подход Record&Play не позволяет достичь низких усилий на поддержку

Page 30: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

30 A U T O M AT E D -T E S T I N G . I N F O

Round 3. Fight!Свой Фреймворк

Лицо: BDD-фреймворк, отчеты и т.д.

Тело: Свой фреймворк, абстракции, библиотеки методов, подходы, лучшие практики, Page Objects,

Ноги: Юнит-тест фреймворк: MbUnit, NUnit, MSTest

Page 31: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

31 A U T O M AT E D -T E S T I N G . I N F O

Round 3. Системные тесты (Framework). Выводы

Unit Saibot BDDfy-tana Sub SpecFlow

Читабельность* высокая высокая очень

высокая

Усилия на поддержку низкие низкие средние

Скорость создания высокая высокая средняя

Скорость прохода** средняя средняя средняя

* Читабельность теста, не кода

** Системные UI тесты по своей природе не могут быть быстрыми

Page 32: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

32 A U T O M AT E D -T E S T I N G . I N F O

Не Выводы

• Не ограничивайтесь одним подходом

• Не ограничивайтесь одним инструментом

• Не брезгуйте помощью программистов

Page 33: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

33 A U T O M AT E D -T E S T I N G . I N F O

Выводы: инвестируйте в создание фреймворка

Page 34: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

34 A U T O M AT E D -T E S T I N G . I N F O

Материалы. Наглый самопиар

Презентация на ATDays 2013. “За пределами PageObject” (видео, слайды, код)О том, как создать свой фремворк автоматизации UI тестирования с нуля http://blog.zhariy.com/2013/02/atdays-pageobject.html

Доклад «Создание читабельных отчетов для автоматизации тестирования на .NET/C# + Webdriver + Gallio Icarus/MbUnit + BDDfy» (видео)Демонстрация работы Gallio Icarus и BDDfy для создания красивых отчетов послепрохода тестовhttp://blog.zhariy.com/2012/12/confet-netc-webdriver-gallio.html

Слайды доклада «Запускаемая спецификация на SpecFlow с использованием WatiN для .NET» (слайды)Как работает Given When Then. Какие бывают сценарии http://www.slideshare.net/dzhariy/specflow-watin-net

Page 35: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

35 A U T O M AT E D -T E S T I N G . I N F O

МатериалыАвтоматизация тестирования Web-приложенийОтличная статья, описывающая построение своего фреймворка тестирования, использования PageObjects, SpecFlow (C#)http://habrahabr.ru/post/178407/

Подборка лучших статей по BDDТолько самые лучшие статьи, объясняющие что такое BDD и как применять эту методологию http://goodrequirements.com/bdd/

Книги

http://it-ebooks.info/book/675/http://www.specificationbyexample.com/

Page 36: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

36 A U T O M AT E D -T E S T I N G . I N F O

Инструменты (C#)BDDfyhttp://www.mehdi-khalili.com/bddify-in-action/introduction

SpecFlowhttp://www.specflow.org/specflownew/

MSpechttps://github.com/machine/machine.specifications

Page 37: Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)

37 A U T O M AT E D -T E S T I N G . I N F O

Дмитрий Жарийhttp://zhariy.comEPAM SystemsСпециально для посиделок AT.info