SlideShare a Scribd company logo
1 of 88
Download to read offline
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 APIPavel Asanov
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 
Бодрящий микс из 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 и TestNgIT61
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестовSQALab
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"Микросервисы для автоматизации тестирования - опыт "Одноклассников"
Микросервисы для автоматизации тестирования - опыт "Одноклассников"SQALab
 
SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017SQADAYS 21 Москва 2017
SQADAYS 21 Москва 2017Adam Sandman
 
Визуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиВизуализация покрытия автоматизированными UI тестами
Визуализация покрытия автоматизированными UI тестамиSQALab
 
Как мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooКак мы приручили демона или процесс тестирования демонов в Badoo
Как мы приручили демона или процесс тестирования демонов в BadooSQALab
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
Maven 3 : уличная магия
Maven 3 : уличная магияMaven 3 : уличная магия
Maven 3 : уличная магияAleksey Solntsev
 
Введение в maven
Введение в mavenВведение в maven
Введение в mavenDmitry 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 5SQALab
 

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.NETDev2Dev
 
Обзор 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 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!Andrei Solntsev
 
Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Статический анализ кода: Что? Как? Зачем?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
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.agencyit-people
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013Vladimir Ivanov
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 

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 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
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 testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте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