SlideShare a Scribd company logo
1 of 33
1
BDD Frameworks Overview
Shapin Anton
August 19, 2016
2
• Lead Software Test Automation Engineer
• 9+ years in IT
• Areas of my competency: manual,
automation, performance and etc.
• Successfully completed more than 9 BDD
projects.
Email: anton_shapin@epam.com
Skype: anton_shapin
Shapin Anton
3
Agenda
BDD approach1
Pros, cons, restrictions of BDD2
Coding tricks in Cucumber-
JVM
3
4
LET`S START !
5
Main questions:
What is BDD ?1
Why do we need BDD ?2
What are the “bonuses” and
minuses of BDD approach?
3
Where to begin?4
6
What customers see in BDD:
We can understand what our
automated tests are doing.
1
Executable specification.2
Reducing cost of test
automation.
3
A better product.4
We can write clear tests in their
native language.
5
7
What qa engineers see in BDD:
Automated tests in native language.
What is it?
1
Should we rewrite all of our tests?2
How we will maintain tests?3
Our tests will be unstable!4
It will be additional work (test-cases should
be migrated to language of scenarios).
5
8
BDD approach
BDD(behavior-driven development) - is a set of software engineering practices
designed to help teams build and deliver more valuable, higher quality software faster. It
draws on Agile and lean practices including, in particular, Test-Driven Development (TDD) and
Domain-Driven Design (DDD).
BDD isn’t a software development methodology in its own right. It’s not a replacement
for Scrum, XP, Kanban, RUP, or whatever methodology you’re currently using.
MAIN GOAL: EXECUTABLE SPECIFICATION
9
BDD process
10
BDD
Given describes the preconditions for
the scenario and prepares the test
environment.
When describes the action under
test.
2
Then describes the expected
outcomes.
3
The And and But keywords can be used
to join several Given, When, or Then
steps together in a more readable way.
4
1
Example of GUI Scenario
Scenario: Running a Full Text Quick Search.
Given I perform Quick Search by "IPhone 4S"
When I click on link 'Search History' on panel 'Quick Search'
Then the term query "IPhone 4S" should be the first in the Search
History grid
12
BDD vs “Classical” style of test
AUTOMATED TEST IN GERKHIN FORMAT(TEST IN BDD STYLE) AUTOMATED TEST IN “CLASSICAL” STYLE
Scenario: Running a Full Text Quick Search.
Given I perform Quick Search by "IPhone 4S"
When I click on link 'Search History' on panel 'Quick Search'
Then the term query "IPhone 4S" should be the first in the Search History
grid
@Test
public void checkFullTextSearch() {
homepage.open();
quickSearchForm.setSearchQuery(“IPhone 4S”);
quickSearchForm.perform();
quickSearchForm.openSearchHistory();
searchHistory.isQueryTheFirst(“IPhone 4S”);
}
13
How it works
@Given("^I perform Quick Search by "([^"]*)" $")
public void i_perform_quick_search_by(String query) {
driver.findElement(By.id(“searchQuery”)).sendKeys(query);
driver.findElement(By.id(“submit”)).click();
}
Scenario: Running a Full Text Quick Search.
Given I perform Quick Search by "IPhone 4S"
...
Each step maps to Java Method
14
The main layers of a Cucumber test suite
15
BDD restrictions :
BDD works very well only if the team of
analysts, developers, testers are near, but not
in different locations.
1
Work is performed on an isolated part of
the product by a small team.
2
The system does not have tests with a
complex structure of the test data.
3
16
Pros:
The acceptance criteria are nice thought.1
We get executable specification.2
All test cases and automated tests are up to date.3
Application development time reduced.4
Test logic is in total independent layer of
implementation.
5
Manual qa engineer can use automated test scenarios
for manual testing.
6
17
Cons:
It is not possible to do testing in the middle of the
test. Checks are made only in the THEN section.
1
It's hard to maintain reusable steps in the
scenarios. Very often it leads to duplication of
code in the test system.
2
It is difficult to refactor tests.3
It is necessary to create and maintain the
Domain Dictionary for writing tests.
4
The complexity of writing test scenarios without
Helper-s (typos, say the phrase can be
different).
5
18
Where to begin
1. Think, whether you need to BDD and formulate specific
goals you want to achieve.
2. Read the book "BDD in Actions".
5. Very carefully think through the architecture of your test
system (What? Where? Why? How?).
4. Create the initial version of the Domain vocabulary and
rules for test scenarios writing.
3. Select the BDD framework. Examine the documentation
carefully.
!!! FORWARD !!!
19
Languages, Frameworks
FRAMEWORKSLANGUAGES
RSpec
JDaveCola
20
Functional tests
BACK-END TESTS
(SERVICES, API and etc)
UI TESTS
(WEB APPLICATION)
TYPES OF TESTS
The scenarios should
express what a user
should be able to do, and
NOT HOW.
Very important is what a
user should be able to
do, and HOW
21
Step structure
WHEN The user clicks the button “SAVE" in the Report Navigation Column on the Search Results page
WHEN
WHO
NAME OF
ACTION
OBJECT OF
ACTION
AREA OF
ACTION
PAGE NAME
LINK+<TITLE>
BUTTON+<TITLE>
TEXTBOX+<TITLE>
…
TABLE
PANEL
POP-UP
MODAL FORM
TAB
…
PAGE NAME
CLICK
SELECT
…
I
THE USER
22
Step structure
THEN the term "<query>" should be the first in the Search History grid on the My History page
THEN
WHAT
SHOULD
[NOT] BE
AREA OF
ACTION
PAGE NAME
TABLE
PANEL
POP-UP
MODAL FORM
TAB
…
PAGE NAME
SHOULD BE
SHOULD NOT BE
The term
…
23
Step structure
WHEN The user performs the Full Search with parameters: query: “fish"; city: “Murmansk"; on the Home page
COMPLEX
WHO
NAME OF
ACTION
OBJECT OF
ACTION
WITH
PARAMETERS:
PAGE NAME
LINK+<TITLE>
BUTTON+<TITLE>
TEXTBOX+<TITLE>
…
PARAM:VALUE PAGE NAME
PERFORM
FILL
…
I
THE USER
Small tricks when working with Cucumber-JVM
Scenario Outline: Running a Full Text Quick Search.
Given I perform Quick Search by “<query>"
When I click on link 'Search History' on panel 'Quick Search'
Then the term query “<query>" should be the first in the Search History grid
Examples:
|query |
| IPhone 4S |
| BMW X5 |
25
Small tricks when working with Cucumber-JVM
Given the user navigate to the Home page
=
Given the user open the Home page
(?: navigate to|open) не равно (:? navigate to|open)
/**
* Open "Home page"
*/
@Given("^the user (?:navigate to|open) the Home page$")
public void the_user_open_the_Home_page() {
homePage.open();
}
26
Small tricks when working with Cucumber-JVM
When the user navigates to “Simple” report type on the page ‘Results’
=
When the user navigates to report type “Simple” on the page ‘Results’
@When("^I navigate to (?:"([^"]*)" report type|report type "([^"]*)" ) on page 'Results'$")
public void I_navigate_to_report (String dataset, String dataset2){
if(dataset!=null) {
// TODO: code goes here
}else{
// TODO: code goes here
}
}
27
Small tricks when working with Cucumber-JVM
Given I have 5 cucumbers in my basket
=
Given I have 1 cucumber in my basket
@Given("^I have (d+) cucumbers? in my basket$")
public void i_have_cucumber(int number) {
// TODO: code goes here
}
28
Small tricks when working with Cucumber-JVM
Then the response should be JSON:
"""
[{"name":"BMW X5", "color": "Blue"},
{"name":"UAZ Patriot", "color": "Blue"}]
"""
@Then("^the response should be JSON:$")
public void theResponseShouldBeJSON(String expectedJson){
// TODO: code goes here
}
IDE Helper (plugin for IDEA) to write steps of
scenario
• We can see all implemented
steps when printing text of
step
• We can see full description
of steps
• Helper reduces time of step
creation
KEY POINTS
Best Practices. Test Step Creation.
User Helpers. For example IntelliJ IDEA plugin «Cucumber for Java»
31
Conclusion
1. BDD is a very good approach. But this is not a magic bullet.
2. Improper using will bring more problems than benefits.
5. Tests Stability and BDD usability depends on you.
4. Do not confuse the BDD and tests written in
Gherkin.
3. To use or not to use BDD depends on situation and project.
32
Useful materials
1. Video: Useful practices of creation automatic tests by using Cucumber-JVM:
https://goo.gl/ZftM9h
2. Video: From Manual to Automated Testing:
https://videoportal.epam.com/video/noPgmXaX
5. Book: “Specification by Example”
4. Book: “Cucumber Recipes”
3. Book: “BDD in Actions”
6. Allure-cucumber-plugin: https://github.com/kirlionik/allure-
cucumber-plugin
33
Thank you for attention!
Email: anton_shapin@epam.com
Skype: anton_shapin

More Related Content

What's hot

Comparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms SoftwareComparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms Software
l xf
 
5 easy steps to understanding json web tokens (jwt)
5 easy steps to understanding json web tokens (jwt)5 easy steps to understanding json web tokens (jwt)
5 easy steps to understanding json web tokens (jwt)
Amit Gupta
 

What's hot (20)

TypeScript intro
TypeScript introTypeScript intro
TypeScript intro
 
Unit Testing in Android
Unit Testing in AndroidUnit Testing in Android
Unit Testing in Android
 
Bdd Introduction
Bdd IntroductionBdd Introduction
Bdd Introduction
 
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
[Pycon KR 2017] Rst와 함께하는 Python 문서 작성 & OpenStack 문서 활용 사례
 
An introduction to Behavior-Driven Development (BDD)
An introduction to Behavior-Driven Development (BDD)An introduction to Behavior-Driven Development (BDD)
An introduction to Behavior-Driven Development (BDD)
 
RCCreator Guidance. Remote control adding (copy codes from your original remo...
RCCreator Guidance. Remote control adding (copy codes from your original remo...RCCreator Guidance. Remote control adding (copy codes from your original remo...
RCCreator Guidance. Remote control adding (copy codes from your original remo...
 
Comparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms SoftwareComparing Cpp And Erlang For Motorola Telecoms Software
Comparing Cpp And Erlang For Motorola Telecoms Software
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
 
Building with Gradle
Building with GradleBuilding with Gradle
Building with Gradle
 
Code review guidelines
Code review guidelinesCode review guidelines
Code review guidelines
 
Automated Test Framework with Cucumber
Automated Test Framework with CucumberAutomated Test Framework with Cucumber
Automated Test Framework with Cucumber
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes Exploratórios
 
Introduction to MERN
Introduction to MERNIntroduction to MERN
Introduction to MERN
 
5 easy steps to understanding json web tokens (jwt)
5 easy steps to understanding json web tokens (jwt)5 easy steps to understanding json web tokens (jwt)
5 easy steps to understanding json web tokens (jwt)
 
Testing and Mocking Object - The Art of Mocking.
Testing and Mocking Object - The Art of Mocking.Testing and Mocking Object - The Art of Mocking.
Testing and Mocking Object - The Art of Mocking.
 
Introduction to Behaviour Driven Development (BDD) and Cucumber with Java
Introduction to Behaviour Driven Development (BDD) and Cucumber with JavaIntroduction to Behaviour Driven Development (BDD) and Cucumber with Java
Introduction to Behaviour Driven Development (BDD) and Cucumber with Java
 
Web accessibility testing 4 - NVDA screen reader
Web accessibility testing 4 - NVDA screen readerWeb accessibility testing 4 - NVDA screen reader
Web accessibility testing 4 - NVDA screen reader
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the pain
 
Taiko - Reliable Browser Automation
Taiko - Reliable Browser AutomationTaiko - Reliable Browser Automation
Taiko - Reliable Browser Automation
 
Behavior Driven Development Pros and Cons
Behavior Driven Development Pros and ConsBehavior Driven Development Pros and Cons
Behavior Driven Development Pros and Cons
 

Similar to BDD from QA side

...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappeared
Luc Bors
 

Similar to BDD from QA side (20)

resolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bddresolvendo problemas de comunicação em equipes distribuídas com bdd
resolvendo problemas de comunicação em equipes distribuídas com bdd
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvm
 
QA Fest 2018. Adam Stasiak. React Native is Coming – the story of hybrid mobi...
QA Fest 2018. Adam Stasiak. React Native is Coming – the story of hybrid mobi...QA Fest 2018. Adam Stasiak. React Native is Coming – the story of hybrid mobi...
QA Fest 2018. Adam Stasiak. React Native is Coming – the story of hybrid mobi...
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappeared
 
Behavior Driven Development
Behavior Driven Development Behavior Driven Development
Behavior Driven Development
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDD
 
New Ideas for Old Code - Greach
New Ideas for Old Code - GreachNew Ideas for Old Code - Greach
New Ideas for Old Code - Greach
 
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
Taming the Legacy Beast: Turning wild old code into a sleak new thoroughbread.
 
North Virginia Coldfusion User Group Meetup - Testbox - July 19th 2017
North Virginia Coldfusion User Group Meetup - Testbox - July 19th 2017North Virginia Coldfusion User Group Meetup - Testbox - July 19th 2017
North Virginia Coldfusion User Group Meetup - Testbox - July 19th 2017
 
Gui application for e mail application
Gui application for e mail applicationGui application for e mail application
Gui application for e mail application
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
 
BDD in iOS with Cedar
BDD in iOS with CedarBDD in iOS with Cedar
BDD in iOS with Cedar
 
Rubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDDRubyconf2016 - Solving communication problems in distributed teams with BDD
Rubyconf2016 - Solving communication problems in distributed teams with BDD
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Cross mobile testautomation mit Xamarin & SpecFlow
Cross mobile testautomation mit Xamarin & SpecFlowCross mobile testautomation mit Xamarin & SpecFlow
Cross mobile testautomation mit Xamarin & SpecFlow
 
Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Recently uploaded (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 

BDD from QA side

  • 1. 1 BDD Frameworks Overview Shapin Anton August 19, 2016
  • 2. 2 • Lead Software Test Automation Engineer • 9+ years in IT • Areas of my competency: manual, automation, performance and etc. • Successfully completed more than 9 BDD projects. Email: anton_shapin@epam.com Skype: anton_shapin Shapin Anton
  • 3. 3 Agenda BDD approach1 Pros, cons, restrictions of BDD2 Coding tricks in Cucumber- JVM 3
  • 5. 5 Main questions: What is BDD ?1 Why do we need BDD ?2 What are the “bonuses” and minuses of BDD approach? 3 Where to begin?4
  • 6. 6 What customers see in BDD: We can understand what our automated tests are doing. 1 Executable specification.2 Reducing cost of test automation. 3 A better product.4 We can write clear tests in their native language. 5
  • 7. 7 What qa engineers see in BDD: Automated tests in native language. What is it? 1 Should we rewrite all of our tests?2 How we will maintain tests?3 Our tests will be unstable!4 It will be additional work (test-cases should be migrated to language of scenarios). 5
  • 8. 8 BDD approach BDD(behavior-driven development) - is a set of software engineering practices designed to help teams build and deliver more valuable, higher quality software faster. It draws on Agile and lean practices including, in particular, Test-Driven Development (TDD) and Domain-Driven Design (DDD). BDD isn’t a software development methodology in its own right. It’s not a replacement for Scrum, XP, Kanban, RUP, or whatever methodology you’re currently using. MAIN GOAL: EXECUTABLE SPECIFICATION
  • 10. 10 BDD Given describes the preconditions for the scenario and prepares the test environment. When describes the action under test. 2 Then describes the expected outcomes. 3 The And and But keywords can be used to join several Given, When, or Then steps together in a more readable way. 4 1
  • 11. Example of GUI Scenario Scenario: Running a Full Text Quick Search. Given I perform Quick Search by "IPhone 4S" When I click on link 'Search History' on panel 'Quick Search' Then the term query "IPhone 4S" should be the first in the Search History grid
  • 12. 12 BDD vs “Classical” style of test AUTOMATED TEST IN GERKHIN FORMAT(TEST IN BDD STYLE) AUTOMATED TEST IN “CLASSICAL” STYLE Scenario: Running a Full Text Quick Search. Given I perform Quick Search by "IPhone 4S" When I click on link 'Search History' on panel 'Quick Search' Then the term query "IPhone 4S" should be the first in the Search History grid @Test public void checkFullTextSearch() { homepage.open(); quickSearchForm.setSearchQuery(“IPhone 4S”); quickSearchForm.perform(); quickSearchForm.openSearchHistory(); searchHistory.isQueryTheFirst(“IPhone 4S”); }
  • 13. 13 How it works @Given("^I perform Quick Search by "([^"]*)" $") public void i_perform_quick_search_by(String query) { driver.findElement(By.id(“searchQuery”)).sendKeys(query); driver.findElement(By.id(“submit”)).click(); } Scenario: Running a Full Text Quick Search. Given I perform Quick Search by "IPhone 4S" ... Each step maps to Java Method
  • 14. 14 The main layers of a Cucumber test suite
  • 15. 15 BDD restrictions : BDD works very well only if the team of analysts, developers, testers are near, but not in different locations. 1 Work is performed on an isolated part of the product by a small team. 2 The system does not have tests with a complex structure of the test data. 3
  • 16. 16 Pros: The acceptance criteria are nice thought.1 We get executable specification.2 All test cases and automated tests are up to date.3 Application development time reduced.4 Test logic is in total independent layer of implementation. 5 Manual qa engineer can use automated test scenarios for manual testing. 6
  • 17. 17 Cons: It is not possible to do testing in the middle of the test. Checks are made only in the THEN section. 1 It's hard to maintain reusable steps in the scenarios. Very often it leads to duplication of code in the test system. 2 It is difficult to refactor tests.3 It is necessary to create and maintain the Domain Dictionary for writing tests. 4 The complexity of writing test scenarios without Helper-s (typos, say the phrase can be different). 5
  • 18. 18 Where to begin 1. Think, whether you need to BDD and formulate specific goals you want to achieve. 2. Read the book "BDD in Actions". 5. Very carefully think through the architecture of your test system (What? Where? Why? How?). 4. Create the initial version of the Domain vocabulary and rules for test scenarios writing. 3. Select the BDD framework. Examine the documentation carefully. !!! FORWARD !!!
  • 20. 20 Functional tests BACK-END TESTS (SERVICES, API and etc) UI TESTS (WEB APPLICATION) TYPES OF TESTS The scenarios should express what a user should be able to do, and NOT HOW. Very important is what a user should be able to do, and HOW
  • 21. 21 Step structure WHEN The user clicks the button “SAVE" in the Report Navigation Column on the Search Results page WHEN WHO NAME OF ACTION OBJECT OF ACTION AREA OF ACTION PAGE NAME LINK+<TITLE> BUTTON+<TITLE> TEXTBOX+<TITLE> … TABLE PANEL POP-UP MODAL FORM TAB … PAGE NAME CLICK SELECT … I THE USER
  • 22. 22 Step structure THEN the term "<query>" should be the first in the Search History grid on the My History page THEN WHAT SHOULD [NOT] BE AREA OF ACTION PAGE NAME TABLE PANEL POP-UP MODAL FORM TAB … PAGE NAME SHOULD BE SHOULD NOT BE The term …
  • 23. 23 Step structure WHEN The user performs the Full Search with parameters: query: “fish"; city: “Murmansk"; on the Home page COMPLEX WHO NAME OF ACTION OBJECT OF ACTION WITH PARAMETERS: PAGE NAME LINK+<TITLE> BUTTON+<TITLE> TEXTBOX+<TITLE> … PARAM:VALUE PAGE NAME PERFORM FILL … I THE USER
  • 24. Small tricks when working with Cucumber-JVM Scenario Outline: Running a Full Text Quick Search. Given I perform Quick Search by “<query>" When I click on link 'Search History' on panel 'Quick Search' Then the term query “<query>" should be the first in the Search History grid Examples: |query | | IPhone 4S | | BMW X5 |
  • 25. 25 Small tricks when working with Cucumber-JVM Given the user navigate to the Home page = Given the user open the Home page (?: navigate to|open) не равно (:? navigate to|open) /** * Open "Home page" */ @Given("^the user (?:navigate to|open) the Home page$") public void the_user_open_the_Home_page() { homePage.open(); }
  • 26. 26 Small tricks when working with Cucumber-JVM When the user navigates to “Simple” report type on the page ‘Results’ = When the user navigates to report type “Simple” on the page ‘Results’ @When("^I navigate to (?:"([^"]*)" report type|report type "([^"]*)" ) on page 'Results'$") public void I_navigate_to_report (String dataset, String dataset2){ if(dataset!=null) { // TODO: code goes here }else{ // TODO: code goes here } }
  • 27. 27 Small tricks when working with Cucumber-JVM Given I have 5 cucumbers in my basket = Given I have 1 cucumber in my basket @Given("^I have (d+) cucumbers? in my basket$") public void i_have_cucumber(int number) { // TODO: code goes here }
  • 28. 28 Small tricks when working with Cucumber-JVM Then the response should be JSON: """ [{"name":"BMW X5", "color": "Blue"}, {"name":"UAZ Patriot", "color": "Blue"}] """ @Then("^the response should be JSON:$") public void theResponseShouldBeJSON(String expectedJson){ // TODO: code goes here }
  • 29. IDE Helper (plugin for IDEA) to write steps of scenario • We can see all implemented steps when printing text of step • We can see full description of steps • Helper reduces time of step creation KEY POINTS
  • 30. Best Practices. Test Step Creation. User Helpers. For example IntelliJ IDEA plugin «Cucumber for Java»
  • 31. 31 Conclusion 1. BDD is a very good approach. But this is not a magic bullet. 2. Improper using will bring more problems than benefits. 5. Tests Stability and BDD usability depends on you. 4. Do not confuse the BDD and tests written in Gherkin. 3. To use or not to use BDD depends on situation and project.
  • 32. 32 Useful materials 1. Video: Useful practices of creation automatic tests by using Cucumber-JVM: https://goo.gl/ZftM9h 2. Video: From Manual to Automated Testing: https://videoportal.epam.com/video/noPgmXaX 5. Book: “Specification by Example” 4. Book: “Cucumber Recipes” 3. Book: “BDD in Actions” 6. Allure-cucumber-plugin: https://github.com/kirlionik/allure- cucumber-plugin
  • 33. 33 Thank you for attention! Email: anton_shapin@epam.com Skype: anton_shapin