SlideShare a Scribd company logo
BDD girls battle
JBehave vs Cucumber
1
Герои битвы
‣ JBEHAVE
‣ Чернышева Анна
‣ CUCUMBER
‣ Ковалева Юлия
2
Процессы разработки и тестирования
в Альфа Лаборатории
‣ BDD
‣ парное программирование
‣ небольшие SCRUM команды
‣ стремление к кросс
функциональности команд
3
Стоит ли переписывать
готовый фреймворк на новый
ради нескольких преимуществ?
4
‣ Как решать похожие проблемы?
Нужно ли решать?
‣ А если ничего не предпринимать?
‣ Наши решения и выводы - это не
панацея ...
‣ Максимум полезного в одном
докладе
‣ Возможно мы что-то не учли...
Зачем нужна
битва?
5
Selenium
JUnit
JAVA
HttpClient
Serenity
JBehave
Maven
6
Selenium
JUnit
JAVA
HttpClient
Serenity
JBehave
Maven
7
Selenium Selenide
JAVA
HttpClient
Serenity
JBehave
Maven Gradle
Rest Assured
Cucumber
JUnit
8
9
Написание сценариев
10
Раунд 1 Ключевые слова
Задача: Я хочу использовать текст шагов без
привязки к ключевым словам
When currency equals USD
Then currency equals USD
11
JBehave
12
Cucumber "ru": {
"and": [
"* ",
"И ",
"К тому же ",
"Также "
],
"background": [
"Предыстория",
"Контекст"
],
"but": [
"* ",
"Но ",
"А "
],
gherkin-languages.json
* = And | But | Given | When | Then
When currency equals USD
Then currency equals USD
Given currency equals USD
* currency equals USD
13
Cucumber
14
Cucumber Win
1 / 0
15
Раунд 2 Меньше повторов
Задача: Я хочу использовать одну реализацию
шага для нескольких текстовых описаний.
Then there are 5 cards in the list
Then there are 5 cards in the roll
public void checkCardsAmountInTheList(int amount) {
// ...
}
16
JBehave
17
JBehave
18
JBehave
19
Cucumber
‣ Then there are 5 cards in the list
‣ Then there are 5 cards in the roll
20
JBehave Win
1 / 1 0
21
Раунд 3 Работа с датами
Задача: Я хочу, чтобы дата передавалась в шаг в
определенном формате.
22
JBehave
@Given("ISO date format is $date")
public void theIsoDateIs(@Named("date") Date date) {
// ...
}
Given ISO date format is 09/09/2009
23
private ParameterConverter[] customConverters() {
List<ParameterConverter> converters = new ArrayList<ParameterConverter>();
converters.add(new DateConverter(new SimpleDateFormat("yyyy-MM-dd")));
return converters.toArray(new ParameterConverter[converters.size()]);
}
JBehave
24
private ParameterConverter[] customConverters() {
List<ParameterConverter> converters = new ArrayList<ParameterConverter>();
converters.add(new DateConverter(new SimpleDateFormat("yyyy-MM-dd")));
return converters.toArray(new ParameterConverter[converters.size()]);
}
JBehave
25
@Override
public Configuration configuration(){
return new MostUsefulConfiguration()
.useParameterConverters(new ParameterConverters()
.addConverters(customConverters()))
.useStoryLoader(new LoadFromClasspath(this.getClass()))
.useStoryReporterBuilder(new StoryReporterBuilder()
.withDefaultFormats()
.withFormats(Format.CONSOLE, Format.TXT));
}
JBehave
26
Cucumber
27
Feature: Date format of current date
Scenario: Correct format
* current date is 12.06.2014
Scenario: Incorrect format
* current date is 2014-04-12
Cucumber
28
Cucumber (падающий тест)
ConversionException: Couldn't convert "2014-04-12"
to an instance of: [class java.util.Date]
29
Cucumber Win
1 2 / 1
30
Раунд 4 Ключевые слова на разных языках
Задача: Владелец продукта хочет получать отчеты
о тестировании на русском языке.
31
JBehave
Создать properties файл с описанием ключевых слов
Для русских слов i18n/keywords_ru.properties:
Символы Unicode, используя кодировку ISO-8859-1
32
JBehave
Определить ключевые слова в конфигурациях
@Override
public Configuration configuration() {
//...
Keywords keywords = new LocalizedKeywords(new Locale("ru"));
//...
}
33
JBehave
Определить ключевые слова в конфигурациях
@Override
public Configuration configuration(){
ClassLoader classLoader = this.getClass().getClassLoader();
Keywords keywords = new LocalizedKeywords(new Locale("ru"));
return new MostUsefulConfiguration()
.useKeywords(keywords)
.useStoryParser(new RegexStoryParser(keywords))
//...
}
34
JBehave
Определить ключевые слова в конфигурациях
@Override
public Configuration configuration(){
ClassLoader classLoader = this.getClass().getClassLoader();
Keywords keywords = new LocalizedKeywords(new Locale("ru"));
return new MostUsefulConfiguration()
.useKeywords(keywords)
.useStoryParser(new RegexStoryParser(keywords))
//...
}
35
JBehave
36
Cucumber
37
import cucumber.api.java
Cucumber + Java 8
38
Cucumber
39
Cucumber Win
2 3 / 1
40
Раунд 5 Аннотации жизненного цикла тестов
Задача: Организовать для тестов пред/пост
обработчики:
* делать скриншот при каждом фейле
* очищать куки перед каждым тестом
41
JBehave
@BeforeScenario
@BeforeScenario
public void beforeEachScenario() {
// ...
}
42
JBehave
@BeforeStory
@BeforeStory // @BeforeStory(uponGivenStory=false)
public void beforeStory() {
// ...
}
@BeforeStory(uponGivenStory=true)
public void beforeGivenStory() {
// ...
}
43
JBehave
@AfterScenario
public void afterAnyScenario() {
// ...
}
@AfterScenario(uponOutcome=AfterScenario.Outcome.SUCCESS)
public void afterSuccessfulScenario() {
// ...
}
@AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE)
public void afterFailedScenario() {
// ...
}
@AfterScenario
44
JBehave
@AfterStory
@AfterStory //@AfterStory(uponGivenStory=false)
public void afterStory() {
// ...
}
@AfterStory(uponGivenStory=true)
public void afterGivenStory() {
// ...
}
45
JBehave
@BeforeStories @AfterStories
@BeforeStories
public void
beforeCollectionOfStories() {
// ...
}
@AfterStories
public void
afterCollectionOfStories() {
// ...
}
46
А теперь сначала ...
@BeforeScenario
@BeforeScenario
public void beforeEachScenario() {
// ...
}
47
JBehave
@BeforeStory
@BeforeStory // @BeforeStory(uponGivenStory=false)
public void beforeStory() {
// ...
}
@BeforeStory(uponGivenStory=true)
public void beforeGivenStory() {
// ...
}
48
JBehave
@AfterScenario
public void afterAnyScenario() {
// ...
}
@AfterScenario(uponOutcome=AfterScenario.Outcome.SUCCESS)
public void afterSuccessfulScenario() {
// ...
}
@AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE)
public void afterFailedScenario() {
// ...
}
@AfterScenario
49
JBehave
@AfterStory
@AfterStory //@AfterStory(uponGivenStory=false)
public void afterStory() {
// ...
}
@AfterStory(uponGivenStory=true)
public void afterGivenStory() {
// ...
}
50
JBehave
@BeforeStories @AfterStories
@BeforeStories
public void
beforeCollectionOfStories() {
// ...
}
@AfterStories
public void
afterCollectionOfStories() {
// ...
}
51
Cucumber
Всего 2 аннотации в наличии: @After и @Before.
Настройки:
@After("unstable")
@After(value="unstable", order = 2, timeout = 3000)
И интерфейс cucumber.api.Scenario ...
52
Cucumber пример
53
JBehave Win
3 / 2 1
54
Раунд 6 Заготовки или предусловия
Задача: Было бы удобно выполнять некую последовательность
шагов перед схожими по логике сценарями.
Например: Хотим рисовать несколько картин
разных художников
55
JBehave
!-- Предусловие ко всей сторе
GivenStories: path/to/openPaintAndCreateNewFile.story
Scenario: Drawing Claude Monet picture
Given file is opened
When the user draws waterloo bridge
Then they should see Claude Monet picture
Scenario: Drawing Salvador Dali picture
***
56
JBehave
Scenario:Drawing Claude Monet waterloo bridge picture
!-- Предусловия к сценарию
GivenStories: path/to/openPaintAndCreateNewFile.story,
path/to/selectBlueBrush.story
Given file is opened
When the user draws waterloo bridge
Then they should see Claude Monet picture
57
Cucumber
Feature: Drawing
Background:
Given open Paint app
When create new file
Scenario Outline:Drawing picture
Then file is opened
When the user draws <nameOfPicture>
Then they should see <author> picture
Examples:
|nameOfPicture | author |
|waterloo bridge| Claude Monet |
|elephants | Salvador Dali|
58
Cucumber Win
3 4 / 2
59
Раунд 7 Исключение тестов из запуска
Задача: Исключить из запуска тестов набор,
например, нестабильных тестов.
60
Cucumber
61
Cucumber
@RunWith(Cucumber.class)
@CucumberOptions(
glue = {"ru.alfabank.steps", "steps"},
format = {"pretty", "json:build/cucumber/cucumber1.json"},
features = {"./src/test/resources/features/Статус платежа.feature"},
tags = {"~@unstable"}
)
public class Runner { }
62
Cucumber
@RunWith(Cucumber.class)
@CucumberOptions(
glue = {"ru.alfabank.steps", "steps"},
format = {"pretty", "json:build/cucumber/cucumber1.json"},
features = {"./src/test/resources/features/Статус платежа.feature"},
tags = {"~@unstable"}
)
public class Runner { }
63
./gradlew clean test -Dcucumber.options=”--tags ~@unstable”
JBehave
Scenario: A scenario which we cannot run every time
Meta:
@skip
@ignored true
Given ... // normal scenario steps
Аннотация @skip
64
JBehave Win
4 / 3 2
65
Раунд 8 Нереализованные шаги
Задача: У меня еще не реализован шаг, но я хочу
запускать тест и чтобы он не падал.
66
JBehave
@Given("page is opened with title $title")
@Pending
public void pendingMethod(String title) {
// not yet implemented
}
@Pending keyword
67
Cucumber
@Pending можно навешивать на класс кастомных исключений
Если метод кинет такое исключение, то шаг будет помечен как
pending.
В консоли:
Then step was not written
# AccountsSteps.notImplementedStep()
cucumber.api.PendingException: TODO: implement me
68
Cucumber
69
JBehave Win
4 / 4 3
70
Раунд 9 Тестовые данные отдельно от тестов
Задача: Я хочу одни и те же тестовые данные
использовать для многих кейсов. Мне будет удобно
хранить их в одном месте в файле. Возможно даже
удаленно.
71
JBehave
Scenario: The Examples tables could be loaded
from external resources
Given page is opened with <title>
When user clicks on button <button>
Then the alert status should be <status>
Examples:
org/project/examples/stories/allert.table
72
Cucumber
73
4 / 5 4
JBehave Win 74
Отчеты о тестировании
75
Раунд 10 Удобный отчет о тестировании
Задача: Я хочу предоставить своей команде удобный
отчет без лишней информации и без подключения
дополнительных библиотек.
76
JBehave
77
JBehave + Serenity
78
79
Cucumber
есть диаграммы
80
Cucumber
минимум полезной суммарной информации
81
82
Cucumber
можно прикреплять скриншоты/логи
83
Cucumber Win
4 5 / 5
84
85
Заключение
Jbehave мощный, тяжелый инструмент
Cucumber модный, молодежный, стремительно развивающийся
Свои фишки и ограничения есть у каждого, также как и решения для
быстрого старта проекта
86
87
‣ Чернышева Анна
‣ skype Ganna_Chernyshova
‣ facebook anna.chernyshova.79
‣ Ковалева Юлия
‣ skype juliana_kov
Контакты
88

More Related Content

What's hot

Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
Pavel Asanov
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
SQALab
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
Алексей Стягайло
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Andrey Rebrov
 
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадКонцепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
SQALab
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...Badoo Development
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
IT61
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестов
SQALab
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
SQALab
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
SQALab
 
SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017
Adam Sandman
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
SQALab
 
Как мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooКак мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в Badoo
SQALab
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
CodeFest
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
Aleksey Solntsev
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
Dmitry Zinushin
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
Кирилл Толкачёв
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
CodeFest
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
SQALab
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
Sergey Grinev
 

What's hot (20)

Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадКонцепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестов
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
 
SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестами
 
Как мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooКак мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в Badoo
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магия
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
 
Grail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестовGrail: шаги для ваших Python-тестов
Grail: шаги для ваших Python-тестов
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 

Similar to BDD girls Battle: Cucumber VS. JBehave

Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Yandex
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
Andrey Karpov
 
Реактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИС
Реактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИСРеактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИС
Реактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИС
2ГИС Технологии
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
Matvey Malkov
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Dev2Dev
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)
Alex Filatov
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
Oleksii Okhrymenko
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Ontico
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!
Andrei Solntsev
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
Andrey Karpov
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
Yandex
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
GeeksLab Odessa
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
it-people
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
Vasil Remeniuk
 
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013Vladimir Ivanov
 
Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
Кирилл Толкачёв
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
sergeymoiseev
 

Similar to BDD girls Battle: Cucumber VS. JBehave (20)

Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Что могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщикиЧто могут статические анализаторы, чего не могут программисты и тестировщики
Что могут статические анализаторы, чего не могут программисты и тестировщики
 
Реактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИС
Реактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИСРеактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИС
Реактивный двигатель для вашего Android-приложения — Матвей Мальков, 2ГИС
 
Реактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложенияРеактивный двигатель вашего Android приложения
Реактивный двигатель вашего Android приложения
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
Обзор ES2015(ES6)
Обзор ES2015(ES6)Обзор ES2015(ES6)
Обзор ES2015(ES6)
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
 
Curse of spring boot test [VRN]
Curse of spring boot test [VRN]Curse of spring boot test [VRN]
Curse of spring boot test [VRN]
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 

More from SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
SQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
SQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
SQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
SQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
SQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
SQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
SQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
SQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
SQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
SQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
SQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
SQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
SQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
SQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
SQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
SQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
SQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
SQALab
 

More from SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

BDD girls Battle: Cucumber VS. JBehave