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

What's hot (20)

JAVA 8
JAVA 8JAVA 8
JAVA 8
 
BDD with the Cucumber
BDD with the CucumberBDD with the Cucumber
BDD with the Cucumber
 
Cucumber BDD
Cucumber BDDCucumber BDD
Cucumber BDD
 
BDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVABDD WITH CUCUMBER AND JAVA
BDD WITH CUCUMBER AND JAVA
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Java modules
Java modulesJava modules
Java modules
 
Spring Core
Spring CoreSpring Core
Spring Core
 
Introduction to Java 8
Introduction to Java 8Introduction to Java 8
Introduction to Java 8
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium Webdriver
 
Clean Code
Clean CodeClean Code
Clean Code
 
Why Katalon Studio?
Why Katalon Studio?Why Katalon Studio?
Why Katalon Studio?
 
Tdd and bdd
Tdd and bddTdd and bdd
Tdd and bdd
 
Project Lombok!
Project Lombok!Project Lombok!
Project Lombok!
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Unit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and KarmaUnit testing in JavaScript with Jasmine and Karma
Unit testing in JavaScript with Jasmine and Karma
 
Acceptance Test Driven Development
Acceptance Test Driven DevelopmentAcceptance Test Driven Development
Acceptance Test Driven Development
 
Présentation OSGI
Présentation OSGIPrésentation OSGI
Présentation OSGI
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
ATDD Using Robot Framework
ATDD Using Robot FrameworkATDD Using Robot Framework
ATDD Using Robot Framework
 
Object Vs Data Structure - Clean code chapter6
Object Vs Data Structure - Clean code chapter6Object Vs Data Structure - Clean code chapter6
Object Vs Data Structure - Clean code chapter6
 

Similar to BDD from QA side

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 bddRodrigo Urubatan
 
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...QAFest
 
...and thus your forms automagically disappeared
...and thus your forms automagically disappeared...and thus your forms automagically disappeared
...and thus your forms automagically disappearedLuc Bors
 
Behavior Driven Development
Behavior Driven Development Behavior Driven Development
Behavior Driven Development Dhawal Joshi
 
[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...Future Processing
 
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 BDDKonstantin Kudryashov
 
New Ideas for Old Code - Greach
New Ideas for Old Code - GreachNew Ideas for Old Code - Greach
New Ideas for Old Code - GreachHamletDRC
 
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.Chris Laning
 
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 2017Ortus Solutions, Corp
 
Gui application for e mail application
Gui application for e mail applicationGui application for e mail application
Gui application for e mail applicationUmesh Mk
 
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 SummitOrtus Solutions, Corp
 
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 BDDRodrigo Urubatan
 
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 - Ortus Solutions, Corp
 
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 APIGavin Pickin
 
Cross mobile testautomation mit Xamarin & SpecFlow
Cross mobile testautomation mit Xamarin & SpecFlowCross mobile testautomation mit Xamarin & SpecFlow
Cross mobile testautomation mit Xamarin & SpecFlowChristian Hassa
 
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...Niels Frydenholm
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 

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
 
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...
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 

Recently uploaded

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 

Recently uploaded (20)

Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 

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