Viblo Learning

Learn about BDD and behat

1. Introduce TDD(Test Driven Development)

TDD is an iterative design process include the steps:


Step 1: Write a test and ensure the new test fails

Step 2: Write code to satisfy the test and ensure all tests pass

Step 3: Refactor

Step 4: Repeat

2. The problem while using and practices TDD

Programmers wanted to know:

  • Where to start

  • How much to test in one go

  • What to call their tests

  • How to understand why a test fails

These problems have been resolved in the Behavior Driven Development (BDD), So What is BDD ?

3. Introduce BDD

3.1. Definition

Behavior Driven Development (BDD)

  • Builds upon TDD

  • Write test cases in a natural language

  • Understood by developers and business folks alike

  • Helps relate domain language of requirements to the code

  • Do this with user stories and scenarios

  • User stories describe a feature's benefit in context

  • Scenarios are executable acceptance criteria

  • A story’s behavior is simply its acceptance criteria– if the system fulfills all the acceptance criteria,it’s behaving correctly; if it doesn’t, it isn’t.

3.2. Objective of BDD

  • Software development towards bringing the business value

  • Write test code first, then write programs

  • Make small portions

  • Create conditions to safely improve the code (refactor)

3.3. Benefits

  • Reduce time to write programs

  • Encourage collaboration across teams

  • Increased modularity, flexibility, and easy to expand

3.4. BDD had answers to some of those TDD questions

What to call their tests?

  • A sentence describing the next behavior in which you are interested.

When a test fails?

  • I had introduced a bug. Solution: Fix the bug.

  • The intended behaviour was still relevant but had moved elsewhere. Solution: Move the test and maybe change it.

  • The behaviour was no longer correct – the premise of the system had changed. Solution: Delete the test.

Where to start:

  • Identify the next most important thing

  • Identify the value of the new features

  • Prioritize new features

  • Formulate the behaviour method name

How much to test in one go:

  • You can only describe so much behavior in a single sentence

4. The structure of Behavior Driven Development (BDD)

  • BDD user stories and scenarios so A story template in BDD this look like

Title (one line describing the story)

As a [role]

I want [feature]

So that [benefit]

  • The structure of one scenario this look like

Scenario 1: Title

Given [context]

And [context]

When [event]

And [some more context]...

Then [outcome]

And[another outcome]...

  • Example: An ATM machine


5. Introduce Behat with Mink


6. Install Behat with Mink on Linux

6.1. Install LAMP

Run commands

  • sudo apt-get update

  • sudo apt-get install apache2

  • sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

  • sudo apt-get install php5-cgi php5-cli php5-common php5-curl php5-dbg php5-dev php5-gd php5-gmp php5-ldap php5-xsl


6.2. Install Java

Run commands

  • sudo add-apt-repository ppa:webupd8team/java

  • sudo apt-get update

  • sudo apt-get install oracle-java7-installer


6.3. Create composer.json file in the project root


6.4. Download composer.phar and run install command


6.5. Run Behat


6.6. Activate MinkExtension


6.7. Check Mink extension


7. Install and Using selenium 2

7.1. Download latest Selenium server

Download latest Selenium server file


7.2. Run Selenium2 jar before test suites


7.3. Create and run scenario


8. The API of MinkContext

8.1. MinkContext Defines Steps for making requests


8.2. MinkContext Defines Steps for interacting with forms



8.3. MinkContext Defines Steps for querying the DOM


8.4. MinkContext Defines Steps for examining responses


9. A Note About Step Results

  • Success: a definition was found and executing it did not throw an Exception
  • Undefined: a definition couldn't be found; all subsequent steps will be Skipped
  • Pending: the definition threw the special PendingException, which means you have work to do; skip remaining steps
  • Failure: a definition throws an Exception; Behat will skip remaining steps and terminate with exit status 1

– By default, Behat relies on PHPUnit for assertions, but you can roll your own.

  • Skipped: steps which were never executed
  • Ambiguous: multiple definitions matched a step
  • Redundant: multiple definitions share the same pattern 10. Compare Behat and selenium WebDrive

10.1: Selenium webdrive

The good:

  • Can automate most browsers and mobile devices in many different programming languages

  • It’s pretty widely adopted across other frameworks as well, and can integrate with BDD tools such as Cucumber

  • Selenium is pretty easy to pick up with some programming knowledge

  • Used Selenium with Java with only minor frustration, and Selenium with Ruby and Rspec combined well with minimal set-up for an easy-to-read output and code

The bad:

  • Can do almost anything but doesn’t mean you should

  • The maintenance cost is very high and it’ll take you a while to figure out how to make each browser’s driver work with your code

  • You still have to manually check those browsers for visual bugs.

  • Difficult to find API docs

You should use this if:

  • QA team doesn’t have a lot of programming experience and wants to use the language they’re most comfortable with

  • It’s easy to get support, and you don’t have to learn a new language’s syntax

  • This approach is also good if you’re a developer making Selenium tests for your product - you can write in the same language your product is in without having to switch contexts as much

10.2. Behat

The good:

  • Can automate most browsers

  • Combine your acceptance criteria with your automated acceptance tests

  • You to think through your requirements and makes it easy for non-developers to read your code and run your tests

  • The syntax is easy to read for people who don’t code

  • Easy to find API docs

The bad:

  • The maintenance cost is very high

You should use this if:

  • Product manager and QA at the same time for the same product, and probably should have used Behat instead of Selenium

11. Demo

I have file wikiSearch.feature include story and scenarios


Run command: bin/behat features/wikiSearch.feature


video illustrating run wikiSearch.feature file

All Rights Reserved

Let's register a Viblo Account to get more interesting posts.