Features
BDD2 syntax is derived from QAF BDD, Jbehave and Gherkin. Following are features of BDD2:
- Custom Meta-Data that supports meta-data filters, meta-data rules and formatter
- Parameter support in step argument
- Data driven test using embedded or external test data
* External test data from external source (CSV, XML, JSON, EXCEL, DB)
- Embedded test data using Examples
- Background support
- Compatible with QAF-geherkin or any other gherkin editor.
- Supported by TestNG runner using BDDTestFactory2 and by cucumber runner using QAF-cucumber
Comment
Comments can be placed any where in the bdd file. Comment can be single line or multiline. Single line comment starts with #
or !
.
Multi-line comments start with """
and end with """
.Multiline comment in scenario or background logged in report as info message, however comments outside will not logged in report.
# this is example of single line comment
# single line comment will be ignored by BDD parser
! this is also a comment
"""
This is multi line comment
will be logged in report if it is inside background or scenario.
"""
line-break
To break statement in multiple line you can use _&
as line break.
Meta-data
Unlike BDD, in BDD2 meta-data are provided before scenario declaration using @
as key value pair separated with :
sign. Meta-data not provided as key value pair will be considered as groups
.
- There are predefined meta-key available to use which are listed in meta-data.
- You can define your custom meta-key to categorize scenarios as per AUT. You can choose whatever names are most appropriate for the information they are trying to convey.
- The meta-data are collected as part of the scenario parsing and made available for different uses, e.g. Scenario selection, setting priority
@description:Data driven test that uses csv file to provide data
@group1 @group2
@author: Chirag Jayswal
SCENARIO: Scenario Example
Given I am on fruits and colors activity
When i select 'grapes'
Then the color should be 'green'
Data-driven Scenario
You can iterate your scenario with set of test data by providing examples with scenario outline. You also can provide data from qaf data provider by providing @QAFDataProvider property as meta-data.Refer make test data driven, any of the @QAFDataProvider property you can set as meta-data.
Below example demonstrates data-driven feature
@author:Chirag Jayswal @regression
@dataFile:resources/data/testdata.csv
SCENARIO: Data-driven Example
Given I am on fruits and colors activity
When i select '${fruit}'
Then the color should be '${color}'
Below is csv data file and first row is column names.
testdata.csv
fruit,color
grapes,green
banana,yellow
Scenario outline with examples.
@regression
@author:Chirag Jayswal
Scenario Outline: Data-driven Example
Given I am on fruits and colors activity
When i select '${fruit}'
Then the color should be '${color}'
Examples:
|fruit|color|
|grapes|green|
|banana|yellow|
You can also use groups/tags with Examples
, however data-provider recommended over Examples with or without groups.
If you want to uses custom data set you need to provide data provider class and data provider name in meta-data.
@dataProvider:my-custom-dp
@dataProviderClass:my.project.impl.CustomDataProvider
@regression @author:Chirag Jayswal
Scenario: Custom Data provider Example
Given I am on fruits and colors activity
When i select '${fruit}'
Then the color should be '${color}'
Above scenario will use custom data provider defined in class CustomDataProvider
. It will add regression
group and Chirag Jayswal
as custom meta-data author
.
package my.project.impl;
import java.util.Map;
import org.testng.annotations.DataProvider;
import org.testng.collections.Maps;
/**
* @author chirag.jayswal
*
*/
public class CustomDataProvider {
@DataProvider(name="my-custom-dp")
public static Object[][] dataProviderForBDD(){
Map<Object, Object> rec1 = Maps.newHashMap();
m.put("fruit", "grapes");
m.put("color", "green");
Map<Object, Object> rec2 = Maps.newHashMap();
m.put("fruit", "banana");
m.put("color", "yellow");
return new Object[][] {{rec1},{rec2}} ;
}
}