Before we talk about Spec Flow, we should know Cucumber
- Testing Frame work
- Support BDD
- Uses Gherkins
- Cucumber is written in Ruby but test code can be written in c#, Java , Python etc.
[ Installation & Set Up of Spec Flow in Visual Studio Learn from official Spec Flow documentation ]
Creating a Mind map for clarity of things
What is Spec Flow?
- Official .Net version of Cucumber
- Testing Frame Work
- Support BDD (Behavior Driven Development)
- Uses Gherkins
- Gherkin support English, German, Spanish, French etc.
So before going further a brief idea about BDD and Gherkins
BDD
- Can be considered as a refinement of TDD (Test Driven Development) and ATDD (Acceptance Test Driven Development). [Definition not available in the scope of this study]
- Thinking "from the outside in". Should Test Behavior Not test implementation.
- Apply 5 Why's
- Used in Toyota Company (Source Wiki)
- Problem - The vehicle will not start
- Why? - The battery is dead. (first why)
- Why? - The alternator is not functioning. (second why)
- Why? - The alternator belt has broken. (third why)
- Why? - The alternator belt was well beyond its useful service life and not replaced. (fourth why)
- Why? - The vehicle was not maintained according to the recommended service schedule. (fifth why, a root cause)
- Why we are using 5Why's ???? To get the root cause
- is understandable by different stake holders (BA, QA, Devops) to improve communication
- driven by Business Value
Why BDD Framework ?
Hopefully through this pic we all understand the problems in software development / testing.
The big hurdle for SW development / testing is Communication
We can overcome such problems through Gherkins
Gherkins
- Language that Cucumber / Spec Flow understand
- Ubiquitous language - means normal language Eg: English
- Directly interact with the development code but tests are written in a language that is quite easy to understand by the business stakeholders. [a practical example will give you more understanding of this]
- Removes any misunderstandings / confusion in Communication.
- Not necessarily used to write automated tests.
- Primarily used to write structured tests which can be used as project documentation.
- The property of being structured gives us the ability to automate them :)
- This automation is done by Spec Flow / Cucumber
Example of Gherkins / Cucumber / Spec Flow / BDD
Feature : Create A New Facebook Account
Scenario : Successful sign up
Once successfully signed in, a confirmation E-mail and a personal greetings is sent
Given I have chosen to sign up
When I entered the details such as Name, Email, Phone Number, DOB and Gender
Then I should receive a confirmation E-mail
And I should see personal greeting mail
Scenario : Duplicate Email
To create an account with an existing E-mail in FB
Given I have chosen to sign up
When I entered the details such as Name, Email, Phone Number, DOB and Gender
Then an error message is shown that E-mail already registered
And I should get the option to claim the E-mail address.
When we look at the above example - we can see that any business users can understand what the test is going to do.
- Stake holders can visualize what the test is intended to do
- Can give feedback [Just visualize - how the test we write in POM / Facade can be read by Stake holders. It's very difficult for person with out programming knowledge]
A simple Practical Example in Git Hub.
Feature File is like body of your car, engine is different.
Key Words
Feature: Defines what feature you will be testing in the tests below
- Each Gherkin file begins with a Feature keyword.
- Feature defines the logical test functionality
- e.g if you are testing a payment gateway your Feature will become Payment Gateway
- If you are testing the LogIn functionality then the Feature will become Login
- The idea of having a feature file is to put down a summary of what you will be testing.
- serve as the documentation for your tests
- good point to start for a new team member
Background: used to define steps which are common to all the tests in the feature file
- Eg: Think of Login, which is common to all tests.
Scenario: Each Feature will contain some number of tests to test the feature. Each test is called a Scenario
- Eg: add product to basket
- A scenario is equivalent to a test in our regular development process. Each scenario/test can be basically broken down into three parts:
- Precondition to the test, which represent with (Given) keyword
- Test step execution, which represent with (When) keyword
- Verification of the output with expected result, which represent with (Then)
Given: Tells the pre-condition of the test. For example in an E-commerce website, if you want to add a product to the basket, then the pre-condition is that you should be on the Products Page
- Eg: user is on the Home Page / product page
When: Defines the action of the test
- Eg: User add the first product to basket.
Then: States the post condition. You can say that it is expected result of the test
- Eg: Then the product should be added.
And: Defines additional conditions of the test
Eg: Given User is on Home Page
When User Navigate to LogIn Page
And User enters UserName and Password
Then Message displayed Login Successfully
And User enters UserName and Password
Then Message displayed Login Successfully
But: used to add negative type comments
Eg: Given User is on Home Page
When User Navigate to LogIn PageAnd User enters UserName and Password
But The user credentials are wrong
Then Message displayed Wrong UserName & Password
* keyword -
- whole purpose of having Given, When, Then and all the other keywords
- Cucumber doesn’t care about what Keyword you use
- it cares about what code it needs to execute for each step [Step Definition]
- all the keywords can be replaced by the * keyword
Eg: Scenario: Successful Login with Valid Credentials
* User is on Home Page* User Navigate to LogIn Page
* User enters UserName and Password
* Message displayed Login Successfully
I had create a Spec Flow code for Google search in Git Hub. https://github.com/fasteningcode/SpecFlow_googleSearch/
No comments:
Post a Comment