Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
1. A U T O M A T E D -
T E S T I N G . I N F O
Тесты в стиле BDD на C#
Подходы и инструменты (SpecFlow, BDDfy)
Дмитрий Жарий,
http://zhariy.com
EPAM Systems, Май 2013
2. A U T O M A T E D -
T E S T I N G . I N F O
2
BEHAVIOR-DRIVEN DEVELOPMENT
Без лишней философии
3. 3 A U T O M A T E D -
T E S T I N G . I N F O
BDD – это обсуждение
Когда команда собирается вместе для
обсуждения конкретной (новой)
функциональности.
Участники команды приходят к
общему пониманию работы системы,
иллюстрируя эту работу примерами.
4. 4 A U T O M A T E D -
T E S T I N G . I N F O
BDD – это когда результат
обсуждения записывается
Раз мы уж мы приняли решение, так почему бы
не записать его? Или нарисовать?
Идея BDD не ограничивает нас ни в чём
5. 5 A U T O M A T E D -
T E S T I N G . I N F O
BDD – это когда мы
автоматизируем важные примеры
В момент обсуждения – мы находим
требования. Вместе создаем спецификацию.
Если мы автоматизируем проверку
требований…
Документация будет проверять систему.
Это – живая документация
6. 6 A U T O M A T E D -
T E S T I N G . I N F O
Если бы Маслоу придумал
треугольник BDD
1. Обсуждение. Общие понимание (Достаточно)
2. Запись требований (Круто)
3.
Автоматизация
(Ваще супер!)
7. A U T O M A T E D -
T E S T I N G . I N F O
7
О ЧЕМ ДОКЛАД, КЭП?
8. 8 A U T O M A T E D -
T E S T I N G . I N F O
BDD-инструмент… Так это ж топор!
• Рубить дерево
• Забивать гвозди
• Отбиваться от зомби
9. 9 A U T O M A T 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 (юнит тест фреймворки ) – это код.
Понятен разработчикам
10. 10 A U T O M A T E D -
T E S T I N G . I N F O
От «техники» к «бизнесу»
11. 11 A U T O M A T E D -
T E S T I N G . I N F O
12. 12 A U T O M A T E D -
T E S T I N G . I N F O
Unit Saibot
Очень гибкий, но порой,
его трудно разглядеть.
Особенно в темное время
13. 13 A U T O M A T 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);
}
14. 14 A U T O M A T E D -
T E S T I N G . I N F O
Unit Saibot отчет
15. 15 A U T O M A T E D -
T E S T I N G . I N F O
Unit Saibot – резюме
16. 16 A U T O M A T E D -
T E S T I N G . I N F O
BDDfy-tana
Находится где-то между
добром (кодом) и
требованиями…
https://github.com/TestStack/TestStack.BDDfy
17. 17 A U T O M A T 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();
}
18. 18 A U T O M A T E D -
T E S T I N G . I N F O
BDDfy-tana - отчеты
19. 19 A U T O M A T E D -
T E S T I N G . I N F O
BDDfy-tana – резюме
20. 20 A U T O M A T E D -
T E S T I N G . I N F O
Sub-SpecFlow
Ну… работа на стороне
требований… это значит
часто «морозиться»
http://www.specflow.org/specflownew/
21. 21 A U T O M A T 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"-ки
22. 22 A U T O M A T 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”
Это не бизнес-сценарий. Это – КОД
23. 23 A U T O M A T E D -
T E S T I N G . I N F O
Sub-SpecFlow - отчеты
24. 24 A U T O M A T E D -
T E S T I N G . I N F O
Sub-SpecFlow – резюме
25. A U T O M A T E D -
T E S T I N G . I N F O
25
READY?
26. 26 A U T O M A T 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-х фигур – объявляется ничья.
27. 27 A U T O M A T E D -
T E S T I N G . I N F O
Round 1. Юнит-тесты. Выводы
Unit Saibot BDDfy-tana Sub SpecFlow
Читабельность* высокая высокая высокая
Усилия на
поддержку
очень низкие низкие средние
Скорость
создания
очень высокая высокая средняя
Скорость прохода очень высокая очень высокая очень высокая
* Читают тесты -- программисты
28. 28 A U T O M A T E D -
T E S T I N G . I N F O
Round 2. Fight!
Системные тесты на Selenium
(Record&Play)
29. 29 A U T O M A T 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 не позволяет достичь низких усилий на поддержку
30. 30 A U T O M A T E D -
T E S T I N G . I N F O
Round 3. Fight!
Свой Фреймворк
Лицо: BDD-фреймворк, отчеты и т.д.
Тело: Свой фреймворк, абстракции,
библиотеки методов, подходы,
лучшие практики, Page Objects,
Ноги: Юнит-тест фреймворк:
MbUnit, NUnit, MSTest
31. 31 A U T O M A T E D -
T E S T I N G . I N F O
Round 3. Системные тесты
(Framework). Выводы
Unit Saibot BDDfy-tana Sub SpecFlow
Читабельность* высокая высокая очень высокая
Усилия на
поддержку
низкие низкие средние
Скорость
создания
высокая высокая средняя
Скорость
прохода**
средняя средняя средняя
* Читабельность теста, не кода
** Системные UI тесты по своей природе не могут быть быстрыми
32. 32 A U T O M A T E D -
T E S T I N G . I N F O
Не Выводы
• Не ограничивайтесь одним подходом
• Не ограничивайтесь одним инструментом
• Не брезгуйте помощью программистов
33. 33 A U T O M A T E D -
T E S T I N G . I N F O
Выводы: инвестируйте в создание
фреймворка
34. 34 A U T O M A T 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
35. 35 A U T O M A T 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/
36. 36 A U T O M A T E D -
T E S T I N G . I N F O
Инструменты (C#)
BDDfy
http://www.mehdi-khalili.com/bddify-in-action/introduction
SpecFlow
http://www.specflow.org/specflownew/
MSpec
https://github.com/machine/machine.specifications
37. 37 A U T O M A T E D -
T E S T I N G . I N F O
Дмитрий Жарий
http://zhariy.com
EPAM Systems
Специально для
посиделок AT.info