SlideShare una empresa de Scribd logo
1 de 37
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
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 A U T O M A T E D -
T E S T I N G . I N F O
BDD – это обсуждение
Когда команда собирается вместе для
обсуждения конкретной (новой)
функциональности.
Участники команды приходят к
общему пониманию работы системы,
иллюстрируя эту работу примерами.
4 A U T O M A T E D -
T E S T I N G . I N F O
BDD – это когда результат
обсуждения записывается
Раз мы уж мы приняли решение, так почему бы
не записать его? Или нарисовать?
Идея BDD не ограничивает нас ни в чём
5 A U T O M A T E D -
T E S T I N G . I N F O
BDD – это когда мы
автоматизируем важные примеры
В момент обсуждения – мы находим
требования. Вместе создаем спецификацию.
Если мы автоматизируем проверку
требований…
Документация будет проверять систему.
Это – живая документация
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.
Автоматизация
(Ваще супер!)
A U T O M A T E D -
T E S T I N G . I N F O
7
О ЧЕМ ДОКЛАД, КЭП?
8 A U T O M A T E D -
T E S T I N G . I N F O
BDD-инструмент… Так это ж топор!
• Рубить дерево
• Забивать гвозди
• Отбиваться от зомби
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 A U T O M A T E D -
T E S T I N G . I N F O
От «техники» к «бизнесу»
11 A U T O M A T E D -
T E S T I N G . I N F O
12 A U T O M A T E D -
T E S T I N G . I N F O
Unit Saibot
Очень гибкий, но порой,
его трудно разглядеть.
Особенно в темное время
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 A U T O M A T E D -
T E S T I N G . I N F O
Unit Saibot отчет
15 A U T O M A T E D -
T E S T I N G . I N F O
Unit Saibot – резюме
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 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 A U T O M A T E D -
T E S T I N G . I N F O
BDDfy-tana - отчеты
19 A U T O M A T E D -
T E S T I N G . I N F O
BDDfy-tana – резюме
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 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 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 A U T O M A T E D -
T E S T I N G . I N F O
Sub-SpecFlow - отчеты
24 A U T O M A T E D -
T E S T I N G . I N F O
Sub-SpecFlow – резюме
A U T O M A T E D -
T E S T I N G . I N F O
25
READY?
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 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 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 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 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 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 A U T O M A T E D -
T E S T I N G . I N F O
Не Выводы
• Не ограничивайтесь одним подходом
• Не ограничивайтесь одним инструментом
• Не брезгуйте помощью программистов
33 A U T O M A T E D -
T E S T I N G . I N F O
Выводы: инвестируйте в создание
фреймворка
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 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 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 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

Más contenido relacionado

La actualidad más candente

Расширь границы возможного вместе с Gradle
Расширь границы возможного вместе с GradleРасширь границы возможного вместе с Gradle
Расширь границы возможного вместе с Gradle
Aleksandr Tarasov
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
Krivoy Rog IT Community
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
Mikhail Davydov
 
За пределами PageObject
За пределами PageObjectЗа пределами PageObject
За пределами PageObject
automated-testing.info
 

La actualidad más candente (20)

Жизнь в изоляции
Жизнь в изоляцииЖизнь в изоляции
Жизнь в изоляции
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Расширь границы возможного вместе с Gradle
Расширь границы возможного вместе с GradleРасширь границы возможного вместе с Gradle
Расширь границы возможного вместе с Gradle
 
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDDkranonit S15 Vladimir Melnik - Ruby on Rails, BDD
kranonit S15 Vladimir Melnik - Ruby on Rails, BDD
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Kranonit s16 (python). sergey burma
Kranonit s16 (python). sergey burmaKranonit s16 (python). sergey burma
Kranonit s16 (python). sergey burma
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
 
Why it is not working
Why it is not workingWhy it is not working
Why it is not working
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
За пределами PageObject
За пределами PageObjectЗа пределами PageObject
За пределами PageObject
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Joker2014
Joker2014Joker2014
Joker2014
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Скриншоты как сервис
Скриншоты как сервисСкриншоты как сервис
Скриншоты как сервис
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
 

Destacado

ляпин Bdd и coded ui для прагматиков
ляпин   Bdd и coded ui для прагматиковляпин   Bdd и coded ui для прагматиков
ляпин Bdd и coded ui для прагматиков
Magneta AI
 
Bdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsBdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui tests
automated-testing.info
 
Запускаемая спецификация на SpecFlow с использованием WatiN для .NET
Запускаемая спецификация на SpecFlow с использованием WatiN для .NETЗапускаемая спецификация на SpecFlow с использованием WatiN для .NET
Запускаемая спецификация на SpecFlow с использованием WatiN для .NET
Dmytro Zharii
 
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveЭволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Return on Intelligence
 
2016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_8
2016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_82016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_8
2016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_8
Emil Burganov
 

Destacado (20)

Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)
 
ляпин Bdd и coded ui для прагматиков
ляпин   Bdd и coded ui для прагматиковляпин   Bdd и coded ui для прагматиков
ляпин Bdd и coded ui для прагматиков
 
Bdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsBdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui tests
 
REST in practice with Symfony2
REST in practice with Symfony2REST in practice with Symfony2
REST in practice with Symfony2
 
презентация Bdd
презентация Bddпрезентация Bdd
презентация Bdd
 
Запускаемая спецификация на SpecFlow с использованием WatiN для .NET
Запускаемая спецификация на SpecFlow с использованием WatiN для .NETЗапускаемая спецификация на SpecFlow с использованием WatiN для .NET
Запускаемая спецификация на SpecFlow с использованием WatiN для .NET
 
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehaveЭволюция к Behavior Driven Development на примере популярного фреймворка JBehave
Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
 
Автоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятАвтоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едят
 
Тестирование в изоляции: Играем в драконий покер
Тестирование в изоляции: Играем в драконий покерТестирование в изоляции: Играем в драконий покер
Тестирование в изоляции: Играем в драконий покер
 
Полуавтоматизация third-party API
Полуавтоматизация third-party APIПолуавтоматизация third-party API
Полуавтоматизация third-party API
 
BDD and Behave
BDD and BehaveBDD and Behave
BDD and Behave
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
Webometrics рейтинг вузов РБ (Республики Беларусь) август 2013 критерий влияние
Webometrics рейтинг вузов РБ (Республики Беларусь) август 2013 критерий влияниеWebometrics рейтинг вузов РБ (Республики Беларусь) август 2013 критерий влияние
Webometrics рейтинг вузов РБ (Республики Беларусь) август 2013 критерий влияние
 
My stuff
My stuffMy stuff
My stuff
 
9кл.
9кл.9кл.
9кл.
 
Методы коррекции размеров полового члена после оперативного лечения олеограну...
Методы коррекции размеров полового члена после оперативного лечения олеограну...Методы коррекции размеров полового члена после оперативного лечения олеограну...
Методы коррекции размеров полового члена после оперативного лечения олеограну...
 
NT-ProBNP
NT-ProBNPNT-ProBNP
NT-ProBNP
 
2016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_8
2016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_82016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_8
2016-03-22_Стратегия в стиле Agile. Внедрение корпоративных стратегий_8
 
Priapism (Приапизм)
Priapism (Приапизм)Priapism (Приапизм)
Priapism (Приапизм)
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
 

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

Обзор продуктов компании Umbrella security
Обзор продуктов компании Umbrella securityОбзор продуктов компании Umbrella security
Обзор продуктов компании Umbrella security
Alexey Komarov
 
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Yauheni Akhotnikau
 
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Ontico
 
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.
ScrumTrek
 

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

static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Обзор продуктов компании Umbrella security
Обзор продуктов компании Umbrella securityОбзор продуктов компании Umbrella security
Обзор продуктов компании Umbrella security
 
"Outside In". Web application testing.
"Outside In". Web application testing."Outside In". Web application testing.
"Outside In". Web application testing.
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времениАнтон Наумович - Контроль качества и сопровождение в реальном времени
Антон Наумович - Контроль качества и сопровождение в реальном времени
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Контроль качества и сопровождение программ в реальном времени
Контроль качества и сопровождение программ в реальном времениКонтроль качества и сопровождение программ в реальном времени
Контроль качества и сопровождение программ в реальном времени
 
Александра Алябьева "Поиск IT-специалистов. Шагнем за рамки привычного?"
Александра Алябьева "Поиск IT-специалистов. Шагнем за рамки привычного?"Александра Алябьева "Поиск IT-специалистов. Шагнем за рамки привычного?"
Александра Алябьева "Поиск IT-специалистов. Шагнем за рамки привычного?"
 
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
Акторы в C++: взгляд старого практикующего актородела (St. Petersburg C++ Use...
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
Maksym Antipov Hardware development as a hobby and a job
Maksym Antipov Hardware development as a hobby and a jobMaksym Antipov Hardware development as a hobby and a job
Maksym Antipov Hardware development as a hobby and a job
 
SE2016 IoT Maksym Antipov "Hardware development as a hobby and a job"
SE2016 IoT Maksym Antipov "Hardware development as a hobby and a job"SE2016 IoT Maksym Antipov "Hardware development as a hobby and a job"
SE2016 IoT Maksym Antipov "Hardware development as a hobby and a job"
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
Робототехника для прикладных программистов
Робототехника для прикладных программистовРобототехника для прикладных программистов
Робототехника для прикладных программистов
 
Moscow js node.js enterprise development
Moscow js node.js enterprise developmentMoscow js node.js enterprise development
Moscow js node.js enterprise development
 
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
Платежная система за год / Филипп Дельгядо (Информационные технологии и системы)
 
BDD
BDDBDD
BDD
 
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.Юлия Викторова; Александр Тарасов. DevOps без булшита.
Юлия Викторова; Александр Тарасов. DevOps без булшита.
 
DevOPS meetup
DevOPS meetupDevOPS meetup
DevOPS meetup
 

Тесты в стиле 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