codefest 2012. Корсаков С. — cucumber. Некоторые советы по...

28
Некоторые советы по приготовлению Сергей Корсаков, ООО Тамтэк

Upload: codefest

Post on 29-Nov-2014

1.144 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Некоторые советы по приготовлению

Сергей Корсаков,ООО Тамтэк

Page 2: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Проект

Other Services

Core

Page 3: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Задача

Other ServicesEmulators

Core

Test Framework

Требование:Минимум знаний о программировании, чтобы уметь писать тесты

Page 4: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Что такое Cucumber?

Cucumber (Wikipedia) - приложение для запуска автоматических приемочных тестов, написанных в стиле BDD.

Начало:

- GitHub - 6 апреля 2008

- Whois http://cukes.info/ - 18 декабря 2008

Page 5: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Пример 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

Page 6: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Пример Сценария

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

Page 7: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как работает 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

Page 8: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Кто Что Пишет

Feature

Scenario

Step Definitions

Тестируемый Объект

ManagerPr.Ow.

QADevManagerPr.Ow.

QADev

Dev

Dev QA

QA

Manager

Manager

Pr.Ow.

Pr.Ow.

Page 9: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Кто Что Пишет

Feature

Scenario – Общий Язык

Step Definitions

Тестируемый Объект

ManagerPr.Ow.

QADev (?)ManagerPr.Ow.

QADev

Dev

Page 10: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - Gherkin

Ключевые слова. И все они равны.

And I have a calculatorBut I press 5+5=When I should see 10

Page 11: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - Gherkin

Таблицы.

Given I have a calculatorWhen I press following buttons: | 5 | + | | 5 | = |Then I should see 10

Page 12: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - 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 |

Page 13: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - Gherkin

Теги.

@electronicsFeature:

@calculatorScenario: Testing my new calculator.....

@pc @desktopScenario: Testing my new PC

Page 14: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - 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

Page 15: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - 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

Page 16: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Синтаксис - Ruby

Вложенные шаги.

When /^I do 1 and 2$/ step "I do 1" step "I do 2"end

Page 17: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как готовить Cucumber

Шаг 1. Пишем сценарий.

Scenario: Check the calc button "5" Given I have a calculator When I press 5 Then I should see 5

Page 18: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как готовить 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...

Page 19: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как готовить 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

Page 20: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как готовить 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)

Page 21: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как готовить Cucumber

Шаг 5. Пишем код.

class Calculator def initialize @screen = "" end def pressed digit @screen += digit end def screenvalue @screen endend

Page 22: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Как готовить 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

Page 23: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Сахар

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, свой формат)

Page 24: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Проблемы

1. Один контекст для всех step definitions'ов2. Человеческий язык

- Трудности перевода- Ошибки

3. Слишком большие регулярные выражения4. Черный ящик с шагами5. Вложенные сценарии

Page 25: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Вложенные сценарии

Допустим есть ЯКогда я сделаю дело 1И я сделаю дело 2И я сделаю дело 3…И я сделаю дело 50Тогда я молодец

Когда я сделаю дело 51Тогда я все еще молодец

Когда я сделаю дело 52Тогда я уже не молодец

Page 26: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Немного Цифр

479 scenarios (19 failed, 3 pending, 457 passed)

4220 steps (19 failed, 93 skipped, 3 pending, 4105 passed)

222m44.200s

Page 27: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Ссылки

Сайт проекта:cukes.info

Wiki проекта:github.com/cucumber/cucumber/wiki

Огурец для ниндзя (Рекомендовано!):cuke4ninja.com

Page 28: CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению

Вопросы?

Сергей Корсаков,ООО Тамтэк

[email protected]

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