SlideShare a Scribd company logo
Training Day
DrupalGovCon 2015
July 21 & 23, 2015
Behavior Driven Development with Behat
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
Meet Your Trainers
Allan Chappell
Senior Solutions Architect
3
Lisa Ridley
Solutions Architect
Housekeeping
Breaks
• 10:30 - Break
• 12:00 - Lunch (Boxed Lunches)
• 2:30 - Break
• 5:00 - Out-a-here
4
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
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
7
What is Behavior Driven Development?
Software application development using a continuous example-based
communication between business customers and software developers.
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
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
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
Why is this Important?
11
When the customer thinks he
explained… Helps keep you from delivering… When what the customer really
needs is…
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
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.
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
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
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
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
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
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
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
21
As a Drupal Developer, how do you get there?
You start with Behat!
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
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
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
But Wait! You Said…
• Tests were written in “business speak”
• And they are….using a structured, highly readable language called Gherkin
25
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
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
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!
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
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
composer.json
{
"require": {
"drupal/drupal-extension": “~3.0”,
“knplabs/friendly-contexts”: “dev-master”
},
"config": {
"bin-dir": "bin/"
}
}
$> composer install
31
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
behat.yml (bare minimum)
default:
suites:
default:
paths: [%paths.base%/features/default]
contexts:
- FeatureContext
- DrupalDrupalExtensionContextMinkContext
- DrupalDrupalExtensionContextMessageContext
- DrupalDrupalExtensionContextDrushContext
extensions:
BehatMinkExtensionExtension:
goutte: ~
selenium2: ~
base_url: http://promet.corp.dev
KnpFriendlyContextsExtension:
smartTag: smartStep
DrupalDrupalExtensionExtension:
blackbox: ~
33
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
FeatureContext.php
• Change Class Extension from:
class FeatureContext extends BehatContext
• to
class FeatureContext extends Drupal DrupalExtensionContextDrupalContext
(or whatever context you wish to extend)
35
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
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
Hands-On Time!
38
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
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.
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
Thank you for coming!
42

More Related Content

What's hot

O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
Thomas Daly
 
Impact Of A Cms Framework Change - Holland Open Netherlands
Impact Of A Cms Framework Change - Holland Open NetherlandsImpact Of A Cms Framework Change - Holland Open Netherlands
Impact Of A Cms Framework Change - Holland Open Netherlands
Wilco Jansen
 
OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020
Howard Greenberg
 
SAPUI5/OpenUI5 - Continuous Integration
SAPUI5/OpenUI5 - Continuous IntegrationSAPUI5/OpenUI5 - Continuous Integration
SAPUI5/OpenUI5 - Continuous Integration
Peter Muessig
 
OpenNTF Webinar Series: DQL with John Curtis September 2020
OpenNTF Webinar Series: DQL with John Curtis September 2020OpenNTF Webinar Series: DQL with John Curtis September 2020
OpenNTF Webinar Series: DQL with John Curtis September 2020
Graham Acres
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub Explained
Howard Greenberg
 
Drupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 Migration
Drupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 MigrationDrupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 Migration
Drupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 Migration
Cyber-Duck
 
mulesoft meetup @ bangalore
mulesoft meetup @ bangaloremulesoft meetup @ bangalore
mulesoft meetup @ bangalore
D.Rajesh Kumar
 
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax PluginsHnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax Pluginsdominion
 
Anypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet UpAnypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet Up
NeerajKumar1965
 
Managing Translation Workflows in Drupal 7
Managing Translation Workflows in Drupal 7Managing Translation Workflows in Drupal 7
Managing Translation Workflows in Drupal 7
Suzanne Dergacheva
 
5 essential tools for the PHP Developer on Windows
5 essential tools for the PHP Developer on Windows5 essential tools for the PHP Developer on Windows
5 essential tools for the PHP Developer on Windows
Stefan Koopmanschap
 
Mulesoft KL Meetup 2
Mulesoft KL Meetup 2Mulesoft KL Meetup 2
Mulesoft KL Meetup 2
NitushreeJena
 
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And DxlBp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxldominion
 
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Acquia
 
OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021
Howard Greenberg
 
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
Phase2
 
Automating the build and deployment of legacy applications
Automating the build and deployment of legacy applicationsAutomating the build and deployment of legacy applications
Automating the build and deployment of legacy applicationsCachet Software Solutions Ltd
 
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
Howard Greenberg
 

What's hot (20)

O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
 
Impact Of A Cms Framework Change - Holland Open Netherlands
Impact Of A Cms Framework Change - Holland Open NetherlandsImpact Of A Cms Framework Change - Holland Open Netherlands
Impact Of A Cms Framework Change - Holland Open Netherlands
 
OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020OpenNTF Webinar, May 19, 2020
OpenNTF Webinar, May 19, 2020
 
SAPUI5/OpenUI5 - Continuous Integration
SAPUI5/OpenUI5 - Continuous IntegrationSAPUI5/OpenUI5 - Continuous Integration
SAPUI5/OpenUI5 - Continuous Integration
 
OpenNTF Webinar Series: DQL with John Curtis September 2020
OpenNTF Webinar Series: DQL with John Curtis September 2020OpenNTF Webinar Series: DQL with John Curtis September 2020
OpenNTF Webinar Series: DQL with John Curtis September 2020
 
August OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub ExplainedAugust OpenNTF Webinar - Git and GitHub Explained
August OpenNTF Webinar - Git and GitHub Explained
 
Drupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 Migration
Drupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 MigrationDrupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 Migration
Drupal Webinar: Ignite and Accelerate Your Drupal 7 to Drupal 9 Migration
 
mulesoft meetup @ bangalore
mulesoft meetup @ bangaloremulesoft meetup @ bangalore
mulesoft meetup @ bangalore
 
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax PluginsHnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
Hnd201 Building Ibm Lotus Domino Applications With Ajax Plugins
 
Anypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet UpAnypoint MQ-DLQ NYC Meet Up
Anypoint MQ-DLQ NYC Meet Up
 
Managing Translation Workflows in Drupal 7
Managing Translation Workflows in Drupal 7Managing Translation Workflows in Drupal 7
Managing Translation Workflows in Drupal 7
 
5 essential tools for the PHP Developer on Windows
5 essential tools for the PHP Developer on Windows5 essential tools for the PHP Developer on Windows
5 essential tools for the PHP Developer on Windows
 
Mulesoft KL Meetup 2
Mulesoft KL Meetup 2Mulesoft KL Meetup 2
Mulesoft KL Meetup 2
 
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And DxlBp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
Bp308 Ibm Lotus Domino Web Facelift Using Ajax And Dxl
 
Arif_Shaik_CV
Arif_Shaik_CVArif_Shaik_CV
Arif_Shaik_CV
 
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
 
OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021OpenNTF Webinar, March, 2021
OpenNTF Webinar, March, 2021
 
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
 
Automating the build and deployment of legacy applications
Automating the build and deployment of legacy applicationsAutomating the build and deployment of legacy applications
Automating the build and deployment of legacy applications
 
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
September-2021 OpenNTF Webinar: Domino Online Meeting Integration (DOMI)
 

Viewers also liked

Front End page speed performance improvements for Drupal
Front End page speed performance improvements for DrupalFront End page speed performance improvements for Drupal
Front End page speed performance improvements for Drupal
Promet Source
 
Microservice Teststrategie mit Symfony2
Microservice Teststrategie mit Symfony2Microservice Teststrategie mit Symfony2
Microservice Teststrategie mit Symfony2
Per Bernhardt
 
A soa approximation on symfony
A soa approximation on symfonyA soa approximation on symfony
A soa approximation on symfony
Carlos Agudo Belloso
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012D
 
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with BehatGrand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Ryan Weaver
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
Xavier Fornés Arrabal
 
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
Matthias Noback
 
SOA with PHP and Symfony
SOA with PHP and SymfonySOA with PHP and Symfony
SOA with PHP and Symfony
MichalSchroeder
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Ryan Weaver
 

Viewers also liked (9)

Front End page speed performance improvements for Drupal
Front End page speed performance improvements for DrupalFront End page speed performance improvements for Drupal
Front End page speed performance improvements for Drupal
 
Microservice Teststrategie mit Symfony2
Microservice Teststrategie mit Symfony2Microservice Teststrategie mit Symfony2
Microservice Teststrategie mit Symfony2
 
A soa approximation on symfony
A soa approximation on symfonyA soa approximation on symfony
A soa approximation on symfony
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
 
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with BehatGrand Rapids PHP Meetup: Behavioral Driven Development with Behat
Grand Rapids PHP Meetup: Behavioral Driven Development with Behat
 
Microservice architecture
Microservice architectureMicroservice architecture
Microservice architecture
 
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
High Quality Symfony Bundles tutorial - Dutch PHP Conference 2014
 
SOA with PHP and Symfony
SOA with PHP and SymfonySOA with PHP and Symfony
SOA with PHP and Symfony
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 

Similar to Behavioral driven development with Behat

Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015
WaveMaker, Inc.
 
Building environment of #UserDevOps and not only DevOps
Building environment of #UserDevOps and not only DevOpsBuilding environment of #UserDevOps and not only DevOps
Building environment of #UserDevOps and not only DevOps
Rajnish Chauhan
 
Containers, microservices and serverless for realists
Containers, microservices and serverless for realistsContainers, microservices and serverless for realists
Containers, microservices and serverless for realists
Karthik Gaekwad
 
Enter the mind of an Agile Developer
Enter the mind of an Agile DeveloperEnter the mind of an Agile Developer
Enter the mind of an Agile Developer
BSGAfrica
 
[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li
[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li
[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li
Ambassador Labs
 
Enterprise CI as-a-Service using Jenkins
Enterprise CI as-a-Service using JenkinsEnterprise CI as-a-Service using Jenkins
Enterprise CI as-a-Service using Jenkins
CollabNet
 
Devops
DevopsDevops
Devops
JyothirmaiG4
 
Overview of Kovair Omnibus Integration Platform
Overview of Kovair Omnibus Integration PlatformOverview of Kovair Omnibus Integration Platform
Overview of Kovair Omnibus Integration Platform
Kovair
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
DevOps for Enterprise Systems
 
An Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller PatternAn Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller Pattern
Teamstudio
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
XPDays
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes matters
Platform9
 
Development Processes and Tooling
Development Processes and ToolingDevelopment Processes and Tooling
Development Processes and Tooling
Bora Bilgin
 
SAP ByDesign Development
SAP ByDesign DevelopmentSAP ByDesign Development
SAP ByDesign Development
Malan Amarasinghe
 
Agile Secure Cloud Application Development Management
Agile Secure Cloud Application Development ManagementAgile Secure Cloud Application Development Management
Agile Secure Cloud Application Development Management
Adam Getchell
 
Serverless brewbox
Serverless   brewboxServerless   brewbox
Serverless brewbox
Lino Telera
 
Neev Open Source Contributions
Neev Open Source ContributionsNeev Open Source Contributions
Neev Open Source Contributions
Neev Technologies
 
New life inside monolithic application
New life inside monolithic applicationNew life inside monolithic application
New life inside monolithic application
Taras Matyashovsky
 
DevOps for Network Engineers
DevOps for Network EngineersDevOps for Network Engineers
DevOps for Network Engineers
stefan vallin
 

Similar to Behavioral driven development with Behat (20)

Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015Docker & aPaaS: Enterprise Innovation and Trends for 2015
Docker & aPaaS: Enterprise Innovation and Trends for 2015
 
Building environment of #UserDevOps and not only DevOps
Building environment of #UserDevOps and not only DevOpsBuilding environment of #UserDevOps and not only DevOps
Building environment of #UserDevOps and not only DevOps
 
Containers, microservices and serverless for realists
Containers, microservices and serverless for realistsContainers, microservices and serverless for realists
Containers, microservices and serverless for realists
 
Enter the mind of an Agile Developer
Enter the mind of an Agile DeveloperEnter the mind of an Agile Developer
Enter the mind of an Agile Developer
 
[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li
[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li
[QCon London 2020] The Future of Cloud Native API Gateways - Richard Li
 
Enterprise CI as-a-Service using Jenkins
Enterprise CI as-a-Service using JenkinsEnterprise CI as-a-Service using Jenkins
Enterprise CI as-a-Service using Jenkins
 
Devops
DevopsDevops
Devops
 
Overview of Kovair Omnibus Integration Platform
Overview of Kovair Omnibus Integration PlatformOverview of Kovair Omnibus Integration Platform
Overview of Kovair Omnibus Integration Platform
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
 
An Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller PatternAn Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller Pattern
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
Why kubernetes matters
Why kubernetes mattersWhy kubernetes matters
Why kubernetes matters
 
Development Processes and Tooling
Development Processes and ToolingDevelopment Processes and Tooling
Development Processes and Tooling
 
SAP ByDesign Development
SAP ByDesign DevelopmentSAP ByDesign Development
SAP ByDesign Development
 
Agile Secure Cloud Application Development Management
Agile Secure Cloud Application Development ManagementAgile Secure Cloud Application Development Management
Agile Secure Cloud Application Development Management
 
Serverless brewbox
Serverless   brewboxServerless   brewbox
Serverless brewbox
 
Neev Open Source Contributions
Neev Open Source ContributionsNeev Open Source Contributions
Neev Open Source Contributions
 
Chirag solutions profile
Chirag solutions profileChirag solutions profile
Chirag solutions profile
 
New life inside monolithic application
New life inside monolithic applicationNew life inside monolithic application
New life inside monolithic application
 
DevOps for Network Engineers
DevOps for Network EngineersDevOps for Network Engineers
DevOps for Network Engineers
 

More from Promet Source

How To Start Building Your Own Website With Drupal by Mary Chris Casis
How To Start Building Your Own Website With Drupal by Mary Chris CasisHow To Start Building Your Own Website With Drupal by Mary Chris Casis
How To Start Building Your Own Website With Drupal by Mary Chris Casis
Promet Source
 
DrupalCamp Cebu 2018 R&F by Andrew Kucharski
DrupalCamp Cebu 2018 R&F by Andrew KucharskiDrupalCamp Cebu 2018 R&F by Andrew Kucharski
DrupalCamp Cebu 2018 R&F by Andrew Kucharski
Promet Source
 
Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018
Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018
Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018
Promet Source
 
Migrating to-Drupal-8 by Bryan Manalo
Migrating to-Drupal-8 by Bryan ManaloMigrating to-Drupal-8 by Bryan Manalo
Migrating to-Drupal-8 by Bryan Manalo
Promet Source
 
Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018
Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018
Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018
Promet Source
 
Drupal Development with Docker
Drupal Development with DockerDrupal Development with Docker
Drupal Development with Docker
Promet Source
 
Migrating Drupal 7 to Drupal 8
Migrating Drupal 7 to Drupal 8Migrating Drupal 7 to Drupal 8
Migrating Drupal 7 to Drupal 8
Promet Source
 
Web Accessibility in Drupal
Web Accessibility in DrupalWeb Accessibility in Drupal
Web Accessibility in Drupal
Promet Source
 
Drupal Continuous Integration and devops - Beyond Jenkins
Drupal Continuous Integration and devops - Beyond JenkinsDrupal Continuous Integration and devops - Beyond Jenkins
Drupal Continuous Integration and devops - Beyond Jenkins
Promet Source
 
Drupal 8 Involvement with Promet Source
Drupal 8 Involvement with Promet SourceDrupal 8 Involvement with Promet Source
Drupal 8 Involvement with Promet Source
Promet Source
 
Using Commerce License for Premium Content on Drupal Sites
Using Commerce License for Premium Content on Drupal SitesUsing Commerce License for Premium Content on Drupal Sites
Using Commerce License for Premium Content on Drupal Sites
Promet Source
 
Composer tools and frameworks for Drupal
Composer tools and frameworks for DrupalComposer tools and frameworks for Drupal
Composer tools and frameworks for Drupal
Promet Source
 
Responsive Design Testing the Promet Way
Responsive Design Testing the Promet WayResponsive Design Testing the Promet Way
Responsive Design Testing the Promet Way
Promet Source
 
Optimize and succeed your next Fixed Budget Project planning process
Optimize and succeed your next Fixed Budget Project planning process Optimize and succeed your next Fixed Budget Project planning process
Optimize and succeed your next Fixed Budget Project planning process
Promet Source
 
Diy continuous integration
Diy continuous integrationDiy continuous integration
Diy continuous integration
Promet Source
 
Higher Ed Web 2013 presentation - Field of Dreams, build it and they will come
Higher Ed Web 2013 presentation - Field of Dreams, build it and they will comeHigher Ed Web 2013 presentation - Field of Dreams, build it and they will come
Higher Ed Web 2013 presentation - Field of Dreams, build it and they will come
Promet Source
 
Getting agile with drupal
Getting agile with drupalGetting agile with drupal
Getting agile with drupal
Promet Source
 
Project Estimation Presentation - Donte's 8th level of estimating level of ef...
Project Estimation Presentation - Donte's 8th level of estimating level of ef...Project Estimation Presentation - Donte's 8th level of estimating level of ef...
Project Estimation Presentation - Donte's 8th level of estimating level of ef...
Promet Source
 
DrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & ProfitableDrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & Profitable
Promet Source
 
DevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With ChefDevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With Chef
Promet Source
 

More from Promet Source (20)

How To Start Building Your Own Website With Drupal by Mary Chris Casis
How To Start Building Your Own Website With Drupal by Mary Chris CasisHow To Start Building Your Own Website With Drupal by Mary Chris Casis
How To Start Building Your Own Website With Drupal by Mary Chris Casis
 
DrupalCamp Cebu 2018 R&F by Andrew Kucharski
DrupalCamp Cebu 2018 R&F by Andrew KucharskiDrupalCamp Cebu 2018 R&F by Andrew Kucharski
DrupalCamp Cebu 2018 R&F by Andrew Kucharski
 
Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018
Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018
Unit test in drupal 8 by Pratomo Ardianto Drupalcamp Cebu 2018
 
Migrating to-Drupal-8 by Bryan Manalo
Migrating to-Drupal-8 by Bryan ManaloMigrating to-Drupal-8 by Bryan Manalo
Migrating to-Drupal-8 by Bryan Manalo
 
Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018
Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018
Why and When to use Drupal by Luc Bezier - Drupalcamp Cebu 2018
 
Drupal Development with Docker
Drupal Development with DockerDrupal Development with Docker
Drupal Development with Docker
 
Migrating Drupal 7 to Drupal 8
Migrating Drupal 7 to Drupal 8Migrating Drupal 7 to Drupal 8
Migrating Drupal 7 to Drupal 8
 
Web Accessibility in Drupal
Web Accessibility in DrupalWeb Accessibility in Drupal
Web Accessibility in Drupal
 
Drupal Continuous Integration and devops - Beyond Jenkins
Drupal Continuous Integration and devops - Beyond JenkinsDrupal Continuous Integration and devops - Beyond Jenkins
Drupal Continuous Integration and devops - Beyond Jenkins
 
Drupal 8 Involvement with Promet Source
Drupal 8 Involvement with Promet SourceDrupal 8 Involvement with Promet Source
Drupal 8 Involvement with Promet Source
 
Using Commerce License for Premium Content on Drupal Sites
Using Commerce License for Premium Content on Drupal SitesUsing Commerce License for Premium Content on Drupal Sites
Using Commerce License for Premium Content on Drupal Sites
 
Composer tools and frameworks for Drupal
Composer tools and frameworks for DrupalComposer tools and frameworks for Drupal
Composer tools and frameworks for Drupal
 
Responsive Design Testing the Promet Way
Responsive Design Testing the Promet WayResponsive Design Testing the Promet Way
Responsive Design Testing the Promet Way
 
Optimize and succeed your next Fixed Budget Project planning process
Optimize and succeed your next Fixed Budget Project planning process Optimize and succeed your next Fixed Budget Project planning process
Optimize and succeed your next Fixed Budget Project planning process
 
Diy continuous integration
Diy continuous integrationDiy continuous integration
Diy continuous integration
 
Higher Ed Web 2013 presentation - Field of Dreams, build it and they will come
Higher Ed Web 2013 presentation - Field of Dreams, build it and they will comeHigher Ed Web 2013 presentation - Field of Dreams, build it and they will come
Higher Ed Web 2013 presentation - Field of Dreams, build it and they will come
 
Getting agile with drupal
Getting agile with drupalGetting agile with drupal
Getting agile with drupal
 
Project Estimation Presentation - Donte's 8th level of estimating level of ef...
Project Estimation Presentation - Donte's 8th level of estimating level of ef...Project Estimation Presentation - Donte's 8th level of estimating level of ef...
Project Estimation Presentation - Donte's 8th level of estimating level of ef...
 
DrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & ProfitableDrupalCon 2013 Making Support Fun & Profitable
DrupalCon 2013 Making Support Fun & Profitable
 
DevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With ChefDevOps for Drupal: Why We Cook With Chef
DevOps for Drupal: Why We Cook With Chef
 

Recently uploaded

Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 

Recently uploaded (20)

Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 

Behavioral driven development with Behat

  • 1. Training Day DrupalGovCon 2015 July 21 & 23, 2015 Behavior Driven Development with Behat
  • 2. 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
  • 3. Meet Your Trainers Allan Chappell Senior Solutions Architect 3 Lisa Ridley Solutions Architect
  • 4. Housekeeping Breaks • 10:30 - Break • 12:00 - Lunch (Boxed Lunches) • 2:30 - Break • 5:00 - Out-a-here 4
  • 5. 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
  • 6. 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
  • 7. 7 What is Behavior Driven Development? Software application development using a continuous example-based communication between business customers and software developers.
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Why is this Important? 11 When the customer thinks he explained… Helps keep you from delivering… When what the customer really needs is…
  • 12. 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
  • 13. 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.
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 21 As a Drupal Developer, how do you get there? You start with Behat!
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. But Wait! You Said… • Tests were written in “business speak” • And they are….using a structured, highly readable language called Gherkin 25
  • 26. 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
  • 27. 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
  • 28. 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!
  • 29. 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
  • 30. 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
  • 31. composer.json { "require": { "drupal/drupal-extension": “~3.0”, “knplabs/friendly-contexts”: “dev-master” }, "config": { "bin-dir": "bin/" } } $> composer install 31
  • 32. 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
  • 33. behat.yml (bare minimum) default: suites: default: paths: [%paths.base%/features/default] contexts: - FeatureContext - DrupalDrupalExtensionContextMinkContext - DrupalDrupalExtensionContextMessageContext - DrupalDrupalExtensionContextDrushContext extensions: BehatMinkExtensionExtension: goutte: ~ selenium2: ~ base_url: http://promet.corp.dev KnpFriendlyContextsExtension: smartTag: smartStep DrupalDrupalExtensionExtension: blackbox: ~ 33
  • 34. 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
  • 35. FeatureContext.php • Change Class Extension from: class FeatureContext extends BehatContext • to class FeatureContext extends Drupal DrupalExtensionContextDrupalContext (or whatever context you wish to extend) 35
  • 36. 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
  • 37. 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
  • 39. 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
  • 40. 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.
  • 41. 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
  • 42. Thank you for coming! 42