bdd girls battle jbehave vs cucumber€£ Раннер тестов: Добавить tags...

121
BDD girls battle JBehave vs Cucumber 1

Upload: trinhliem

Post on 25-May-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

BDD girls battle JBehave vs Cucumber

1

Page 2: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

‣ JBEHAVE ‣ Чернышева Анна

Герои битвы‣ CUCUMBER ‣ Ковалева Юлия

2

Page 3: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Процессы разработки и тестирования в Альфа Лаборатории

‣ SCRUM, BDD

‣ User Story пишет тестировщик или аналитик

‣ Автоматизатор развивает тестовый фреймворк

‣ Кросс функциональность команд

3

Page 4: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Стоит ли переписывать готовый фреймворк на новый ради нескольких преимуществ?

4

Page 5: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

‣ Как решать похожие проблемы? Нужно ли решать?

‣ А если ничего не предпринимать

‣ Наши решения и выводы - это не панацея ...

‣ Максимум полезного в одном докладе

‣ Возможно мы что-то не учли...

Зачем нужна битва?

5

Page 6: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Selenium

JUnit

JAVA

HttpClient

Serenity

JBehave

Maven

6

Page 7: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Selenium

JUnit

JAVA

HttpClient

Serenity

JBehave

Maven

7

Page 8: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Selenium Selenide

JAVA

HttpClient

Serenity

JBehave

Maven Gradle

Rest Assured

Cucumber

JUnit

8

Page 9: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

9

Page 10: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Написание сценариев

10

Page 11: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 1 Ключевые слова

Задача: Я хочу использовать текст шагов без привязки к ключевым словам

Given currency equals USD When currency equals USD

11

Page 12: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

12

Page 13: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

"ru": { "and": [ "* ", "И ", "К тому же ", "Также " ]...

gherkin-languages.json

* = And | But | Given | When | Then

When currency equals USD Then currency equals USDGiven currency equals USD * currency equals USD

13

Page 14: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

14

Page 15: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

1 / 0

15

Page 16: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 2 Меньше повторов

Задача: Я хочу использовать одну реализацию шага для нескольких текстовых описаний.

When click on 'Cancel' button When click on 'Cancel' popup

16

Page 17: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

17

@When ("click on 'Cancel' {button | popup}") public void clickCancel() { //some magic here }

Page 18: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

18

@When("click on 'Cancel' button") @Alias("click on 'Cancel' popup") public void clickCancel() { //some magic here }

Page 19: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

19

@When("click on 'Cancel' button") @Alias("click on 'Cancel' popup") public void clickCancel() { //some magic here }@When("click on 'Cancel' button") @Aliases(values = {"click on 'Cancel' popup", "выполнено нажатие на кнопку 'Отмена'"}) public void clickCancel() { //some magic here }

Page 20: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

20

@When("click on 'Cancel' (?:button|popup)") public void clickOnCancel() { //some magic here }

Page 21: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave Win

1/1 0

21

Page 22: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 3 Формат даты

Задача: Я хочу, чтобы дата передавалась в шаг в определенном формате.

22

Page 23: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@Given("ISO date format is $date") public void theIsoDateIs(@Named("date") Date date) { // ... }

Given ISO date format is 09/09/2009

23

Page 24: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

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()]); }

24

Page 25: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

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()]); }

25

Page 26: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Jbehave

@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)); }

26

Page 27: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

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

Page 28: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

28

@Given("^current date is (.+)$") public void checkDateFormat(@Format("dd.MM.yyyy") Date date){ alfaScenario.write(date.toString()); this.date = date; }

Page 29: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber - падающий тест

29

ConversionException: Couldn't convert "2014-04-12" to an instance of: [class java.util.Date]

Page 30: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

1 2/1

30

Page 31: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 4 Ключевые слова на разных языках

Задача: Владелец продукта хочет получать отчеты о тестировании на русском языке.

31

Page 32: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehaveСоздать properties файл с описанием ключевых слов Для русских слов i18n/keywords_ru.properties: Символы Unicode

32

Page 33: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

@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)) //... }

Определить ключевые слова в конфигурациях

JBehave

33

Page 34: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

34

Page 35: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

35

import cucumber.api.java

Page 36: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

36

Page 37: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

37

Page 38: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

2 3/1

38

Page 39: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 5 Аннотации жизненного цикла тестов

Задача: Организовать для тестов пред/пост обработчики: * делать скриншот при каждом фейле * очищать куки перед каждым тестом * установить размер экрана 1240*780

39

Page 40: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@BeforeScenario

@BeforeScenario public void beforeEachScenario() { // ... } @BeforeScenario(uponType=ScenarioType.EXAMPLE) public void beforeEachExampleScenario() { // ... }

40

Page 41: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@BeforeStory

@BeforeStory // @BeforeStory(uponGivenStory=false) public void beforeStory() { // ... } @BeforeStory(uponGivenStory=true) public void beforeGivenStory() { // ... }

41

Page 42: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@AfterScenario public void afterAnyScenario() { // ... } @AfterScenario(uponOutcome=AfterScenario.Outcome.SUCCESS) public void afterSuccessfulScenario() { // ... } @AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE) public void afterFailedScenario() { // ... }

@AfterScenario

42

Page 43: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@AfterStory

@AfterStory //@AfterStory(uponGivenStory=false) public void afterStory() { // ... } @AfterStory(uponGivenStory=true) public void afterGivenStory() { // ... }

43

Page 44: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@BeforeStories @AfterStories

@BeforeStories public void beforeCollectionOfStories() { // ... } @AfterStories public void afterCollectionOfStories() { // ... }

44

Page 45: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Обратный порядок...

@BeforeScenario

@BeforeScenario public void beforeEachScenario() { // ... } @BeforeScenario(uponType=ScenarioType.EXAMPLE) public void beforeEachExampleScenario() { // ... }

45

Page 46: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@BeforeStory

@BeforeStory // @BeforeStory(uponGivenStory=false) public void beforeStory() { // ... } @BeforeStory(uponGivenStory=true) public void beforeGivenStory() { // ... }

46

Page 47: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@AfterScenario public void afterAnyScenario() { // ... } @AfterScenario(uponOutcome=AfterScenario.Outcome.SUCCESS) public void afterSuccessfulScenario() { // ... } @AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE) public void afterFailedScenario() { // ... }

@AfterScenario

47

Page 48: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@AfterStory

@AfterStory //@AfterStory(uponGivenStory=false) public void afterStory() { // ... } @AfterStory(uponGivenStory=true) public void afterGivenStory() { // ... }

48

Page 49: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@BeforeStories @AfterStories

@BeforeStories public void beforeCollectionOfStories() { // ... } @AfterStories public void afterCollectionOfStories() { // ... }

49

Page 50: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

Всего 2 аннотации в наличии: @After и @Before

Дополнительные настройки:

@After("dataUI") @Before(value = "unstable", timeout = 1000, order = 3)

50

Page 51: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber - Не запутайся!

@Before(order = 3) @Before(order = 1)

@After(order = 3) @After(order = 1)

51

Документация

?

Page 52: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber - Не запутайся!

@Before(order = 3) @Before(order = 1)

@After(order = 3) @After(order = 1)

52

Документация

Page 53: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Scenario

53

@AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE) public void afterFailedScenario()

JBehave

А как в Cucumber?

Page 54: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Scenario

54

@AfterScenario(uponOutcome=AfterScenario.Outcome.FAILURE) public void afterFailedScenario() JBehave

интерфейс cucumber.api.Scenario ...

Page 55: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave Win

3/2 1

55

Page 56: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 6 Заготовки или предусловия

Задача: Было бы удобно выполнять некую последовательность шагов перед схожими по логике сценарями.

Например: Хотим рисовать несколько кошек разных пород или окрасов.

56

Page 57: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

!-- Предусловие ко всему .story файлу GivenStories: path/to/openPaintAndCreateNewFile.story

Scenario: Drawing a munchkin cat Given file is opened When the user draws cat with short legs Then they should see a munchkin cat

Scenario: Drawing a maine coon cat ***

57

Page 58: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

!-- Предусловие ко всему .story файлу GivenStories: path/to/openPaintAndCreateNewFile.story

Scenario: Drawing a white munchkin cat !-- Предусловия к конкретному сценарию GivenStories: path/to/selectWhiteBrush.story Given file is opened When the user draws cat with short legs Then they should see a munchkin cat

58

Page 59: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

Scenario: Drawing a munchkin cat specifying cats color using the rows of the Examples table

Scenario: Drawing a munchkin cat GivenStories: selectBrush.story Given file is opened When the user draws cat with short legs Then they should see a 'Color' munchkin cat

Examples: |Color| |white| |gray |

59

Page 60: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

60

Feature: Cats drawing Background: Sketch preparing Given blank area for drawing When choose a color of line When choose a line thickness

Scenario Outline: Draw a cat When draw cat "<type>" Then coat color is <color> Examples: | type | color | | british | grey | | persian | different |

Page 61: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

61

Feature: Cats drawing Background: Sketch preparing Given blank area for drawing When choose a color of line Scenario Outline: Draw a cat When draw cat "<type>" Then cat is appeared Examples: | type | | british |

Scenario Outline: Change a color When color was changed to <color_name> Examples: | colorname | | red |

Page 62: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

62

# language: en

Feature: Folders names Scenario Outline: Folders names for the Credits application Given <conditional_step> When <go_to_folder> Then the folder name <folder_name> is appeared Examples: | conditional_step | go_to_folder | folder_name | | application Credits is started| - | Credits | | main page is appeared | go to Credits| Credits |

Page 63: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

3 4/2

63

Page 64: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 7 Наборы тестов

Задача: Я хочу запускать наборы смоук и регрессионных тестов отдельно

64

Page 65: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

default meta matcher :== ([+|-] [name] [value pattern])+

testAnnotations.properties smoke=+smokeTests -skip

JBehave

65

Page 66: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

Meta: @smokeTests

Scenario: Some smoke scenario Given the user is on home page When the user makes base action Then the user sees result

./gradlew clean test -PtestType=smoke

66

Page 67: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave @skip

Meta: @skip

Scenario: Some unstable scenario Given the user is on home page When the user makes base action Then the user sees result

67

Page 68: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

‣ Запуск тестов: ./gradlew clean test -Dcucumber.options=”--tags @smoke” ‣ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions

68

Feature: Create request for Credit @smoke Scenario: Create credit request for sum equals 0 rubles Given application Credits is started

@regress Scenario: Create credit request for sum equals 100 rubles Given application Credits is started

Page 69: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

‣ -Dcucumber.options=”--tags @smoke --tags @regress” - срабатывает условие И

‣ Альтернатива: tags ={"@smoke","@regress"}

69

Page 70: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

‣ -Dcucumber.options=”--tags @smoke,@regress” - срабатывает условие ИЛИ

‣ Альтернатива: tags ={"@smoke,@regress"}

‣ -Dcucumber.options=”--tags @smoke --tags @regress” - срабатывает условие И

‣ Альтернатива: tags ={"@smoke","@regress"}

70

Page 71: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

71

А если чуть сложнее настройку сделать ...

@smoke Feature: Create request for Credit @smoke Scenario: Create credit request for sum equals 0 rubles Given application Credits is started

@regress Scenario: Create credit request for sum equals 100 rubles Given application Credits is started

Page 72: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

‣ -Dcucumber.options=”--tags @smoke --tags ~@regress” - срабатывает условие И и ИСКЛЮЧЕНИЕ

‣ Альтернатива: tags ={"@smoke", "~@regress"}

72

Page 73: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

4 5/2

73

Page 74: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 8 Нереализованные шаги

Задача: У меня еще не реализован шаг, но я хочу запускать тест и чтобы он не падал.

74

Page 75: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

@Given("page is opened with title $title") @Pending public void pendingMethod(String title) { // not yet implemented }

@Pending keyword

75

Page 76: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

@Pending можно навешивать на класс-исключение

Тестовые методы могут кидать исключение: throw new PendingException();

В консоли:

Then step was not written # AccountsSteps.notImplementedStep() cucumber.api.PendingException: TODO: implement me

76

Page 77: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

77

Page 78: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

5 6/2

78

Page 79: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 9 Кроссбраузерность

Задача: Я хочу организовать кроссбраузерное тестирование без использования сторонних инструментов помимо BDD библиотеки.

79

Page 80: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

Поддерживаются браузеры в JBehave: PropertyWebDriverProvider.class

Поддерживается системной переменной browser

public enum Browser { CHROME, FIREFOX, IE, ANDROID, HTMLUNIT }

80

Page 81: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

‣ Нет реализации запуска тестов в разных браузерах

‣ Придется писать свою фабрику драйверов или же воспользоваться сторонними инструментами. Например, Selenide

./gradlew clean test -Dbrowser=chrome

chrome ie edge firefox safari

81

Page 82: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave Win

6 / 3 2

82

Page 83: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 10 Тестовые данные отдельно от тестов

Задача: Я хочу одни и те же тестовые данные использовать для многих кейсов. Мне будет удобно хранить их в одном месте в файле. Возможно даже удаленно.

83

Page 84: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

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

84

Page 85: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Простой и понятный способ

Cucumber

85

Page 86: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave Win

6 / 4 3

86

Page 87: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Отчеты о тестировании

87

Page 88: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 11 Удобный отчет о тестировании

Задача: Я хочу предоставить своей команде удобный отчет без лишней информации и без подключения дополнительных библиотек.

88

Page 89: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave

89

Page 90: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave + Serenity

90

Page 91: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

91

JBehave + Serenity

Page 92: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

92

JBehave + Serenity

Page 93: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

93

Page 94: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber минимум полезной суммарной информации

94

Page 95: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

95

Page 96: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumberможно прикреплять скриншоты/логи

96

Page 97: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber Win

6 7 / 4

97

Page 98: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Раунд 12 Запуск тестов параллельно

Задача: Я хочу распараллелить запуск тестов, чтобы уменьшить время выполнения регрессионого тестирования.

98

Page 99: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Jbehave

JBehave & Cucumber - отдельный доклад

Embedder для JBehave - и плагин не нужен!

99

Page 100: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber

Для Maven есть реализация на gitHub: https://github.com/temyers/cucumber-jvm-parallel-plugin

Для Gradle мы ничего подходящего не нашли и написали свой: https://github.com/alfa-laboratory/cucumber-parallel-test-gradle-plugin

100

Page 101: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave Win

7 / 5 4

101

Page 102: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Dependency Injection

102

Page 103: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave + Spring

@RunWith(SpringAnnotatedEmbedderRunner.class) @Configure() @UsingEmbedder(embedder = Embedder.class, generateViewAfterStories = true, ignoreFailureInView = true) @UsingSpring(resources = {"org/examples/spring/steps.xml" })

public class EmbedderUsingSpring extends InjectableEmbedder { //some magic here }

103

Page 104: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Guice

104

1) требуется добавить в build.gradle: compile group: 'com.google.inject', name: 'guice', version: '<guice.version>'

2) помним про три аннотации: @Inject @ScenarioScoped @Singleton

Page 105: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave Win

7 / 6 5

105

Page 106: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Page Object

106

Page 107: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave + Serenity PageObject

@DefaultUrl("https://www.wikipedia.org/") public class HomePage extends PageObject {

@FindBy(name="search") private WebElementFacade searchElement;

@FindBy(name="go") private WebElementFacade goButton;

public void enterKeywords(String keyword) { searchElement.type(keyword); } }

107

Page 108: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

JBehave + Serenity PageObject

108

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 109: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

109

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 110: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

110

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 111: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

111

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 112: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

112

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 113: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

113

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 114: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

114

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 115: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

115

‣ Работа с WebDriver ‣ Работа с переменными среды ‣ Работа с ожиданиями (появление, наличие данных) ‣ Взаимодействие с элементами страницы ‣ Работа с загрузкой файлов ‣ Организация базовых проверок ‣ Angular и Ajax ожидания

Page 116: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber + Selenide

@Name("Login page") public class LoginPage extends AlfaPage {

@FindBy(css = "div[eventproxy$=\"WPanel1_WImage1\"]") @Name("logo") private SelenideElement loginLog;

@FindBy(css = "div[eventproxy$=\"lblGotoNewDshb\"]") @Name("newBankLink") @Optional private SelenideElement newBank; }

116

Page 117: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Dead Heat

7 8 / 7 6

117

Page 118: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Cucumber — победитель!

118

Page 119: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Заключение

Jbehave мощный, тяжелый инструмент

Cucumber модный, молодежный, стремительно развивающийся

Свои фишки и ограничения есть у каждого, также как и решения для быстрого старта проекта

Выбор остается за вами: классика или модерн, сложности есть везде, главное азарт!

119

Page 120: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

120

Page 121: BDD girls battle JBehave vs Cucumber€£ Раннер тестов: Добавить tags ={"@smoke"} в аннотацию @CucumberOptions 68 Feature: Create request for Credit

Контакты

‣ Чернышева Анна ‣ skype Ganna_Chernyshova ‣ facebook anna.chernyshova.79

‣ Ковалева Юлия ‣ skype juliana_kov

121