3. Задача
Test Framework
Core
Требование:
Минимум знаний о
программировании, чтобы
уметь писать тесты Other Services
Emulators
4. Что такое Cucumber?
Cucumber (Wikipedia) - приложение для запуска
автоматических приемочных тестов, написанных в
стиле BDD.
Начало:
- GitHub - 6 апреля 2008
- Whois http://cukes.info/ - 18 декабря 2008
5. Пример Feature
Feature:
In order to check a calculator
As a regular user
I want ...
Scenario: Checking that calc works fine
// Steps
Scenario: Checking something else
// Steps
6. Пример Сценария
Scenario: Checking that calc works fine
Given I have a calculator
When I press 5
And I press +
And I press 6
And I press =
Then I should see 11
7. Как работает Cucumber
Сценарии Step Definitions
1 2
When /^I press (d+)$/ do |digit|
When I press 5 Cucumber @calculator.pressed digit
end
3
@calculator.pressed digit
@calculator.value.should == expected_value
8. Кто Что Пишет
Pr.Ow. Manager Dev QA Feature
Pr.Ow. Manager Dev QA Scenario
Pr.Ow. Manager Dev QA Step Definitions
Pr.Ow. Manager Dev QA Тестируемый Объект
9. Кто Что Пишет
Pr.Ow. Manager Feature
Pr.Ow. Manager Dev (?) QA Scenario – Общий Язык
Dev QA Step Definitions
Dev Тестируемый Объект
10. Синтаксис - Gherkin
Ключевые слова. И все они равны.
And I have a calculator
But I press 5+5=
When I should see 10
12. Синтаксис - Gherkin
Шаблоны сценариев.
Scenario Outline: testing different calculators
Given I have a calculator "<calculator brand>"
When I press 5+5=
Then I should see <result>
Examples:
|calculator brand|result|
|Casio |10 |
|Sony |10 |
14. Синтаксис - Ruby
Хуки.
Before do
@calculator = Calculator.new
end
After do |scenario|
@calculator.destroy if scenario.failed?
end
Around('@fast') do |scenario, block|
15. Синтаксис - Ruby
Преобразования.
// From String to Number
Transform /^(d)+$/ do |number|
number.to_i
end
// From "04/11/86" To "11-04-86"
Transform $DATE_US do |date|
to_iso(date)
end
17. Как готовить Cucumber
Шаг 1. Пишем сценарий.
Scenario: Check the calc button "5"
Given I have a calculator
When I press 5
Then I should see 5
18. Как готовить Cucumber
Шаг 2. Запускаем Cucumber
1 scenario (1 undefined)
3 steps (3 undefined)
0m0.035s
You can implement step definitions for
undefined steps with these snippets:
Given /^I have a calculator$/ do
pending
19. Как готовить Cucumber
Шаг 3. Реализовываем step definitions
Given /^I have a calculator$/ do
@calc = Calculator.new
end
When /^I press (d+)$/ do |digit|
@calc.pressed digit
end
Then /^I should see (d+)$/ do |value|
20. Как готовить Cucumber
Шаг 4. Запускаем еще раз
Scenario: Check the calc button "5"
Given I have a calculator
uninitialized constant Calculator
<... Stack Trace ...>
features/test.feature:4:in `Given I have a
calculator'
When I press 5
Then I should see 5
Failing Scenarios:
cucumber features/test.feature:3 # Scenario: Check
the calc button "5"
21. Как готовить Cucumber
Шаг 5. Пишем код.
class Calculator
def initialize
@screen = ""
end
def pressed digit
@screen += digit
end
22. Как готовить Cucumber
Шаг 6. Запускаем еще раз и радуемся.
Scenario: Check the calc button "5"
Given I have a calculator
When I press 5
Then I should see 5
1 scenario (1 passed)
3 steps (3 passed)
0m0.033s
23. Сахар
1. Ruby, Java (JVM-based: Scala, Groovy, ...), C#,
Python, Erlang, ...
2. Frameworks: RoR, Merb, Sinatra
3. Java: Ant, Maven
4. Интеграция с Selenium / Watir - за счет руби
5. Интеграция с IDE (RubyMine лучше всех)
6. Интеграция с CI-системами
7. Репликация - testjour project (Ooops)
8. Различные форматы отчетов (HTML, JUnit, PDF,
Console, свой формат)
24. Проблемы
1. Один контекст для всех step definitions'ов
2. Человеческий язык
- Трудности перевода
- Ошибки
3. Слишком большие регулярные выражения
4. Черный ящик с шагами
5. Вложенные сценарии
25. Вложенные сценарии
Допустим есть Я
Когда я сделаю дело 1
И я сделаю дело 2
И я сделаю дело 3
…
И я сделаю дело 50
Тогда я молодец
Когда я сделаю дело 51 Когда я сделаю дело 52
Тогда я все еще молодец Тогда я уже не молодец
28. cukes.info
github.com/cucumber/cucumber/wiki
cuke4ninja.com
Вопросы? Scenario: Check that CodeFest is cool.
Given I gone to the CodeFest
When I am drinking free whiskey
And Listening smart guys
Then I should be happy
1 scenario (1 passed)
Сергей Корсаков, 4 steps (4 passed)
ООО Тамтэк 960m0s
skorsakov@thumbtack.net