Skip to main content

Using BDD and gherkinising your Acceptance Tests

In my post Testing of Automated tests, I mention about a BDD framework which involves using BDD to drive your acceptance tests. BDD stands for Behaviour Driven Development. 

One effective method of writing BDD tests are by using a format known as Gherkin language. These consist of Given, When, Thens. The main advantage of the gherkin language is that it's readable by the business, and in an ideal world forms part of the Conditions of Acceptance around a PBI.

Also, using a Visual Studio plugin of SpecFlow, you can integrate your Gherkinised COAs into your solution with feature files, and then drive the automated tests, however, for this post I will focus solely on how to effectively gherkinise your acceptance tests.

A Feature file consists of a feature outline, which details what the feature file is testing followed by Scenarios and examples (parameters). The BDD scenarios are made up of a Given, When, Then... These are effectively an initial state (Given), an action (When) and an assertion (Then). 

We will use a generic example of being able to search on the google homepage, so an example of this would be:

Feature: Searching on Google
In order to find information about a topic
As a website User
I want to be able to view search results for a topic

Scenario Outline: User is displayed search results when searching for a search term that has results
Given I am on the Google SearchPage
When I search for a <searchTerm>
Then the search results page is displayed

| Sunderland AFC |

You would then have the searchterm as a parameter (in this case Sunderland AFC), meaning the step is more reusable. If you wanted, you could add more searchterms and run the test multiple times:

| Sunderland AFC |
| Manchester United |
| Arsenal |

If we wanted to add a slightly different test, one that checks for the Did you mean text, this would be easily achieved by using the same Given step, and the same When step, but changing the Then...

Scenario Outline: User is displayed the Showing results for text when searching for an incorrect term
Given I am on the Google SearchPage
When I search for a <searchTerm>
Then the Showing Results For page is displayed with <expectedText>

|searchTerm| expectedText |
| Sunnderland | Sunderland| 

So the above scenario checks for the Showing Results for text when the user has misspelled a search term. However, the only new step is the Then step. This isn't that beneficial when used just as a manual test, however the real value comes when automating the tests, which we will do in the coming days/weeks, the aim of this mini project is to create from scratch a simple set of automated tests, that run against Googles search engine, using the page object model (which I will discuss in a future post as well) with Selenium WebDriver and C#. If you have any specifics over something you'd like me to cover, then leave a comment, and I'll try and put it into the posts in the future.


  1. Nice Article! I always preferred blogger to get ideas, because its provides more information over the books & here I gathered more precious skill from the professional, thanks for taking your to discussing this topic.
    Best Selenium Training Institute in Chennai|Selenium Training in Chennai

  2. I have read your blog its very Interesting. Thanks for sharing. ERP Providers in Chennai | ERP Software Company Chennai. We provide best quality cost effective ERP software applications and end to end enterprise solutions to all the industry verticals with the affordable cost.

  3. Thank you for this valuable information. I have got some important suggestions from it. Get your business to the next level in simple steps.
    ERP Solutions in Chennai | ERP Software Solutions in Chennai.

  4. Nice post. Very interesting to read. Thank you for Sharing.
    erp in chennai


Post a Comment

Popular posts from this blog

What is a PBI?

After my last post, I had the question of what is a PBI... so I thought i'd write a short blog post about what they are and why they are used.

A PBI is an acronym for Product Backlog Item. It is a description of a piece of work that your SCRUM team will develop and deliver. When you have a list of Product Backlog Items, you then refer to that collective list as a Product Backlog.

The product backlog is often prioritised and yourteam will work through each PBI, and release on a regular schedule... I am however going deep into the world of Agile development, which isn't entirely what this post is about, so I will stop myself now.

A Product Backlog Item is made up of the following:

Title - This is often a one liner that gives the team an idea of what the PBI is about, although it can just be an ID for the item and the team work off of that.

Description - Breaks down the PBI in a bit more detail, and can be written in any style, however I prefer it to be written as follows: 

By writin…

Dealing with Selenium WebDriver Driver.Quit crashes (Where chromedriver.exe is left open)

We recently came across a problem with Selenium not quitting the webdriver and this would then lock a file that was needed on the build server to run the builds.

We were using Driver.Quit() but this sometimes failed and would leave chromedriver.exe running. I looked around and found this was a common issue that many people were having. We (I say we, as we came to the solution through paired programming), came up with the following, that would encapsulate the driver.quit inside a task and if this task takes longer than 10 seconds, then it will clean up any processes started by the current process, in the case of the issue on the build server, it would kill any process started by Nunit.

        public static void AfterTestRun()
            var nativeDriverQuit = Task.Factory.StartNew(() => Driver.Quit());
            if (!nativeDriverQuit.Wait(TimeSpan.FromSeconds(10)))

        private s…

Famous Movie Quotes applied to Software Engineering - Jaws

You're gonna need a bigger boat? How can that relate to Engineering?

Firstly, let me ashamedly admit, that I've never seen the whole of Jaws all the way through. It's on my list of films to watch, but whether I get round to it, is another matter!

Anyway, to apply this to engineering, it's almost like "you're gonna need more testers/developers"...

We hear this all too often when trying to push releases out the door, let's throw men at it... However, as we all know, a bigger boat/more men... isn't always the answer, it's not a guarantee of quality, or even a guarantee of getting things done quicker.

If you have a task that will take 2 hours, simply having 2 people work on it doesn't mean that it is halved, in fact often, the time taken to do the task remains at 2 hours, but the maintainability and the knowledge around that area is increased, so it's a price, in my opinion that is often worth paying.