SlideShare a Scribd company logo
PHPConf.asia 2016 - BDD with Behat for Beginners
Session Breakdown
Preface (this)
Intro to BDD
Intro to Behat
Build some Tests
Why Are You Here?
What is your role in the development lifecycle?
What is your reason for attending this session?
What do you hope to get out of this session?
What is your experience level with PHP, Behat,
and BDD?
Pre-Run Checklist
Make sure you have:
PHP 5.6+
Composer
A browser with the Selenium driver
Selenium Server Standalone (Optional for 2.x)
Gotchas
Missing one of these extensions:
curl
mbstring
openssl
No default timezone in PHP.ini
PHPConf.asia 2016 - BDD with Behat for Beginners
What is BDD?
BDD is business driven, user focused, and test first.
It focuses on delivering business value as effectively
and efficiently as possible while maintaining
consistent quality throughout the entire application.
BDD is a methodology built around the principles of
lean development, extreme programming, test driven
development, and domain driven design.
What BDD Provides
Better understanding of the business requirement for
development and QA
Better understanding of existing features for the
business
Better communication via a ubiquitous language
Real insight into the business effect of a defect
What BDD Doesn’t Provide
The answer to all your problems
A replacement for unit testing
A replacement for manual testing
Super easy to implement everywhere right this second
A measure of code quality
Failed to Assert False is True
or
How I learned to love BDD
PHPConf.asia 2016 - BDD with Behat for Beginners
Stay Focused
It is crucial to the success of BDD to focus on what
value a feature provides to the business.
Always understand the the role of the user and
their relationship to the feature.
Do not get distracted by the technical aspects of
the implementation.
Story BDD Hierarchy
Feature
Background
Scenario
Step Step
Scenario
Step Step
Writing Features
Applications are comprised of features
BDD discretely separates each feature
Each feature contains a narrative and a scenario
Feature may also contain a background to set the
stage for the feature scenarios
Narrative
Feature narratives are written similarly to Agile/Scrum
stories and must answer these questions:
What is the business benefit?
Who is the beneficiary?
What is the action performed?
Background
A background should contain steps common to all, or
at least most, scenarios to prepare the application
environment for the scenarios.
Background steps should be tested elsewhere as part
of another feature.
Steps failing in the background steps will identify that
the failure is not related to the feature.
Scenario
A scenarios should contain a narrative
Scenarios work in a manner similar to unit tests by arranging
the environment necessary to begin the test, perform
actions, and then assert that the expected results have been
attained
Scenarios should not test multiple features. Do not perform
actions after assertions.
Scenario Outline
Scenario outlines use a common set of steps with
placeholders for data provided in a data table.
They are a replacement for multiple scenarios in which
data is the only differentiator and does not define the
feature. Adding sales tax would be an example of a
feature in which the data in the action and assertion
would be different.
Step
Steps do one of the following:
Arrange the environment
Perform an action
Assert a result of the previous actions
Steps should be reasonably reusable
Steps should be aggregated for simplification when
arranging the environment
PHPConf.asia 2016 - BDD with Behat for Beginners
What is Behat?
Open source Behavior Driven Development
framework for PHP
Official PHP implementation of Cucumber
One of the easiest Cucumber implementations to
get up and running quickly
Good documentation: http://docs.behat.org
Installation
PHAR installation
Single global install
One version for feature contexts
Project Installation
Composer based install as dependency
Version and dependencies tied to project
Components
Command line executable – behat
Configuration file – behat.yml
Feature context(s)
Feature Files
Command Line Executable
Allows for initializing the environment
Running features
Features and scenarios filterable by tags
Chooses environment
Listing step definitions
Configuration File
Split up into profiles
(inherit from default)
Configures custom
autoloader path
Defines global tag filters
Defines output
formatters
Defines feature suites
Configures extensions
Feature Context
Defines steps
May extend other contexts
May access other contexts
May add hooks for pre/post tag, step, scenario,
feature, and suite execution.
Gherkin
Gherkin is a Domain Specific Language (DSL)
utilized to write Features in Behat. It uses key words
to identify the type of step:
Given – Arrange
When – Act
Then - Assert
Example Gherkin
Feature: Home Page
Scenario: Login Link
Given I am on the homepage
When I click " Login"
Then I will be on the "LaunchKey | Log in"
page
Step Backing Code
Method on a feature context
Contains doc block annotated (@) matchers
Support defined in context. Defaults to Turnip
Supports Turnip and regular expressions
Can contain examples doc block
Can contain descript in the doc block
Example Step
/**
* Opens homepage
* Example: Given I am on "/"
* Example: When I go to "/"
* Example: And I go to "/”
* @Given (I )am on :path
* @When (I )go to :path
*/
public function visitPath($path)
{
$this->browser->open($path);
}
PHPConf.asia 2016 - BDD with Behat for Beginners
Create a Project
Composer “init”
Add requirements
Behat “init”
Add Contexts to Config
Verify Your Install
Run “vendor/bin/behat –h”
You should see the help text
Initialize Behat
Initialize the behat project via the Behat CLI
with the --init flag
Verify by running “vendor/bin/behat”
Add Mink to Config
• Add the extension to the default profile
• Set the base URL
• Add the drivers
Add Contexts to Config
• Add Mink context to get access to pre-built
browser steps
• Add project context to make custom steps
Verify Configuration
Run “vendor/bin/behat –dl”
You should see a LOT of steps
Run “vendor/bin/behat –di”
You should see additional information for the
steps
Lets Write A Feature Test
User Story:
In order to use the site
As a site visitor
I can access the website
Let’s Make Another
Requirement:
In order to be a user
As a visitor
I can register for a user account
What About Clean Up
Requirement:
E-Mail Address is the user identifier and must be
unique among all users
We’re going to have to clean up users in a hook
Steps Need to Be Intuitive
Checking for errors on registration submission
will require a custom step with some additional
logic
Add Other Requirements
E-Mail Address is the user identifier and must be
unique among all users
Name is required and captures the users name
Password is required and must utilize a verification
field to ensure correct password entry
Finish Up Labs/Examples
Server and Behat features found in GitHub:
https://github.com/aenglander/bdd-with-behat-for-
beginners
Master branch is Behat
Master is tagged to go step by step
Server branch is server
Selenium
Industry standard
Server with remote API
Direct integration with Behat/Mink via Selenium
Driver
Can be used headless with PhantomJS via
GhostDriver implementation
Using Selenium Server
Add config to bahat.yml and specify browser
Apply @javascript tag to scenarios or a feature
Start Selenium Standalone Server
Run tests
Selenium Grid
Allows for multiple simultaneous test runs, multiple
browser versions, and multiple operating systems
One Hub and Multiple Nodes
Uses same app as Standalone Server
Can be flakey and hard to manage
Sauce Labs/BrowserStack
Special Drivers for Sauce Labs and
BrowserStack
Not well documented but work very well
Allow for a “Grid” style environment without
managing the Grid
Configuring Mink Driver
Poorly documented
Easy to figure out the settings by looking at the
driver factories. See:
vendor/behat/mink-
extension/src/Behat/MinkExtension/ServiceContainer
/Driver
Best Practices
Feature files contain one Feature
Features should be more business than
technical focused
Best Practices (cont.)
Use the three A’s
Arrange – Background – Given
Act – When
Assert - Then
Best Practices (cont.)
Make steps visually verifiable. Feature files
should be able to serve as documentation
Clean up after yourself
Scenarios should be idempotent
Spend the time to do it the right way

More Related Content

What's hot (19)

PPTX
Behavior driven development - cucumber, Junit and java
Naveen Kumar Singh
 
PPTX
Using Specflow for BDD
Abhimanyu Singhal
 
PPTX
SpecFlow for Agile Teams
Alejandro Ramirez
 
PDF
BDD with JBehave
Sascha Rodekamp
 
PPTX
BDD with SpecFlow and Selenium
Liraz Shay
 
PPTX
Introduction to Bdd and cucumber
Nibu Baby
 
PPTX
BDD for APIs
Jason Harmon
 
PDF
Serenity-BDD training
Savvycom Savvycom
 
PPT
Getting Started with Zend Framework
Juan Antonio
 
PPTX
Cucumber BDD
Pravin Dsilva
 
PPT
Rich GUI Testing: Swing and JavaFX
Alex Ruiz
 
PPTX
Behaviour Driven Development
Richard Ruiter
 
PDF
Behavior Driven Development with SpecFlow
Rachid Kherrazi
 
PDF
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup
 
ODP
Improve your development skills with Test Driven Development
John Stevenson
 
PDF
AngularJS Beginner Day One
Troy Miles
 
KEY
ATDD in Practice
Steven Mak
 
PPTX
Jbehave selenium
Vadim Goncharenko
 
PDF
Sergey Pirogov "Test coverage myth busted"
Fwdays
 
Behavior driven development - cucumber, Junit and java
Naveen Kumar Singh
 
Using Specflow for BDD
Abhimanyu Singhal
 
SpecFlow for Agile Teams
Alejandro Ramirez
 
BDD with JBehave
Sascha Rodekamp
 
BDD with SpecFlow and Selenium
Liraz Shay
 
Introduction to Bdd and cucumber
Nibu Baby
 
BDD for APIs
Jason Harmon
 
Serenity-BDD training
Savvycom Savvycom
 
Getting Started with Zend Framework
Juan Antonio
 
Cucumber BDD
Pravin Dsilva
 
Rich GUI Testing: Swing and JavaFX
Alex Ruiz
 
Behaviour Driven Development
Richard Ruiter
 
Behavior Driven Development with SpecFlow
Rachid Kherrazi
 
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup
 
Improve your development skills with Test Driven Development
John Stevenson
 
AngularJS Beginner Day One
Troy Miles
 
ATDD in Practice
Steven Mak
 
Jbehave selenium
Vadim Goncharenko
 
Sergey Pirogov "Test coverage myth busted"
Fwdays
 

Viewers also liked (20)

PPT
Haa iup workshop_uh
University of Hawaii at manoa
 
PDF
Resume
mgouldlucht
 
PDF
Hubspot Software Cert
Textbroker International
 
DOCX
SEÇÃO Nº 20
Jerbialdo
 
PDF
Judge Halts Indiana Vaping Law
Abdul-Hakim Shabazz
 
PPT
MATERI KELAS XII PKn
maryuni ,.
 
PDF
Professional Development`
Francisco Gomez
 
PDF
Mike pence's 2016 state of the state address
Abdul-Hakim Shabazz
 
PPTX
Bab 5
maryuni ,.
 
PPT
Sep 15
dilipseervi
 
DOCX
SEÇÃO Nº 17 (agregada à seção 18)
Jerbialdo
 
PPT
Uhm iup workshop introduction
University of Hawaii at manoa
 
DOCX
SEÇÃO Nº 202
Jerbialdo
 
PDF
DIÁRIO OFICIAL DO MUNICÍPIO (PREFEITURA MUNICIPAL DE DÁRIO MEIRA)
Jerbialdo
 
PPTX
Nearshore Best Practices Workshop
Velocity Partners
 
DOCX
2nd Grade
huronacademy
 
PPTX
The sentence, the phrase and the clause
Brett Provance
 
PDF
Zend con 2016 - Asynchronous Prorgamming in PHP
Adam Englander
 
PPTX
Slide de futsal para aula de ed. física
adnete
 
DOCX
Indikator soal p kn xi
maryuni ,.
 
Haa iup workshop_uh
University of Hawaii at manoa
 
Resume
mgouldlucht
 
Hubspot Software Cert
Textbroker International
 
SEÇÃO Nº 20
Jerbialdo
 
Judge Halts Indiana Vaping Law
Abdul-Hakim Shabazz
 
MATERI KELAS XII PKn
maryuni ,.
 
Professional Development`
Francisco Gomez
 
Mike pence's 2016 state of the state address
Abdul-Hakim Shabazz
 
Bab 5
maryuni ,.
 
Sep 15
dilipseervi
 
SEÇÃO Nº 17 (agregada à seção 18)
Jerbialdo
 
Uhm iup workshop introduction
University of Hawaii at manoa
 
SEÇÃO Nº 202
Jerbialdo
 
DIÁRIO OFICIAL DO MUNICÍPIO (PREFEITURA MUNICIPAL DE DÁRIO MEIRA)
Jerbialdo
 
Nearshore Best Practices Workshop
Velocity Partners
 
2nd Grade
huronacademy
 
The sentence, the phrase and the clause
Brett Provance
 
Zend con 2016 - Asynchronous Prorgamming in PHP
Adam Englander
 
Slide de futsal para aula de ed. física
adnete
 
Indikator soal p kn xi
maryuni ,.
 
Ad

Similar to PHPConf.asia 2016 - BDD with Behat for Beginners (20)

PPTX
Zend con 2016 bdd with behat for beginners
Adam Englander
 
PPTX
CucumberSeleniumWD
Vikas Sarin
 
PDF
Mastering BDD with Cucumber & Java for Test Automation
digitaljignect
 
PDF
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Mack Hardy
 
PPTX
Cucumber_Training_ForQA
Meenakshi Singhal
 
PPTX
Php[tek] 2016 - BDD with Behat for Beginners
Adam Englander
 
PPTX
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
PPTX
Automated Acceptance Tests & Tool choice
toddbr
 
PDF
Introducing BDD and TDD with Cucumber
Knoldus Inc.
 
PPTX
Behavior Driven Development
MonocularVision
 
PPTX
Behaviour Driven Development V 0.1
willmation
 
PPTX
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
NCCOMMS
 
PPTX
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Steven Pignataro
 
PDF
Behavior Driven Testing with SpecFlow
Rachid Kherrazi
 
PPTX
Slides from LAX & DEN usergroup meetings
10n Software, LLC
 
PDF
Software Development Standard Operating Procedure
rupeshchanchal
 
PPTX
S4H_885 How to approach Fit to Standard Analysis -Generic Solution.pptx
walletsbiotic8n
 
PDF
The "Holy Grail" of Dev/Ops
Erik Osterman
 
PPT
TDD with BizTalk
Ben Carey
 
Zend con 2016 bdd with behat for beginners
Adam Englander
 
CucumberSeleniumWD
Vikas Sarin
 
Mastering BDD with Cucumber & Java for Test Automation
digitaljignect
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Mack Hardy
 
Cucumber_Training_ForQA
Meenakshi Singhal
 
Php[tek] 2016 - BDD with Behat for Beginners
Adam Englander
 
BDD Selenium for Agile Teams - User Stories
Sauce Labs
 
Automated Acceptance Tests & Tool choice
toddbr
 
Introducing BDD and TDD with Cucumber
Knoldus Inc.
 
Behavior Driven Development
MonocularVision
 
Behaviour Driven Development V 0.1
willmation
 
SPCA2013 - Test-driven Development with SharePoint 2013 and Visual Studio
NCCOMMS
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Steven Pignataro
 
Behavior Driven Testing with SpecFlow
Rachid Kherrazi
 
Slides from LAX & DEN usergroup meetings
10n Software, LLC
 
Software Development Standard Operating Procedure
rupeshchanchal
 
S4H_885 How to approach Fit to Standard Analysis -Generic Solution.pptx
walletsbiotic8n
 
The "Holy Grail" of Dev/Ops
Erik Osterman
 
TDD with BizTalk
Ben Carey
 
Ad

More from Adam Englander (20)

PPTX
Making PHP Smarter - Dutch PHP 2023.pptx
Adam Englander
 
PDF
Practical API Security - PyCon 2019
Adam Englander
 
PDF
Threat Modeling for Dummies
Adam Englander
 
PDF
ZendCon 2018 - Practical API Security
Adam Englander
 
PDF
ZendCon 2018 - Cryptography in Depth
Adam Englander
 
PDF
Threat Modeling for Dummies - Cascadia PHP 2018
Adam Englander
 
PDF
Dutch PHP 2018 - Cryptography for Beginners
Adam Englander
 
PDF
php[tek] 2108 - Cryptography Advances in PHP 7.2
Adam Englander
 
PDF
php[tek] 2018 - Biometrics, fantastic failure point of the future
Adam Englander
 
PDF
Biometrics: Sexy, Secure and... Stupid - RSAC 2018
Adam Englander
 
PPTX
Practical API Security - PyCon 2018
Adam Englander
 
PDF
Practical API Security - Midwest PHP 2018
Adam Englander
 
PDF
Cryptography for Beginners - Midwest PHP 2018
Adam Englander
 
PDF
Cryptography for Beginners - Sunshine PHP 2018
Adam Englander
 
PDF
ConFoo Vancouver 2017 - Biometrics: Fantastic Failure Point of the Future
Adam Englander
 
PDF
Con Foo 2017 - Don't Loose Sleep - Secure Your REST
Adam Englander
 
PDF
ZendCon 2017 - Cryptography for Beginners
Adam Englander
 
PDF
ZendCon 2017: The Red Team is Coming
Adam Englander
 
PDF
ZendCon 2017 - Build a Bot Workshop - Async Primer
Adam Englander
 
PDF
Symfony Live San Franciso 2017 - BDD API Development with Symfony and Behat
Adam Englander
 
Making PHP Smarter - Dutch PHP 2023.pptx
Adam Englander
 
Practical API Security - PyCon 2019
Adam Englander
 
Threat Modeling for Dummies
Adam Englander
 
ZendCon 2018 - Practical API Security
Adam Englander
 
ZendCon 2018 - Cryptography in Depth
Adam Englander
 
Threat Modeling for Dummies - Cascadia PHP 2018
Adam Englander
 
Dutch PHP 2018 - Cryptography for Beginners
Adam Englander
 
php[tek] 2108 - Cryptography Advances in PHP 7.2
Adam Englander
 
php[tek] 2018 - Biometrics, fantastic failure point of the future
Adam Englander
 
Biometrics: Sexy, Secure and... Stupid - RSAC 2018
Adam Englander
 
Practical API Security - PyCon 2018
Adam Englander
 
Practical API Security - Midwest PHP 2018
Adam Englander
 
Cryptography for Beginners - Midwest PHP 2018
Adam Englander
 
Cryptography for Beginners - Sunshine PHP 2018
Adam Englander
 
ConFoo Vancouver 2017 - Biometrics: Fantastic Failure Point of the Future
Adam Englander
 
Con Foo 2017 - Don't Loose Sleep - Secure Your REST
Adam Englander
 
ZendCon 2017 - Cryptography for Beginners
Adam Englander
 
ZendCon 2017: The Red Team is Coming
Adam Englander
 
ZendCon 2017 - Build a Bot Workshop - Async Primer
Adam Englander
 
Symfony Live San Franciso 2017 - BDD API Development with Symfony and Behat
Adam Englander
 

Recently uploaded (20)

PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PPTX
Top iOS App Development Company in the USA for Innovative Apps
SynapseIndia
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
Complete Network Protection with Real-Time Security
L4RGINDIA
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Top iOS App Development Company in the USA for Innovative Apps
SynapseIndia
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
Complete Network Protection with Real-Time Security
L4RGINDIA
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 

PHPConf.asia 2016 - BDD with Behat for Beginners

  • 2. Session Breakdown Preface (this) Intro to BDD Intro to Behat Build some Tests
  • 3. Why Are You Here? What is your role in the development lifecycle? What is your reason for attending this session? What do you hope to get out of this session? What is your experience level with PHP, Behat, and BDD?
  • 4. Pre-Run Checklist Make sure you have: PHP 5.6+ Composer A browser with the Selenium driver Selenium Server Standalone (Optional for 2.x)
  • 5. Gotchas Missing one of these extensions: curl mbstring openssl No default timezone in PHP.ini
  • 7. What is BDD? BDD is business driven, user focused, and test first. It focuses on delivering business value as effectively and efficiently as possible while maintaining consistent quality throughout the entire application. BDD is a methodology built around the principles of lean development, extreme programming, test driven development, and domain driven design.
  • 8. What BDD Provides Better understanding of the business requirement for development and QA Better understanding of existing features for the business Better communication via a ubiquitous language Real insight into the business effect of a defect
  • 9. What BDD Doesn’t Provide The answer to all your problems A replacement for unit testing A replacement for manual testing Super easy to implement everywhere right this second A measure of code quality
  • 10. Failed to Assert False is True or How I learned to love BDD
  • 12. Stay Focused It is crucial to the success of BDD to focus on what value a feature provides to the business. Always understand the the role of the user and their relationship to the feature. Do not get distracted by the technical aspects of the implementation.
  • 14. Writing Features Applications are comprised of features BDD discretely separates each feature Each feature contains a narrative and a scenario Feature may also contain a background to set the stage for the feature scenarios
  • 15. Narrative Feature narratives are written similarly to Agile/Scrum stories and must answer these questions: What is the business benefit? Who is the beneficiary? What is the action performed?
  • 16. Background A background should contain steps common to all, or at least most, scenarios to prepare the application environment for the scenarios. Background steps should be tested elsewhere as part of another feature. Steps failing in the background steps will identify that the failure is not related to the feature.
  • 17. Scenario A scenarios should contain a narrative Scenarios work in a manner similar to unit tests by arranging the environment necessary to begin the test, perform actions, and then assert that the expected results have been attained Scenarios should not test multiple features. Do not perform actions after assertions.
  • 18. Scenario Outline Scenario outlines use a common set of steps with placeholders for data provided in a data table. They are a replacement for multiple scenarios in which data is the only differentiator and does not define the feature. Adding sales tax would be an example of a feature in which the data in the action and assertion would be different.
  • 19. Step Steps do one of the following: Arrange the environment Perform an action Assert a result of the previous actions Steps should be reasonably reusable Steps should be aggregated for simplification when arranging the environment
  • 21. What is Behat? Open source Behavior Driven Development framework for PHP Official PHP implementation of Cucumber One of the easiest Cucumber implementations to get up and running quickly Good documentation: http://docs.behat.org
  • 22. Installation PHAR installation Single global install One version for feature contexts Project Installation Composer based install as dependency Version and dependencies tied to project
  • 23. Components Command line executable – behat Configuration file – behat.yml Feature context(s) Feature Files
  • 24. Command Line Executable Allows for initializing the environment Running features Features and scenarios filterable by tags Chooses environment Listing step definitions
  • 25. Configuration File Split up into profiles (inherit from default) Configures custom autoloader path Defines global tag filters Defines output formatters Defines feature suites Configures extensions
  • 26. Feature Context Defines steps May extend other contexts May access other contexts May add hooks for pre/post tag, step, scenario, feature, and suite execution.
  • 27. Gherkin Gherkin is a Domain Specific Language (DSL) utilized to write Features in Behat. It uses key words to identify the type of step: Given – Arrange When – Act Then - Assert
  • 28. Example Gherkin Feature: Home Page Scenario: Login Link Given I am on the homepage When I click " Login" Then I will be on the "LaunchKey | Log in" page
  • 29. Step Backing Code Method on a feature context Contains doc block annotated (@) matchers Support defined in context. Defaults to Turnip Supports Turnip and regular expressions Can contain examples doc block Can contain descript in the doc block
  • 30. Example Step /** * Opens homepage * Example: Given I am on "/" * Example: When I go to "/" * Example: And I go to "/” * @Given (I )am on :path * @When (I )go to :path */ public function visitPath($path) { $this->browser->open($path); }
  • 32. Create a Project Composer “init” Add requirements Behat “init” Add Contexts to Config
  • 33. Verify Your Install Run “vendor/bin/behat –h” You should see the help text
  • 34. Initialize Behat Initialize the behat project via the Behat CLI with the --init flag Verify by running “vendor/bin/behat”
  • 35. Add Mink to Config • Add the extension to the default profile • Set the base URL • Add the drivers
  • 36. Add Contexts to Config • Add Mink context to get access to pre-built browser steps • Add project context to make custom steps
  • 37. Verify Configuration Run “vendor/bin/behat –dl” You should see a LOT of steps Run “vendor/bin/behat –di” You should see additional information for the steps
  • 38. Lets Write A Feature Test User Story: In order to use the site As a site visitor I can access the website
  • 39. Let’s Make Another Requirement: In order to be a user As a visitor I can register for a user account
  • 40. What About Clean Up Requirement: E-Mail Address is the user identifier and must be unique among all users We’re going to have to clean up users in a hook
  • 41. Steps Need to Be Intuitive Checking for errors on registration submission will require a custom step with some additional logic
  • 42. Add Other Requirements E-Mail Address is the user identifier and must be unique among all users Name is required and captures the users name Password is required and must utilize a verification field to ensure correct password entry
  • 43. Finish Up Labs/Examples Server and Behat features found in GitHub: https://github.com/aenglander/bdd-with-behat-for- beginners Master branch is Behat Master is tagged to go step by step Server branch is server
  • 44. Selenium Industry standard Server with remote API Direct integration with Behat/Mink via Selenium Driver Can be used headless with PhantomJS via GhostDriver implementation
  • 45. Using Selenium Server Add config to bahat.yml and specify browser Apply @javascript tag to scenarios or a feature Start Selenium Standalone Server Run tests
  • 46. Selenium Grid Allows for multiple simultaneous test runs, multiple browser versions, and multiple operating systems One Hub and Multiple Nodes Uses same app as Standalone Server Can be flakey and hard to manage
  • 47. Sauce Labs/BrowserStack Special Drivers for Sauce Labs and BrowserStack Not well documented but work very well Allow for a “Grid” style environment without managing the Grid
  • 48. Configuring Mink Driver Poorly documented Easy to figure out the settings by looking at the driver factories. See: vendor/behat/mink- extension/src/Behat/MinkExtension/ServiceContainer /Driver
  • 49. Best Practices Feature files contain one Feature Features should be more business than technical focused
  • 50. Best Practices (cont.) Use the three A’s Arrange – Background – Given Act – When Assert - Then
  • 51. Best Practices (cont.) Make steps visually verifiable. Feature files should be able to serve as documentation Clean up after yourself Scenarios should be idempotent Spend the time to do it the right way

Editor's Notes

  • #6: Extensions are usually pre-enabled by default with Linux or Mac package managers. Windows users need to uncomment the line n the php.ini. Search for “date.timezone”. Set it to whatever you like. If you are not sure you can use “UTC”.
  • #8: The direct correlation between the SOAP box and BDD is the reason BDD is becoming more and more popular.
  • #11: I never meant to learn BDD. I was just looking for a tool to help me stop breaking a critical legacy business application every time we released a new feature. We had built entire integration testing platforms but they would not give me or the business what we needed to identify defects and were constantly giving false positives and negatives to the brittle nature of the tests. The first step was using feature based testing with Cucumber and then Behat when it became available. Embracing BDD, like everything else in my career, was a process of enlightenment. It took time and required pain to drive growth.
  • #33: composer init composer require --dev behat/behat behat/mink-extension behat/mink-goutte-driver behat/mink-selenium2-driver vendor/bin/behat --init vendor/bin/behat -h
  • #35: vendor/bin/behat --init vendor/bin/behat
  • #36: default: extensions: Behat\MinkExtension: base_url: http://adam-bdd-with-behat.ngrok.io goutte: ~ selenium2: ~
  • #37: default: suites: default: contexts: - Behat\MinkExtension\Context\MinkContext - FeatureContext
  • #38: Vendor/bin/behat -dl
  • #39: Feature: A visitor can access the homepage In order to use the site As a site visitor I can access the website Scenario: Homepage loads When I go to the homepage Then I should see "Your Application's Landing Page. "
  • #40: Feature: User Registration In order to be a user As a visitor I can register for a user account Background: Given I am on "/register" Scenario: Proper fields register the user When I fill in the following: | Name | Adam | | E-Mail Address | [email protected] | | Password | Password1 | | Confirm Password | Password1 | And I press "Register" Then I should be on the homepage And the response should contain "Logout"
  • #41: use Behat\Behat\Hook\Scope\BeforeScenarioScope; /** * @BeforeScenario */ public function cleanupUsers(BeforeScenarioScope $scope) { $this->mink = $scope->getEnvironment()->getContext('Behat\MinkExtension\Context\MinkContext'); $this->mink->visit(‘/delete-test-users’); }
  • #42: /** * @Then the :field field should have an error */ public function theFieldHasAnError($field) { $has = $this->mink->getSession() ->getPage() ->findField($field) ->getParent() ->has('css', 'span.help-block'); if ( ! $has) { throw new \Exception("Field \"{$field}\" has no error"); } }
  • #46: Behat\MinkExtension: browser_name: chrome goutte: ~ selenium2: ~