SlideShare a Scribd company logo
ACCEPTANCE &
      INTEGRATION TESTING WITH
               BEHAT
                      DPC 2012 - Ben Waine - @bwaine

                            https://joind.in/6218




Thursday, 7 June 12
The Environment
                          Oracle Open Box
                            Ubuntu 12.12
                      Behat + Examples Installed

        1. Get Open Box and the VHD from the provided USB
                               stick.

                         2. Install Open Box

                          3. Load the VHD

Thursday, 7 June 12
Demo: The Environment




Thursday, 7 June 12
BEN WAINE
    ā€¢ Freelance Software Engineer
    ā€¢Worked with Behat at Sky and
    IPC

    ā€¢DPC was the second
    conference I ever attended in
    2009. Glad to be back!

    ā€¢Twitter: @bwaine

Thursday, 7 June 12
Todays Roadmap
           1. Introduction to BDD and Behat
           2. How to Write Behat Tests
           3. Mink - UI Testing With Behat
           4. Mink - Javascript Testing
           5. Phabric - Fixture Building
           6. Behat - Common Contexts
           7. Case Study - Behat In The Wild
           8. Tips From The Trenches
           9. Questions



Thursday, 7 June 12
Todays Roadmap
           1. Introduction to BDD and Behat
           2. How to Write Behat Tests
           3. Mink - UI Testing With Behat
           4. Mink - Javascript Testing
           5. Phabric - Fixture Building
           6. Behat - Common Contexts
           7. Case Study - Behat In The Wild
           8. Tips From The Trenches
           9. Questions



Thursday, 7 June 12
My Questions




Thursday, 7 June 12
Behaviour Driven Development




Thursday, 7 June 12
Stories




Thursday, 7 June 12
Dan North - Whats In A Story?



                      http://dannorth.net/whats-in-a-story/
Thursday, 7 June 12
Dan Northā€™s Recipe For A Story
                Title (one line describing the story)

                Narrative:
                As a [role]
                I want [feature]
                So that [benefit]

                Acceptance Criteria: (presented as Scenarios)

                Scenario 1: Title
                Given [context]
                  And [some more context]...
                When [event]
                Then [outcome]
                  And [another outcome]...


Thursday, 7 June 12
Behat
        ā€˜A open source behaviour driven development [testing]
                            frameworkā€™
                      ā€˜Inspired by Rubyā€™s Cucumber projectā€™




Thursday, 7 June 12
Behat - What Can We Do With It?
                             Test Anything!



     Web Applications          Shell Scripts            Your
                                                    developers
                                                    relationship
                      Web Services    PHP Scripts       skills
Thursday, 7 June 12
Where Does Behat Sit In The BDD
         Ecosystem?

                        PHPSpec - Class Level BDD

                      Behat - Service / UI Level Testing




Thursday, 7 June 12
BDD == TDD??



                      http://dannorth.net/2012/05/31/bdd-is-like-tdd-if/
Thursday, 7 June 12
Behat - Installation So Easy Iā€™m Not
           Even Covering It.

                      Composer          Pear


                                 Phar          Github

Thursday, 7 June 12
My Friend Shashi -
            http://lestbddphp.wordpress.com/2012/05/07/enjoy-
                          minkextension-for-behat/

            Great article on setting up Behat 2.4 (latest version)




Thursday, 7 June 12
Testing Unixā€™s famous ā€˜lsā€™ command
                            An Example From behat.org

                            1. In the VM open Sublime Text 2

                      2. cd /home/tuser/tutorial/01-LinuxCommands




Thursday, 7 June 12
Testing Unixā€™s famous ā€˜lsā€™ command
                         What does a behat test consist of?

                       1. Run: bin/behat features/ls.feature

                                2. Open features/ls.feature

                      3. Open features/bootstrap/FeatureContext.php




Thursday, 7 June 12
Gherkin




Thursday, 7 June 12
Testing Unixā€™s famous ā€˜lsā€™ command
                               features/ls.feature
        Feature: ls
          In order to see the directory structure
          As a UNIX user
          I need to be able to list the current directory's contents

             Scenario: List 2 files in a directory
               Given I am in a directory "test"
               And I have a file named "foo"
               And I have a file named "bar"
               When I run "ls"
               Then I should get:
                 """
                 bar
                 foo
                 """


                                             Source: http://docs.behat.org/quick_intro.html
Thursday, 7 June 12
Dan Northā€™s Recipe For A Story
                Title (one line describing the story)

                Narrative:
                As a [role]
                I want [feature]
                So that [benefit]

                Acceptance Criteria: (presented as Scenarios)

                Scenario 1: Title
                Given [context]
                  And [some more context]...
                When [event]
                Then [outcome]
                  And [another outcome]...


Thursday, 7 June 12
Steps - Plain Old PHP




Thursday, 7 June 12
features/bootstrap/FeatureContext.php
 <?php

 use BehatBehatContextBehatContext,
     BehatBehatExceptionPendingException;
 use BehatGherkinNodePyStringNode,
     BehatGherkinNodeTableNode;

 class FeatureContext extends BehatContext
 {
     private $output;

           /** @Given /^I am in a directory "([^"]*)"$/ */
           public function iAmInADirectory($dir)
           {
               if (!file_exists($dir)) {
                   mkdir($dir);
               }
               chdir($dir);
           }


Source: http://docs.behat.org/quick_intro.html                1/2
Thursday, 7 June 12
features/bootstrap/FeatureContext.php
               /** @Given /^I have a file named "([^"]*)"$/ */
               public function iHaveAFileNamed($file)
               {
                   touch($file);
               }

               /** @When /^I run "([^"]*)"$/ */
               public function iRun($command)
               {
                   exec($command, $output);
                   $this->output = trim(implode("n", $output));
               }

               /** @Then /^I should get:$/ */
               public function iShouldGet(PyStringNode $string)
               {
                   if ((string) $string !== $this->output) {
                       throw new Exception(
                           "Actual output is:n" . $this->output
                       );
                   }
               }
                                                                   2/2
Thursday, 7 June 12
Testing Unixā€™s famous ā€˜lsā€™ command
                      What does a behat test consist of?

                         Feature Files & Feature Contexts

                                 Which contain:

                           Features / Stories and Steps




Thursday, 7 June 12
Behat Directory Structure




Thursday, 7 June 12
Exercise One: Hello World




Thursday, 7 June 12
Exercise One
       Write a php script which takes the users name as itā€™s only
                              argument.

               When executed it should write ā€˜Helloā€™ to the screen.

                                   eg. Hello Ben

                      If no name is given then it should output
                                   ā€˜Hello Strangerā€™


Thursday, 7 June 12
The BDD approach - write
          scenarios that deļ¬ne behaviour
                        ļ¬rst.



Thursday, 7 June 12
Setting Up A Project

                      1. cd /home/tuser/tutorial/02-HelloScript

                            2. run bin/behat --init




Thursday, 7 June 12
Behat Killer Feature - Write A Step
     Get The Regex For Free!



Thursday, 7 June 12
The BDD Workļ¬‚ow

                              1. Create features/hello.feature

                        2. Write a scenario to test the ā€˜helloā€™ script

                      3. Run bin/behat features/hello.feature

                        4. Copy the steps into features/bootstrap/
                                  FeatureContext.php


Thursday, 7 June 12
Clues
         1. The Command is in another directory. Change to that
                     directory in the given step?

                      2. When is an event or action

                         3. Then tests the event




Thursday, 7 June 12
The BDD Workļ¬‚ow

                              1. Create features/hello.feature

                        2. Write a scenario to test the ā€˜helloā€™ script

                      3. Run bin/behat features/hello.feature

                        4. Copy the steps into features/bootstrap/
                                  FeatureContext.php


Thursday, 7 June 12
The BDD Workļ¬‚ow
        5. Complete the methods in the FeatureContext.php ļ¬le.

                      6. Run bin/behat features/hello.feature

                                        7. FAIL

                               8. Write the Hello Script.

                                        9. PASS


Thursday, 7 June 12
Dan North Revisited:
                      Making a Good Story
   The title should describe an activity
   The narrative should include a role, a feature and a beneļ¬t
   The scenario title should say whatā€™s different
   The scenario should be described in terms of Givens, Events
   and Outcomes
   The givens should deļ¬ne all of, and no more than, the
   required context
   The event should describe the feature
   The story should be small enough to ļ¬t in an iteration
Thursday, 7 June 12
Time to share.




Thursday, 7 June 12
UI Testing With Behat & Mink




Thursday, 7 June 12
My Questions




Thursday, 7 June 12
Mink

            Goutte               Web Driver          Zombie Js


                      Selenium                Sahi

Thursday, 7 June 12
Mink - A UI Testing Tool Abstraction
      Headless Browser (Goutte)

      Makes HTTP calls and inspect the output
      Fast and lightweight
      Canā€™t test Javascipt / AJAX

      Browser Controller (Sahi / Selenium / WebDriver)

      Control a real browser
      Simulates user interaction with a web site
      Can test javascript / AJAX
      Slower than headless browser
Thursday, 7 June 12
Included With Mink
                                   A new context class to use

                          Bundled steps to test UI elements with. Eg:


                      Given I am on "/wiki/Main_Page"
                      When I fill in "search" with "Behavior Driven Development"
                      And I press "searchButton"
                      Then I should see "agile software development"




                                            Source: http://behat.org/cookbook/behat_and_mink.html

Thursday, 7 June 12
Using MinkContext
        If you have custom steps or an existing FeatureContext

                      <?php

                      class FeatureContext extends BehatContext
                      {
                          public function __construct(array $parameters)
                          {
                              $this->useContext(
                               'mink',
                               new BehatMinkExtensionContextMinkContext
                              );
                          }
                      }




Thursday, 7 June 12
Exercise Two:
                      Hello World On The Web



Thursday, 7 June 12
Exercise Two
                        Write a simple web page with a form.

                      The form should have a single ļ¬eld ā€˜nameā€™.

             When typing in a name and pressing submit, the page
             should reload and print the message ā€˜Hello _name_ā€™

                                    eg. Hello Ben

         On the page with the greeting a link with the text ā€˜againā€™
            should take you back to the original form page.
Thursday, 7 June 12
Setting Up A Project

                      1. cd /home/tuser/tutorial/03-HelloPage

                             2. run bin/behat --init

                      3. Web page goes in the ā€˜publicā€™ directory

                         4. Add behat.yml to 03-HelloPage
                             See example misc/behat.yml


Thursday, 7 June 12
Using MinkContext
        If you have custom steps or an existing FeatureContext

                      <?php

                      class FeatureContext extends BehatContext
                      {
                          public function __construct(array $parameters)
                          {
                              $this->useContext(
                               'mink',
                               new BehatMinkExtensionContextMinkContext
                              );
                          }
                      }




Thursday, 7 June 12
Using MinkContext

   New in 2.4 - If Mink extension is installed and you have no
                   custom steps. Itā€™s automatic!

                          Great for testers.




Thursday, 7 June 12
The BDD Workļ¬‚ow
                              1. Create features/hello.feature

                         2. Write a scenario to test the ā€˜helloā€™ page
                                  Use bundled Mink Steps

                                    3. Use MinkContext

                      4. Run bin/behat features/hello.feature
                                Wow no new steps required!


Thursday, 7 June 12
The BDD Workļ¬‚ow
                              5. FAIL

                         6. Write web page

                              7. PASS




Thursday, 7 June 12
Debugging Steps
                              Then /^print last response$/

                              Then /^show last response$/

                      ā€˜And I Waitā€™ - implement yourself with fgets



                      Lets try this on the test we have just written.


Thursday, 7 June 12
Testing Javascript Interactions




Thursday, 7 June 12
Tagging Tests For Javascript Testing
       Use tags to tell Mink to use a full browser rather than
                               Goutte.

                 @javascript
                 Scenario: As an attendee
                 I should be able to tag scenarios after reading this
                 Given I am testing javascript
                 When I read this slide
                 Then I'll tag scenarios with @javascript LIKE A BOSS




Thursday, 7 June 12
Steps To Use For Testing JS
              Custom steps which manipulate the mink session.

              /**
                * @Then /^I wait for the suggestion box to appear$/
                */
              public function iWaitForTheSuggestionBoxToAppear()
              {
                   $this->getSubcontext('mink')
                    ->getSession()
                    ->wait(1000, "$('.name').children().length > 0");
              }




Thursday, 7 June 12
Steps To Use For Testing JS


       See: http://mink.behat.org for tips on what we can do.




Thursday, 7 June 12
Exercise Three:
                      Hello World On The Web
                           With Javascript



Thursday, 7 June 12
ExerciseThree

                      Extend your solution from the previous exercise.

     Use the supplied jQuery plugin to make your form suggest
        names as the user enters letters into the name ļ¬eld.
                     See hint.php for some clues.




Thursday, 7 June 12
The BDD Workļ¬‚ow
                           1. Open features/hello.feature

           2. Write additional scenarios to test the ā€˜autocompleteā€™
                                 functionality

                      3. Run behat features/hello.feature

                 4. Add steps to FeatureContext.php and complete

                      5. Run behat features/hello.feature

Thursday, 7 June 12
The BDD Workļ¬‚ow
                                   6. FAIL

                       7. Write additional functionality

                                   8. PASS




Thursday, 7 June 12
Dynamic Fixture Building: Phabric



                      Shameless self promotion. I Built it.
Thursday, 7 June 12
So Far...




Thursday, 7 June 12
Options For Loading Data


           SQL Fixtures                   Behatā€™s Fixture
                                             Loading
                      Steps With SQL in                     Phabric

Thursday, 7 June 12
I Donā€™t like Fixture Files.




Thursday, 7 June 12
Behatā€™s Fixture Building Tool
    http://propel.posterous.com/propel2-meets-behat-for-the-win




Thursday, 7 June 12
Phabric




Thursday, 7 June 12
Phabric Features
                      Represent Table Data In A Gherkin Table Node


       Scenario: Basic Data Insert
       Given The following conference exists
           | name        | description                       | cdate               |
           | Symfony Day | Anual Symfony conference in Paris | 2011-10-21 09:00:00 |
           | Zend Con    | Zend Conference in San Fran       | 2011-10-17 09:00:00 |
       When I am on "/index.php"
       And I wait for 10 seconds
       Then I should see "Zend Con" in the ".conf" element




Thursday, 7 June 12
Phabric Features
               Map Business Friendly Names To Column Headers


    Scenario: Change Column Names
    Given The following conference exists
        | Conf Name   | Conf Description                  | Conf Date           |
        | Symfony Day | Annual Symfony conference in Paris| 2011-10-21 09:00:00 |
        | Zend Con    | Zend Conference in San Fran       | 2011-10-17 09:00:00 |
    When I am on "/index.php"
    And I wait for 10 seconds
    Then I should see "Zend Con" in the ".conf" element




Thursday, 7 June 12
Phabric Features
                      Default Values Allow You To Omit Columns


     Scenario: Use a default value - use default value for conference description.
     Given The following conference exists
         | Conf Name   | Conf Date         |
         | Symfony Day | 21/10/2011 09:00 |
         | Zend Con    | 17/10/2011 09:00 |
     When I am on "/index.php"
     And I wait for 10 seconds
     Then I should see "Zend Con" in the ".conf" element




Thursday, 7 June 12
Phabric Features
Transformations Allow Data To Be Reformatted Before Insert
                or Update to the Database.

         Scenario: Change Column Data - Reformat date
         Given The following conference exists
             | Conf Name   | Conf Description                  | Conf Date        |
             | Symfony Day | Anual Symfony conference in Paris | 21/10/2011 09:00 |
             | Zend Con    | Zend Conference in San Fran       | 17/10/2011 09:00 |
         When I am on "/index.php"
         And I wait for 10 seconds
         Then I should see "Zend Con" in the ".conf" element




Thursday, 7 June 12
Phabric Features
                       Relationships Supported

        Powered By Doctrine DBAL - Works On Most Popular
                            Databases

    Interfaces Provided To Integrate Your Own Data Providers

                          Easy Conļ¬guration

      State is set up in the test - clear visibility of what is being
                                 tested

Thursday, 7 June 12
Phabric Demo




Thursday, 7 June 12
A side note: Hooks




Thursday, 7 June 12
Exercise Four: Play With Phabric




Thursday, 7 June 12
Exercise Four

       Use the supplied example to populate the web page with
                        this mornings tutorials.




Thursday, 7 June 12
Common Contexts




Thursday, 7 June 12
What: Out the box solutions to common problems.
           Where: https://github.com/Behat/CommonContexts




Thursday, 7 June 12
My Favourite & Example


                      WebApi Context - Used to test web services.




Thursday, 7 June 12
Using A Common Context
                          Ensure the common contexts are installed.
               /**
                 * Feature context.
                 */
               class FeatureContext extends MinkContext
               {
                    public function __construct($kernel)
                    {
                        $this->useContext('symfony_extra',
                            new BehatCommonContextsSymfonyMailerContext($kernel)
                        );

                           parent::__construct($kernel);
                      }
               }




                                                Source: https://github.com/Behat/CommonContexts

Thursday, 7 June 12
Exercise Five
                      Use the new WebApi steps to spec a simple API.

          Use the provided ļ¬les to create a ā€˜fakeā€™ that satisļ¬es the
                                scenarios.

                       See the misc folder for a WebApi cheat sheet.




Thursday, 7 June 12
Case Study: Behat At Skybet




Thursday, 7 June 12
Sky Bet

              Skybet.com - A large sports betting site in the UK

                      Technology: PHP, MySQL, nodejs

                           Testing: PHPUnit, Behat




Thursday, 7 June 12
Problems

                      1) Deļ¬nition of Done

                           2) Regression

                      3) Testing The Full Stack




Thursday, 7 June 12
Solution


                 Build a workļ¬‚ow that lets people work together,
                  helps ļ¬ght regression and provides visibility of
                            progress to the business.




                                   Behat
Thursday, 7 June 12
The Players: Business Analyst




Thursday, 7 June 12
The Players:The Tester




Thursday, 7 June 12
Ninja,
                           Cat Like,
                      Good Looking,
                        Charismatic,
                      Hard Working,
                             Modest
                         Developers.
Thursday, 7 June 12
Solution

    Business Analysts take business requirements write stories.

                             Testers ā€˜translateā€™ into Gherkin.

                      Developers write steps and build the feature.




Thursday, 7 June 12
Solution
 A story is ā€˜doneā€™ when the Behat tests pass and a ļ¬nal check
                    by the BA is complete.

                Tests are run on every commit to master branch.

      Behat tests test the full stack - provide conļ¬dence ā€˜all the
                      moving parts are workingā€™.




Thursday, 7 June 12
Tips From The Trenches


                      Make sure you have your testing mix correct.




Thursday, 7 June 12
Thursday, 7 June 12
Trouble :(




Thursday, 7 June 12
Tips From The Trenches


                      Keep you Gherkin dialect lean and mean.
                      Make someone in charge of the Gherkin.




Thursday, 7 June 12
Tips From The Trenches


       Consider writing abstractions over the provided Behat /
         Mink Steps to make your feature ļ¬les less brittle.




Thursday, 7 June 12
Time Left / Take Home Exercise




Thursday, 7 June 12
Point Behat At Your Own Website
       And Write Some Scenarios.
                       1) cd /home/tuser/tutorial/06-takehome

                      2) Alter behat.yml to point at your live site

                         3) Write scenarios that test your site




Thursday, 7 June 12
TLDR - Behat Is Super Cool. Go
             Forth And Use It.

                      Questions?


Thursday, 7 June 12
Thanks :-)
              Please Rate My Tutorial: https://joind.in/6218

              Websites & Sources

              http://behat.org
              http://mink.behat.org
              http://dannorth.net/whats-in-a-story/
              http://github.com/benwaine/BehatTutorial
              http://ben-waine.co.uk/blog


Thursday, 7 June 12

More Related Content

Similar to Behat dpc12

Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP TestingRan Mizrahi
Ā 
Jordan Hubbard Talk @ LISA
Jordan Hubbard Talk @ LISAJordan Hubbard Talk @ LISA
Jordan Hubbard Talk @ LISAguest4c923d
Ā 
A Tour Through the Groovy Ecosystem
A Tour Through the Groovy EcosystemA Tour Through the Groovy Ecosystem
A Tour Through the Groovy Ecosystem
Leonard Axelsson
Ā 
Introduction To MongoDB
Introduction To MongoDBIntroduction To MongoDB
Introduction To MongoDB
Ynon Perek
Ā 
Graduating to Jenkins CI for Ruby(-on-Rails) Teams
Graduating to Jenkins CI for Ruby(-on-Rails) TeamsGraduating to Jenkins CI for Ruby(-on-Rails) Teams
Graduating to Jenkins CI for Ruby(-on-Rails) Teams
Daniel Doubrovkine
Ā 
Scaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global OrganizationScaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global Organization
Puppet
Ā 
Puppet Camp Berlin 2014: Advanced Puppet Design
Puppet Camp Berlin 2014: Advanced Puppet DesignPuppet Camp Berlin 2014: Advanced Puppet Design
Puppet Camp Berlin 2014: Advanced Puppet Design
Puppet
Ā 
Pundit
PunditPundit
Pundit
Net7
Ā 
Puppet at GitHub / ChatOps
Puppet at GitHub / ChatOpsPuppet at GitHub / ChatOps
Puppet at GitHub / ChatOps
Puppet
Ā 
Frozen Rails Slides
Frozen Rails SlidesFrozen Rails Slides
Frozen Rails Slidescarllerche
Ā 
Introduction to Express and Grunt
Introduction to Express and GruntIntroduction to Express and Grunt
Introduction to Express and Grunt
Peter deHaan
Ā 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle IntroductionDmitry Buzdin
Ā 
Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Tino Isnich
Ā 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for Ruby
Hiroshi SHIBATA
Ā 
OSDC 2011 | Advanced Puppet Topics by Ken Barber
OSDC 2011 | Advanced Puppet Topics by Ken BarberOSDC 2011 | Advanced Puppet Topics by Ken Barber
OSDC 2011 | Advanced Puppet Topics by Ken Barber
NETWAYS
Ā 
Ruby hollywood
Ruby hollywoodRuby hollywood
Ruby hollywoodehuard
Ā 
Custom Android Code Templates
Custom Android Code TemplatesCustom Android Code Templates
Custom Android Code Templatesmurphonic
Ā 
V mware
V mwareV mware
V mwaredvmug1
Ā 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMware
subtitle
Ā 

Similar to Behat dpc12 (20)

Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
Ā 
Jordan Hubbard Talk @ LISA
Jordan Hubbard Talk @ LISAJordan Hubbard Talk @ LISA
Jordan Hubbard Talk @ LISA
Ā 
A Tour Through the Groovy Ecosystem
A Tour Through the Groovy EcosystemA Tour Through the Groovy Ecosystem
A Tour Through the Groovy Ecosystem
Ā 
Introduction To MongoDB
Introduction To MongoDBIntroduction To MongoDB
Introduction To MongoDB
Ā 
Graduating to Jenkins CI for Ruby(-on-Rails) Teams
Graduating to Jenkins CI for Ruby(-on-Rails) TeamsGraduating to Jenkins CI for Ruby(-on-Rails) Teams
Graduating to Jenkins CI for Ruby(-on-Rails) Teams
Ā 
File handaling
File handalingFile handaling
File handaling
Ā 
Scaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global OrganizationScaling Puppet Usage to a Global Organization
Scaling Puppet Usage to a Global Organization
Ā 
Puppet Camp Berlin 2014: Advanced Puppet Design
Puppet Camp Berlin 2014: Advanced Puppet DesignPuppet Camp Berlin 2014: Advanced Puppet Design
Puppet Camp Berlin 2014: Advanced Puppet Design
Ā 
Pundit
PunditPundit
Pundit
Ā 
Puppet at GitHub / ChatOps
Puppet at GitHub / ChatOpsPuppet at GitHub / ChatOps
Puppet at GitHub / ChatOps
Ā 
Frozen Rails Slides
Frozen Rails SlidesFrozen Rails Slides
Frozen Rails Slides
Ā 
Introduction to Express and Grunt
Introduction to Express and GruntIntroduction to Express and Grunt
Introduction to Express and Grunt
Ā 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
Ā 
Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01
Ā 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for Ruby
Ā 
OSDC 2011 | Advanced Puppet Topics by Ken Barber
OSDC 2011 | Advanced Puppet Topics by Ken BarberOSDC 2011 | Advanced Puppet Topics by Ken Barber
OSDC 2011 | Advanced Puppet Topics by Ken Barber
Ā 
Ruby hollywood
Ruby hollywoodRuby hollywood
Ruby hollywood
Ā 
Custom Android Code Templates
Custom Android Code TemplatesCustom Android Code Templates
Custom Android Code Templates
Ā 
V mware
V mwareV mware
V mware
Ā 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Ā 

More from benwaine

DPC 2016 - 53 Minutes or Less - Architecting For Failure
DPC 2016 - 53 Minutes or Less - Architecting For FailureDPC 2016 - 53 Minutes or Less - Architecting For Failure
DPC 2016 - 53 Minutes or Less - Architecting For Failure
benwaine
Ā 
The Road To Technical Team Lead
The Road To Technical Team LeadThe Road To Technical Team Lead
The Road To Technical Team Lead
benwaine
Ā 
PHPNW14 - Getting Started With AWS
PHPNW14 - Getting Started With AWSPHPNW14 - Getting Started With AWS
PHPNW14 - Getting Started With AWSbenwaine
Ā 
Application Logging With The ELK Stack
Application Logging With The ELK StackApplication Logging With The ELK Stack
Application Logging With The ELK Stack
benwaine
Ā 
Application Logging With Logstash
Application Logging With LogstashApplication Logging With Logstash
Application Logging With Logstash
benwaine
Ā 
Business selectors
Business selectorsBusiness selectors
Business selectors
benwaine
Ā 
The Art Of Application Logging PHPNW12
The Art Of Application Logging PHPNW12The Art Of Application Logging PHPNW12
The Art Of Application Logging PHPNW12
benwaine
Ā 
Acceptance & Integration Testing With Behat (PBC11)
Acceptance & Integration Testing With Behat (PBC11)Acceptance & Integration Testing With Behat (PBC11)
Acceptance & Integration Testing With Behat (PBC11)
benwaine
Ā 
Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)
benwaine
Ā 
Say no to var_dump
Say no to var_dumpSay no to var_dump
Say no to var_dump
benwaine
Ā 

More from benwaine (10)

DPC 2016 - 53 Minutes or Less - Architecting For Failure
DPC 2016 - 53 Minutes or Less - Architecting For FailureDPC 2016 - 53 Minutes or Less - Architecting For Failure
DPC 2016 - 53 Minutes or Less - Architecting For Failure
Ā 
The Road To Technical Team Lead
The Road To Technical Team LeadThe Road To Technical Team Lead
The Road To Technical Team Lead
Ā 
PHPNW14 - Getting Started With AWS
PHPNW14 - Getting Started With AWSPHPNW14 - Getting Started With AWS
PHPNW14 - Getting Started With AWS
Ā 
Application Logging With The ELK Stack
Application Logging With The ELK StackApplication Logging With The ELK Stack
Application Logging With The ELK Stack
Ā 
Application Logging With Logstash
Application Logging With LogstashApplication Logging With Logstash
Application Logging With Logstash
Ā 
Business selectors
Business selectorsBusiness selectors
Business selectors
Ā 
The Art Of Application Logging PHPNW12
The Art Of Application Logging PHPNW12The Art Of Application Logging PHPNW12
The Art Of Application Logging PHPNW12
Ā 
Acceptance & Integration Testing With Behat (PBC11)
Acceptance & Integration Testing With Behat (PBC11)Acceptance & Integration Testing With Behat (PBC11)
Acceptance & Integration Testing With Behat (PBC11)
Ā 
Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)
Ā 
Say no to var_dump
Say no to var_dumpSay no to var_dump
Say no to var_dump
Ā 

Recently uploaded

Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
Ā 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
Ā 
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
Ā 
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
Ā 
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
Ā 
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
UiPathCommunity
Ā 
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
Ā 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
Ā 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
Ā 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
Ā 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
Ā 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
Ā 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
Ā 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
Ā 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
Ā 
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
Ā 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
Ā 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
Ā 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢
UiPathCommunity
Ā 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
Ā 

Recently uploaded (20)

Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Ā 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Ā 
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...
Ā 
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
Ā 
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
Ā 
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder ā€“ active learning and UiPath LLMs for do...
Ā 
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 -...
Ā 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Ā 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Ā 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
Ā 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Ā 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Ā 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
Ā 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
Ā 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 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)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ā 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
Ā 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Ā 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotā„¢
Ā 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
Ā 

Behat dpc12

  • 1. ACCEPTANCE & INTEGRATION TESTING WITH BEHAT DPC 2012 - Ben Waine - @bwaine https://joind.in/6218 Thursday, 7 June 12
  • 2. The Environment Oracle Open Box Ubuntu 12.12 Behat + Examples Installed 1. Get Open Box and the VHD from the provided USB stick. 2. Install Open Box 3. Load the VHD Thursday, 7 June 12
  • 4. BEN WAINE ā€¢ Freelance Software Engineer ā€¢Worked with Behat at Sky and IPC ā€¢DPC was the second conference I ever attended in 2009. Glad to be back! ā€¢Twitter: @bwaine Thursday, 7 June 12
  • 5. Todays Roadmap 1. Introduction to BDD and Behat 2. How to Write Behat Tests 3. Mink - UI Testing With Behat 4. Mink - Javascript Testing 5. Phabric - Fixture Building 6. Behat - Common Contexts 7. Case Study - Behat In The Wild 8. Tips From The Trenches 9. Questions Thursday, 7 June 12
  • 6. Todays Roadmap 1. Introduction to BDD and Behat 2. How to Write Behat Tests 3. Mink - UI Testing With Behat 4. Mink - Javascript Testing 5. Phabric - Fixture Building 6. Behat - Common Contexts 7. Case Study - Behat In The Wild 8. Tips From The Trenches 9. Questions Thursday, 7 June 12
  • 10. Dan North - Whats In A Story? http://dannorth.net/whats-in-a-story/ Thursday, 7 June 12
  • 11. Dan Northā€™s Recipe For A Story Title (one line describing the story) Narrative: As a [role] I want [feature] So that [benefit] Acceptance Criteria: (presented as Scenarios) Scenario 1: Title Given [context] And [some more context]... When [event] Then [outcome] And [another outcome]... Thursday, 7 June 12
  • 12. Behat ā€˜A open source behaviour driven development [testing] frameworkā€™ ā€˜Inspired by Rubyā€™s Cucumber projectā€™ Thursday, 7 June 12
  • 13. Behat - What Can We Do With It? Test Anything! Web Applications Shell Scripts Your developers relationship Web Services PHP Scripts skills Thursday, 7 June 12
  • 14. Where Does Behat Sit In The BDD Ecosystem? PHPSpec - Class Level BDD Behat - Service / UI Level Testing Thursday, 7 June 12
  • 15. BDD == TDD?? http://dannorth.net/2012/05/31/bdd-is-like-tdd-if/ Thursday, 7 June 12
  • 16. Behat - Installation So Easy Iā€™m Not Even Covering It. Composer Pear Phar Github Thursday, 7 June 12
  • 17. My Friend Shashi - http://lestbddphp.wordpress.com/2012/05/07/enjoy- minkextension-for-behat/ Great article on setting up Behat 2.4 (latest version) Thursday, 7 June 12
  • 18. Testing Unixā€™s famous ā€˜lsā€™ command An Example From behat.org 1. In the VM open Sublime Text 2 2. cd /home/tuser/tutorial/01-LinuxCommands Thursday, 7 June 12
  • 19. Testing Unixā€™s famous ā€˜lsā€™ command What does a behat test consist of? 1. Run: bin/behat features/ls.feature 2. Open features/ls.feature 3. Open features/bootstrap/FeatureContext.php Thursday, 7 June 12
  • 21. Testing Unixā€™s famous ā€˜lsā€™ command features/ls.feature Feature: ls In order to see the directory structure As a UNIX user I need to be able to list the current directory's contents Scenario: List 2 files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """ Source: http://docs.behat.org/quick_intro.html Thursday, 7 June 12
  • 22. Dan Northā€™s Recipe For A Story Title (one line describing the story) Narrative: As a [role] I want [feature] So that [benefit] Acceptance Criteria: (presented as Scenarios) Scenario 1: Title Given [context] And [some more context]... When [event] Then [outcome] And [another outcome]... Thursday, 7 June 12
  • 23. Steps - Plain Old PHP Thursday, 7 June 12
  • 24. features/bootstrap/FeatureContext.php <?php use BehatBehatContextBehatContext, BehatBehatExceptionPendingException; use BehatGherkinNodePyStringNode, BehatGherkinNodeTableNode; class FeatureContext extends BehatContext { private $output; /** @Given /^I am in a directory "([^"]*)"$/ */ public function iAmInADirectory($dir) { if (!file_exists($dir)) { mkdir($dir); } chdir($dir); } Source: http://docs.behat.org/quick_intro.html 1/2 Thursday, 7 June 12
  • 25. features/bootstrap/FeatureContext.php /** @Given /^I have a file named "([^"]*)"$/ */ public function iHaveAFileNamed($file) { touch($file); } /** @When /^I run "([^"]*)"$/ */ public function iRun($command) { exec($command, $output); $this->output = trim(implode("n", $output)); } /** @Then /^I should get:$/ */ public function iShouldGet(PyStringNode $string) { if ((string) $string !== $this->output) { throw new Exception( "Actual output is:n" . $this->output ); } } 2/2 Thursday, 7 June 12
  • 26. Testing Unixā€™s famous ā€˜lsā€™ command What does a behat test consist of? Feature Files & Feature Contexts Which contain: Features / Stories and Steps Thursday, 7 June 12
  • 28. Exercise One: Hello World Thursday, 7 June 12
  • 29. Exercise One Write a php script which takes the users name as itā€™s only argument. When executed it should write ā€˜Helloā€™ to the screen. eg. Hello Ben If no name is given then it should output ā€˜Hello Strangerā€™ Thursday, 7 June 12
  • 30. The BDD approach - write scenarios that deļ¬ne behaviour ļ¬rst. Thursday, 7 June 12
  • 31. Setting Up A Project 1. cd /home/tuser/tutorial/02-HelloScript 2. run bin/behat --init Thursday, 7 June 12
  • 32. Behat Killer Feature - Write A Step Get The Regex For Free! Thursday, 7 June 12
  • 33. The BDD Workļ¬‚ow 1. Create features/hello.feature 2. Write a scenario to test the ā€˜helloā€™ script 3. Run bin/behat features/hello.feature 4. Copy the steps into features/bootstrap/ FeatureContext.php Thursday, 7 June 12
  • 34. Clues 1. The Command is in another directory. Change to that directory in the given step? 2. When is an event or action 3. Then tests the event Thursday, 7 June 12
  • 35. The BDD Workļ¬‚ow 1. Create features/hello.feature 2. Write a scenario to test the ā€˜helloā€™ script 3. Run bin/behat features/hello.feature 4. Copy the steps into features/bootstrap/ FeatureContext.php Thursday, 7 June 12
  • 36. The BDD Workļ¬‚ow 5. Complete the methods in the FeatureContext.php ļ¬le. 6. Run bin/behat features/hello.feature 7. FAIL 8. Write the Hello Script. 9. PASS Thursday, 7 June 12
  • 37. Dan North Revisited: Making a Good Story The title should describe an activity The narrative should include a role, a feature and a beneļ¬t The scenario title should say whatā€™s different The scenario should be described in terms of Givens, Events and Outcomes The givens should deļ¬ne all of, and no more than, the required context The event should describe the feature The story should be small enough to ļ¬t in an iteration Thursday, 7 June 12
  • 39. UI Testing With Behat & Mink Thursday, 7 June 12
  • 41. Mink Goutte Web Driver Zombie Js Selenium Sahi Thursday, 7 June 12
  • 42. Mink - A UI Testing Tool Abstraction Headless Browser (Goutte) Makes HTTP calls and inspect the output Fast and lightweight Canā€™t test Javascipt / AJAX Browser Controller (Sahi / Selenium / WebDriver) Control a real browser Simulates user interaction with a web site Can test javascript / AJAX Slower than headless browser Thursday, 7 June 12
  • 43. Included With Mink A new context class to use Bundled steps to test UI elements with. Eg: Given I am on "/wiki/Main_Page" When I fill in "search" with "Behavior Driven Development" And I press "searchButton" Then I should see "agile software development" Source: http://behat.org/cookbook/behat_and_mink.html Thursday, 7 June 12
  • 44. Using MinkContext If you have custom steps or an existing FeatureContext <?php class FeatureContext extends BehatContext { public function __construct(array $parameters) { $this->useContext( 'mink', new BehatMinkExtensionContextMinkContext ); } } Thursday, 7 June 12
  • 45. Exercise Two: Hello World On The Web Thursday, 7 June 12
  • 46. Exercise Two Write a simple web page with a form. The form should have a single ļ¬eld ā€˜nameā€™. When typing in a name and pressing submit, the page should reload and print the message ā€˜Hello _name_ā€™ eg. Hello Ben On the page with the greeting a link with the text ā€˜againā€™ should take you back to the original form page. Thursday, 7 June 12
  • 47. Setting Up A Project 1. cd /home/tuser/tutorial/03-HelloPage 2. run bin/behat --init 3. Web page goes in the ā€˜publicā€™ directory 4. Add behat.yml to 03-HelloPage See example misc/behat.yml Thursday, 7 June 12
  • 48. Using MinkContext If you have custom steps or an existing FeatureContext <?php class FeatureContext extends BehatContext { public function __construct(array $parameters) { $this->useContext( 'mink', new BehatMinkExtensionContextMinkContext ); } } Thursday, 7 June 12
  • 49. Using MinkContext New in 2.4 - If Mink extension is installed and you have no custom steps. Itā€™s automatic! Great for testers. Thursday, 7 June 12
  • 50. The BDD Workļ¬‚ow 1. Create features/hello.feature 2. Write a scenario to test the ā€˜helloā€™ page Use bundled Mink Steps 3. Use MinkContext 4. Run bin/behat features/hello.feature Wow no new steps required! Thursday, 7 June 12
  • 51. The BDD Workļ¬‚ow 5. FAIL 6. Write web page 7. PASS Thursday, 7 June 12
  • 52. Debugging Steps Then /^print last response$/ Then /^show last response$/ ā€˜And I Waitā€™ - implement yourself with fgets Lets try this on the test we have just written. Thursday, 7 June 12
  • 54. Tagging Tests For Javascript Testing Use tags to tell Mink to use a full browser rather than Goutte. @javascript Scenario: As an attendee I should be able to tag scenarios after reading this Given I am testing javascript When I read this slide Then I'll tag scenarios with @javascript LIKE A BOSS Thursday, 7 June 12
  • 55. Steps To Use For Testing JS Custom steps which manipulate the mink session. /** * @Then /^I wait for the suggestion box to appear$/ */ public function iWaitForTheSuggestionBoxToAppear() { $this->getSubcontext('mink') ->getSession() ->wait(1000, "$('.name').children().length > 0"); } Thursday, 7 June 12
  • 56. Steps To Use For Testing JS See: http://mink.behat.org for tips on what we can do. Thursday, 7 June 12
  • 57. Exercise Three: Hello World On The Web With Javascript Thursday, 7 June 12
  • 58. ExerciseThree Extend your solution from the previous exercise. Use the supplied jQuery plugin to make your form suggest names as the user enters letters into the name ļ¬eld. See hint.php for some clues. Thursday, 7 June 12
  • 59. The BDD Workļ¬‚ow 1. Open features/hello.feature 2. Write additional scenarios to test the ā€˜autocompleteā€™ functionality 3. Run behat features/hello.feature 4. Add steps to FeatureContext.php and complete 5. Run behat features/hello.feature Thursday, 7 June 12
  • 60. The BDD Workļ¬‚ow 6. FAIL 7. Write additional functionality 8. PASS Thursday, 7 June 12
  • 61. Dynamic Fixture Building: Phabric Shameless self promotion. I Built it. Thursday, 7 June 12
  • 63. Options For Loading Data SQL Fixtures Behatā€™s Fixture Loading Steps With SQL in Phabric Thursday, 7 June 12
  • 64. I Donā€™t like Fixture Files. Thursday, 7 June 12
  • 65. Behatā€™s Fixture Building Tool http://propel.posterous.com/propel2-meets-behat-for-the-win Thursday, 7 June 12
  • 67. Phabric Features Represent Table Data In A Gherkin Table Node Scenario: Basic Data Insert Given The following conference exists | name | description | cdate | | Symfony Day | Anual Symfony conference in Paris | 2011-10-21 09:00:00 | | Zend Con | Zend Conference in San Fran | 2011-10-17 09:00:00 | When I am on "/index.php" And I wait for 10 seconds Then I should see "Zend Con" in the ".conf" element Thursday, 7 June 12
  • 68. Phabric Features Map Business Friendly Names To Column Headers Scenario: Change Column Names Given The following conference exists | Conf Name | Conf Description | Conf Date | | Symfony Day | Annual Symfony conference in Paris| 2011-10-21 09:00:00 | | Zend Con | Zend Conference in San Fran | 2011-10-17 09:00:00 | When I am on "/index.php" And I wait for 10 seconds Then I should see "Zend Con" in the ".conf" element Thursday, 7 June 12
  • 69. Phabric Features Default Values Allow You To Omit Columns Scenario: Use a default value - use default value for conference description. Given The following conference exists | Conf Name | Conf Date | | Symfony Day | 21/10/2011 09:00 | | Zend Con | 17/10/2011 09:00 | When I am on "/index.php" And I wait for 10 seconds Then I should see "Zend Con" in the ".conf" element Thursday, 7 June 12
  • 70. Phabric Features Transformations Allow Data To Be Reformatted Before Insert or Update to the Database. Scenario: Change Column Data - Reformat date Given The following conference exists | Conf Name | Conf Description | Conf Date | | Symfony Day | Anual Symfony conference in Paris | 21/10/2011 09:00 | | Zend Con | Zend Conference in San Fran | 17/10/2011 09:00 | When I am on "/index.php" And I wait for 10 seconds Then I should see "Zend Con" in the ".conf" element Thursday, 7 June 12
  • 71. Phabric Features Relationships Supported Powered By Doctrine DBAL - Works On Most Popular Databases Interfaces Provided To Integrate Your Own Data Providers Easy Conļ¬guration State is set up in the test - clear visibility of what is being tested Thursday, 7 June 12
  • 73. A side note: Hooks Thursday, 7 June 12
  • 74. Exercise Four: Play With Phabric Thursday, 7 June 12
  • 75. Exercise Four Use the supplied example to populate the web page with this mornings tutorials. Thursday, 7 June 12
  • 77. What: Out the box solutions to common problems. Where: https://github.com/Behat/CommonContexts Thursday, 7 June 12
  • 78. My Favourite & Example WebApi Context - Used to test web services. Thursday, 7 June 12
  • 79. Using A Common Context Ensure the common contexts are installed. /** * Feature context. */ class FeatureContext extends MinkContext { public function __construct($kernel) { $this->useContext('symfony_extra', new BehatCommonContextsSymfonyMailerContext($kernel) ); parent::__construct($kernel); } } Source: https://github.com/Behat/CommonContexts Thursday, 7 June 12
  • 80. Exercise Five Use the new WebApi steps to spec a simple API. Use the provided ļ¬les to create a ā€˜fakeā€™ that satisļ¬es the scenarios. See the misc folder for a WebApi cheat sheet. Thursday, 7 June 12
  • 81. Case Study: Behat At Skybet Thursday, 7 June 12
  • 82. Sky Bet Skybet.com - A large sports betting site in the UK Technology: PHP, MySQL, nodejs Testing: PHPUnit, Behat Thursday, 7 June 12
  • 83. Problems 1) Deļ¬nition of Done 2) Regression 3) Testing The Full Stack Thursday, 7 June 12
  • 84. Solution Build a workļ¬‚ow that lets people work together, helps ļ¬ght regression and provides visibility of progress to the business. Behat Thursday, 7 June 12
  • 85. The Players: Business Analyst Thursday, 7 June 12
  • 87. Ninja, Cat Like, Good Looking, Charismatic, Hard Working, Modest Developers. Thursday, 7 June 12
  • 88. Solution Business Analysts take business requirements write stories. Testers ā€˜translateā€™ into Gherkin. Developers write steps and build the feature. Thursday, 7 June 12
  • 89. Solution A story is ā€˜doneā€™ when the Behat tests pass and a ļ¬nal check by the BA is complete. Tests are run on every commit to master branch. Behat tests test the full stack - provide conļ¬dence ā€˜all the moving parts are workingā€™. Thursday, 7 June 12
  • 90. Tips From The Trenches Make sure you have your testing mix correct. Thursday, 7 June 12
  • 93. Tips From The Trenches Keep you Gherkin dialect lean and mean. Make someone in charge of the Gherkin. Thursday, 7 June 12
  • 94. Tips From The Trenches Consider writing abstractions over the provided Behat / Mink Steps to make your feature ļ¬les less brittle. Thursday, 7 June 12
  • 95. Time Left / Take Home Exercise Thursday, 7 June 12
  • 96. Point Behat At Your Own Website And Write Some Scenarios. 1) cd /home/tuser/tutorial/06-takehome 2) Alter behat.yml to point at your live site 3) Write scenarios that test your site Thursday, 7 June 12
  • 97. TLDR - Behat Is Super Cool. Go Forth And Use It. Questions? Thursday, 7 June 12
  • 98. Thanks :-) Please Rate My Tutorial: https://joind.in/6218 Websites & Sources http://behat.org http://mink.behat.org http://dannorth.net/whats-in-a-story/ http://github.com/benwaine/BehatTutorial http://ben-waine.co.uk/blog Thursday, 7 June 12