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 ...
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
Reference https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu
6.2. Install Java
Run commands
-
sudo add-apt-repository ppa:webupd8team/java
-
sudo apt-get update
-
sudo apt-get install oracle-java7-installer
Reference http://askubuntu.com/questions/335283/how-to-reslove-unmet-dependencies-can-not-install-or-remove-packages-software
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 http://www.seleniumhq.org/download/
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
https://www.youtube.com/watch?v=zZAbccDiScM&feature=youtu.be