behavioral driven development with behat
TRANSCRIPT
![Page 1: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/1.jpg)
Training Day DrupalGovCon 2015 July 21 & 23, 2015
Behavior Driven Development with Behat
![Page 2: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/2.jpg)
About Promet
2
Open Source Applications – Focus on Drupal
DevOps
• Automated cloud infrastructure • Drupal deployments • Configuration management for
Drupal • Automated testing • Continuous integration • Performance and scaling • Open source tools (Chef, Git,
Jenkins)
➢ Founded in 2003 ➢ Open source technologists ➢ Drupal platform since 2008 ➢ Mobile apps since 2009
➢ Based in Chicago ➢ Distributed global team ➢ Agile development practices ➢ 24x7 support
Support
• 24x7 with SLA • Support for Drupal sites built by others • 24x7 monitoring • Drupal security and maintenance
updates • QA for custom modules • Code-level fixes • Help desk support • Ongoing development
• Drupal websites • Drupal-based web applications • Mobile apps integration • Systems integration • CMS migrations • Custom ecommerce • Prototyping and proof-of-
concepts
Custom Development
![Page 3: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/3.jpg)
Meet Your Trainers
Allan Chappell
Senior Solutions Architect
3
Lisa Ridley
Solutions Architect
![Page 4: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/4.jpg)
Housekeeping
Breaks
• 10:30 - Break
• 12:00 - Lunch (Boxed Lunches)
• 2:30 - Break
• 5:00 - Out-a-here
4
![Page 5: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/5.jpg)
Rules of the Road
• Keep external distractions to a minimum
• Place your cellphones on silent
• If you must take a call, please exit the room so you do not distract the learning process for other participants
• Please check and return emails during one of the breaks
• We will have regularly scheduled breaks; however if you must take a nature break, please feel free to exit at any point; however we will proceed without you.
• Feel free to ask questions at any time; this training is intended to be interactive and by interacting with us, you will be more likely to retain what we cover
• Please help us keep discussions on topic; if you need to engage with other class participants, please make arrangements to meet after the session for extracurricular discussion
5
![Page 6: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/6.jpg)
VM Setup
• Grab a USB Stick
• Copy the contents to a folder on your machine where you would like to work
• In a command line prompt, type
cd path/you/copied/to
vagrant box add promet_behat ./promet_behat.box
• Add promet.corp.dev your hosts file
• In your command line run
vagrant up
» When finished, navigate to http://promet.corp.dev
6
![Page 7: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/7.jpg)
7
What is Behavior Driven Development?
Software application development using a continuous example-based communication between business customers and software developers.
![Page 8: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/8.jpg)
Behavior Driven Development
• Rooted in agile software development
• Used to develop a solution “works” for the target user
• Ideally involves the business customer in an intimate and integrated fashion, from development to validation
8
![Page 9: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/9.jpg)
How is this Done?
• By developing specifications with the business customer
• By requiring the customer drive the priority of product feature development
• By communicating with the customer during all phases of the project
• By writing specifications in the business speak of the customer (business domain language)
9
![Page 10: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/10.jpg)
Business Domain Language?
• Written in the “business speak” of the client’s business world, or “domain”
• Geared toward being “business readable”
• Bridges the communications gap between product owners (clients) and developers (us) by expressing requirements in a common language that both sides understand
10
![Page 11: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/11.jpg)
Why is this Important?
11
When the customer thinks he explained… Helps keep you from delivering… When what the customer really
needs is…
![Page 12: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/12.jpg)
What’s the Benefit?
• Increases customer / developer mutual understanding of objectives
• Increases odds of the application you develop actually meeting the customer expectations
• Increases customer satisfaction
12
![Page 13: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/13.jpg)
13
Goal of the BDD process
The outcome of this process, ultimately, is a well-crafted set of User Acceptance Tests that can be used to evaluate how well the application
being developed meets client expectations.
![Page 14: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/14.jpg)
User Acceptance Tests
• Starts with a User Story
• Gets going with user story prioritization
• Then your Acceptance Criteria for your User Stories
• And Finally…write your software to comply with the Acceptance Criteria for the User Stories
14
![Page 15: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/15.jpg)
What is a User Story?
• A User Story is the smallest piece of functionality that adds business value
• A Good User Story is a Feature of your project
15
![Page 16: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/16.jpg)
Structure of a User Story
• As a user who…(target user role)
• I need…(business need)
• In order to….(obtain a benefit)
• Good user stories are written by the customer!
16
![Page 17: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/17.jpg)
User Story Example
• As a student…
• I want to purchase a parking pass...
• So I can park on campus without getting a ticket or being towed
17
![Page 18: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/18.jpg)
User Stories are Prioritized
• By the client
• Based on business importance
• With feedback from the development team
• Highest agreed priority items get worked on first
18
![Page 19: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/19.jpg)
Next Come Acceptance Criteria
• Written before programming begins
• Defines the specific functional aspects of the user story (Feature set)
• When development starts, a Feature set is complete when all Acceptance Criteria are met (i.e, all Acceptance tests for that Feature are passed)
• Acceptance Criteria follow the “context-action-outcome” behavioral pattern
19
![Page 20: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/20.jpg)
Structure of Acceptance Criteria
• Given that I am (context - user precondition)
• When I do this (action - performs activity)
• Then I should (outcome - see observable results)
• Think of this as a Scenario…
• …and each of the above as a Step in the Scenario
20
![Page 21: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/21.jpg)
21
As a Drupal Developer, how do you get there?
You start with Behat!
![Page 22: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/22.jpg)
What is Behat?
• A testing framework written in PHP
• Accepts tests written in a business domain language
• Executes those test on your application
• Designed to test the behavior of your application
22
![Page 23: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/23.jpg)
Behat works with Mink
• Mink is an open source browser controller/emulator API for web applications
• Written in PHP
• Integrates with Behat via the Mink Extension
23
![Page 24: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/24.jpg)
What does the Mink Extension Provide?
• Predefined “steps” that comprise the components of Acceptance Tests, or Scenarios
• Each “step” maps to a PHP callback that contains the code for the test
24
![Page 25: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/25.jpg)
But Wait! You Said…
• Tests were written in “business speak”
• And they are….using a structured, highly readable language called Gherkin
25
![Page 26: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/26.jpg)
What is Gherkin?
• Gherkin is a business readable, domain specific language created specifically for crafting behavior descriptions
• These behavior descriptions serve as both your product documentation and your acceptance tests
26
![Page 27: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/27.jpg)
Behat does the Work
• Features (User Stories and Acceptance Tests) are written in Gherkin and are composed of Scenarios and their supporting Steps
• Steps are parsed by Behat using regular expressions, and mapped to PHP Callbacks
• PHP Callbacks execute test code that powers Mink
• Mink runs browser simulations to test applications
27
![Page 28: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/28.jpg)
Behat Structure
• Behat is Pluggable, through extensions
• Mink Extension is a Behat Plugin
• Mink Extension, written in OO PHP, is extendable
28
• And the Drupal community has done so!
![Page 29: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/29.jpg)
Behat Drupal Extension
• Integration layer between Behat, Mink Extension and Drupal
• Provides additional, Drupal specific “steps” and corresponding PHP Callbacks to the base step collection provided by the Mink Extension
29
![Page 30: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/30.jpg)
Installing Drupal Extension
• Need to have Composer and Drush installed, and available through your environment path
• Create a composer.json file for your project in your project root
30
![Page 31: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/31.jpg)
composer.json
{ "require": { "drupal/drupal-extension": “~3.0”, “knplabs/friendly-contexts”: “dev-master” }, "config": { "bin-dir": "bin/" } }
$> composer install
31
![Page 32: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/32.jpg)
What does Composer Give you?
• bin/ -- contains Behat executable
• vendor/ -- contains dependencies, including Mink Extension, KNP Labs’ FriendlyContexts extension, the Drupal Extension and their dependencies
• Next you need to define your test environment parameters
32
![Page 33: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/33.jpg)
behat.yml (bare minimum)
default: suites: default: paths: [%paths.base%/features/default] contexts: - FeatureContext - Drupal\DrupalExtension\Context\MinkContext - Drupal\DrupalExtension\Context\MessageContext - Drupal\DrupalExtension\Context\DrushContext extensions: Behat\MinkExtension\Extension: goutte: ~ selenium2: ~ base_url: http://promet.corp.dev Knp\FriendlyContexts\Extension: smartTag: smartStep Drupal\DrupalExtension\Extension: blackbox: ~
33
![Page 34: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/34.jpg)
And you also get…
• features/ -- Directory that will house your features (user stories and scenarios) written in Gherkin
• features/bootstrap/FeatureContext.php -- Context extension that will house any of your application specific test callbacks
– Will extend DrupalExtension Context
34
![Page 35: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/35.jpg)
FeatureContext.php
• Change Class Extension from:
class FeatureContext extends BehatContext
• to
class FeatureContext extends Drupal\ DrupalExtension\Context\DrupalContext (or whatever context you wish to extend)
35
![Page 36: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/36.jpg)
Predefined Steps
• $bin/behat -di
or
• $bin/behat -dl
• -di provides detailed information about each step that includes all of the data included in the full doc comment
• -dl provides summary information about the structure of the step only, skipping the extraneous information in the full doc comment
36
![Page 37: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/37.jpg)
Write your Feature
• Saved in the features/default directory in a file called <something>.feature
• Can have multiple .feature files in this directory
• Can also have multiple directories in the features folder (to house “suites”)
• All will get executed unless otherwise specified
37
![Page 38: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/38.jpg)
Hands-On Time!
38
![Page 39: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/39.jpg)
Hands On Behat
• Fire up your Virtual Machine, and shell in
- vagrant up
- vagrant ssh
• Change to project directory
- /var/www/sites/promet.corp.dev
• Pull up site in your browser
- http://promet.corp.dev
39
![Page 40: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/40.jpg)
40
Hidden Location of Full Behat Test Suites
shell into the VM using “vagrant up”
cd /usr/local/promet/testing
You should see four folders:
✴ bootstrap ✴ promet_hr_role ✴ user_accounts ✴ working_at_promet
This folder can be copied to /var/www/sites/promet.corp.dev/testing to get all of the completed tests for the user requirements.
![Page 41: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/41.jpg)
Useful Sites and Documentation
• http://docs.behat.org/en/latest/
• https://behat-drupal-extension.readthedocs.org/en/3.0/
• http://mink.behat.org/en/latest/
• https://getcomposer.org/
• http://phantomjs.org/
41
![Page 42: Behavioral driven development with Behat](https://reader033.vdocuments.net/reader033/viewer/2022052915/587d838b1a28abcd648b47b3/html5/thumbnails/42.jpg)
Thank you for coming!
42