codefest 2012. Корсаков С. — cucumber. Некоторые советы по...
DESCRIPTION
TRANSCRIPT
Некоторые советы по приготовлению
Сергей Корсаков,ООО Тамтэк
Проект
Other Services
Core
Задача
Other ServicesEmulators
Core
Test Framework
Требование:Минимум знаний о программировании, чтобы уметь писать тесты
Что такое Cucumber?
Cucumber (Wikipedia) - приложение для запуска автоматических приемочных тестов, написанных в стиле BDD.
Начало:
- GitHub - 6 апреля 2008
- Whois http://cukes.info/ - 18 декабря 2008
Пример 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
Пример Сценария
Scenario: Checking that calc works fineGiven I have a calculatorWhen I press 5And I press +And I press 6And I press =Then I should see 11
Как работает Cucumber
Cucumber
Сценарии Step Definitions
1 2
When I press 5When /^I press (\d+)$/ do |digit| @calculator.pressed digitend
@calculator.pressed digit
3
@calculator.value.should == expected_value
Кто Что Пишет
Feature
Scenario
Step Definitions
Тестируемый Объект
ManagerPr.Ow.
QADevManagerPr.Ow.
QADev
Dev
Dev QA
QA
Manager
Manager
Pr.Ow.
Pr.Ow.
Кто Что Пишет
Feature
Scenario – Общий Язык
Step Definitions
Тестируемый Объект
ManagerPr.Ow.
QADev (?)ManagerPr.Ow.
QADev
Dev
Синтаксис - Gherkin
Ключевые слова. И все они равны.
And I have a calculatorBut I press 5+5=When I should see 10
Синтаксис - Gherkin
Таблицы.
Given I have a calculatorWhen I press following buttons: | 5 | + | | 5 | = |Then I should see 10
Синтаксис - Gherkin
Шаблоны сценариев.
Scenario Outline: testing different calculatorsGiven I have a calculator "<calculator brand>"When I press 5+5=Then I should see <result>
Examples:|calculator brand|result||Casio |10 ||Sony |10 ||Broken One |5 |
Синтаксис - Gherkin
Теги.
@electronicsFeature:
@calculatorScenario: Testing my new calculator.....
@pc @desktopScenario: Testing my new PC
Синтаксис - Ruby
Хуки.
Before do @calculator = Calculator.newend
After do |scenario| @calculator.destroy if scenario.failed?end
Around('@fast') do |scenario, block| Timeout.timeout(0.5) do block.call endend
Синтаксис - Ruby
Преобразования.
// From String to NumberTransform /^(\d)+$/ do |number| number.to_iend
// From "04/11/86" To "11-04-86"Transform $DATE_US do |date| to_iso(date)end
Синтаксис - Ruby
Вложенные шаги.
When /^I do 1 and 2$/ step "I do 1" step "I do 2"end
Как готовить Cucumber
Шаг 1. Пишем сценарий.
Scenario: Check the calc button "5" Given I have a calculator When I press 5 Then I should see 5
Как готовить 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 pendingend
When /^I press (\d+)$/ do |arg1| pending...
Как готовить Cucumber
Шаг 3. Реализовываем step definitions
Given /^I have a calculator$/ do @calc = Calculator.newend
When /^I press (\d+)$/ do |digit| @calc.pressed digitend
Then /^I should see (\d+)$/ do |value| @calc.screenvalue.should == valueend
Как готовить 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"
1 scenario (1 failed)
3 steps (1 failed, 2 skipped)
Как готовить Cucumber
Шаг 5. Пишем код.
class Calculator def initialize @screen = "" end def pressed digit @screen += digit end def screenvalue @screen endend
Как готовить 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
Сахар
1. Ruby, Java (JVM-based: Scala, Groovy, ...), C#, Python, Erlang, ...2. Frameworks: RoR, Merb, Sinatra3. Java: Ant, Maven4. Интеграция с Selenium / Watir - за счет руби5. Интеграция с IDE (RubyMine лучше всех)6. Интеграция с CI-системами7. Репликация - testjour project (Ooops)8. Различные форматы отчетов (HTML, JUnit, PDF, Console, свой формат)
Проблемы
1. Один контекст для всех step definitions'ов2. Человеческий язык
- Трудности перевода- Ошибки
3. Слишком большие регулярные выражения4. Черный ящик с шагами5. Вложенные сценарии
Вложенные сценарии
Допустим есть ЯКогда я сделаю дело 1И я сделаю дело 2И я сделаю дело 3…И я сделаю дело 50Тогда я молодец
Когда я сделаю дело 51Тогда я все еще молодец
Когда я сделаю дело 52Тогда я уже не молодец
Немного Цифр
479 scenarios (19 failed, 3 pending, 457 passed)
4220 steps (19 failed, 93 skipped, 3 pending, 4105 passed)
222m44.200s
Ссылки
Сайт проекта:cukes.info
Wiki проекта: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
cukes.infogithub.com/cucumber/cucumber/wikicuke4ninja.com