Upload
dmytro-zharii
View
3.560
Download
4
Embed Size (px)
DESCRIPTION
Citation preview
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
A U T O M AT E D -T E S T I N G . I N F O
2
BEHAVIOR-DRIVEN DEVELOPMENT
Без лишней философии
3 A U T O M AT E D -T E S T I N G . I N F O
BDD – это обсуждение
Когда команда собирается вместе
для обсуждения конкретной (новой)
функциональности.
Участники команды приходят к
общему пониманию работы системы,
иллюстрируя эту работу примерами.
4 A U T O M AT E D -T E S T I N G . I N F O
BDD – это когда результат обсуждения записывается
Раз мы уж мы приняли решение, так
почему бы не записать его? Или
нарисовать?
Идея BDD не ограничивает нас ни в
чём
5 A U T O M AT E D -T E S T I N G . I N F O
BDD – это когда мы автоматизируем важные примеры
В момент обсуждения – мы находим
требования. Вместе создаем
спецификацию.
Если мы автоматизируем проверку
требований…
Документация будет проверять
систему.
Это – живая документация
6 A U T O M AT E D -T E S T I N G . I N F O
Если бы Маслоу придумал треугольник BDD
1. Обсуждение. Общие понимание (Достаточно)
2. Запись требований (Круто)
3. Автоматизация(Ваще супер!)
A U T O M AT E D -T E S T I N G . I N F O
7
О ЧЕМ ДОКЛАД, КЭП?
8 A U T O M AT E D -T E S T I N G . I N F O
BDD-инструмент… Так это ж топор!
•Рубить дерево•Забивать гвозди•Отбиваться от зомби
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 (юнит тест фреймворки ) – это код. Понятен разработчикам
10 A U T O M AT E D -T E S T I N G . I N F O
От «техники» к «бизнесу»
11 A U T O M AT E D -T E S T I N G . I N F O
12 A U T O M AT E D -T E S T I N G . I N F O
Unit Saibot
Очень гибкий, но порой, его трудно разглядеть.Особенно в темное время
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);}
14 A U T O M AT E D -T E S T I N G . I N F O
Unit Saibot отчет
15 A U T O M AT E D -T E S T I N G . I N F O
Unit Saibot – резюме
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
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();}
18 A U T O M AT E D -T E S T I N G . I N F O
BDDfy-tana - отчеты
19 A U T O M AT E D -T E S T I N G . I N F O
BDDfy-tana – резюме
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/
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"-ки
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”
Это не бизнес-сценарий. Это – КОД
23 A U T O M AT E D -T E S T I N G . I N F O
Sub-SpecFlow - отчеты
24 A U T O M AT E D -T E S T I N G . I N F O
Sub-SpecFlow – резюме
A U T O M AT E D -T E S T I N G . I N F O
25
READY?
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-х фигур – объявляется ничья.
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
Читабельность* высокая высокая высокая
Усилия на поддержку очень низкие низкие средние
Скорость создания
очень высокая высокая средняя
Скорость прохода
очень высокая
очень высокая
очень высокая
* Читают тесты -- программисты
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)
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 не позволяет достичь низких усилий на поддержку
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
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 тесты по своей природе не могут быть быстрыми
32 A U T O M AT E D -T E S T I N G . I N F O
Не Выводы
• Не ограничивайтесь одним подходом
• Не ограничивайтесь одним инструментом
• Не брезгуйте помощью программистов
33 A U T O M AT E D -T E S T I N G . I N F O
Выводы: инвестируйте в создание фреймворка
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
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/
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
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