Create Gherkin Feature File
- Add BDD feature & scenario data
Create Test Runner File
- glue = StepDefs
- DryRun=true
Create StepDefs File under /StepDefs
- Add Step Definitions to code files under StepDefs
- Best to organize StepDefs into subfolders for 'feature', 'sprints', 'macros', navigation, testID
- Duplicate method names CAN NOT exist in this StepDefs package
- So... BDD language should be carefully planned out for maximizing re-use & avoiding redundancy of actions
- if 5 stepdefs are created for login and the login routine changes....
- will have to update the same routine 5 times.
- Macros are helpful for multi-step routines that are commonly used across tests
DryRun Feature File
- Run the Feature File as Cucumber Test
- This will
- 'wire up' the feature internally ( cucumber.json )
- locate required TestSteps(ie: methods) within the 'StepDefs' package
- flag any missing TestSteps & provide a suggested method name
- great for saving time typing each method name - simply copy/paste suggestion into the definitions file(s)
- indicate missing runner or other 'structural' problems
Copy Method Names into StepDefs File
- Cucumber plugin will output sample code for missing StepDefs
- copy these into one or more StepDefinition files
DryRun Test Runner
- With DryRun=True, now run the TestRunner as JUnit
- This will go through the actions of the test without actually executing the test step methods
- This will flag any 'wiring' issues between the feature, stepdefs, and testrunner.
Add Method Logic
- Add logic to any new methods
DryRun Test Runner
- With DryRun=True, now run the TestRunner as JUnit
DryRun=False Test Runner
- With DryRun=False, now run the TestRunner as JUnit
Add Feature to TestNG.xml ( or create a new TestNGRunner.xml )
- Run TestNG.xml as TestNG Test
Ensure TestNG.xml is included in Maven pom.xml so that Maven '-test will call the newly added features/tests
Walkthrough
Create new feature file 'Features/NewBddFeature.feature
Add Gherkin Data
Feature: New BDD Featureless Feature Scenario: So When I Do Nothing, Nothing Happens Given user1 is already on Login Page Given user1 is doing nothing When user1 still does nothing Then user1 sees nothing happens Then close the browser
- Cucumber will
- parse the feature file for valid syntax
- highlight steps that have no corresponding StepDefs





Create TestRunner File 'bdd/Runners/NewBddFeatureRunner.java'
package com.cs.cmsauto.bdd.Runners;
public class NewBddFeatureRunner {
}


Add TestRunner Details
package com.cs.cmsauto.bdd.Runners;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
features= "src/test/java/com/cs/cmsauto/bdd/Features/NewBddFeature.feature"
,glue= {"com.cs.cmsauto.bdd.StepDefs"} // can also reference just 'StepDefs', but seems better to be explicit with this reference
,format= {"pretty","html:test-output", "json:json-output/cucumber.json","junit:junit-xml-output/cucumber.xml"}
,monochrome = true
,strict = true //true = fail test suite if ANY test step not defined
,dryRun = true //true = check feature-definition-runner setup is valid... NO test logic executed
)
//,glue= {"com.cs.cmsauto.bdd.StepDefs/shared/menu_admin"}
public class NewBddFeatureRunner {
//nothing goes here, its just a constructor for the class
}
Create StepDefs File
package com.cs.cmsauto.bdd.StepDefs;
public class NewBddFeatureDefs {
}

Run Feature File As 'Cucumber Feature'
- The plugin will issue output to the Console
- Copy the method names into the respected StepDefs files
- in this example 'close the browser' step already has a stepdef written, so only the others will have suggested method names output to the console
Feature: New BDD Featureless Feature
Scenario: So When I Do Nothing, Nothing Happens # W:/w/git/CmsAutoUC/src/test/java/com/cs/cmsauto/bdd/Features/NewBddFeature.feature:3
Given user is already on Login Page
Given user1 is doing nothing
When user1 still does nothing
Then user1 sees nothing happens
Then close the browser # MenuAdminLoginDefs.close_the_browser()
1 Scenarios (1 undefined)
5 Steps (2 skipped, 3 undefined)
0m0.000s
You can implement missing steps with the snippets below:
@Given("^user(\\d+) is doing nothing$")
public void user_is_doing_nothing(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@When("^user(\\d+) still does nothing$")
public void user_still_does_nothing(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@Then("^user(\\d+) sees nothing happens$")
public void user_sees_nothing_happens(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}

NewBddFeatureDefs.java
package com.cs.cmsauto.bdd.StepDefs;
public class NewBddFeatureDefs {
@Given("^user(\\d+) is doing nothing$")
public void user_is_doing_nothing(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@When("^user(\\d+) still does nothing$")
public void user_still_does_nothing(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
@Then("^user(\\d+) sees nothing happens$")
public void user_sees_nothing_happens(int arg1) throws Throwable {
// Write code here that turns the phrase above into concrete actions
throw new PendingException();
}
}
Errors will be produced until the Cucumber imports are made



And the 'throws' & 'throw new' logic is removed
@Given("^user(\\d+) is doing nothing$")
public void user_is_doing_nothing(int arg1) {
}
NewBddFeatureDefs.java Ready for DryRun
package com.cs.cmsauto.bdd.StepDefs;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class NewBddFeatureDefs {
@Given("^user(\\d+) is doing nothing$")
public void user_is_doing_nothing(int arg1) {
}
@When("^user(\\d+) still does nothing$")
public void user_still_does_nothing(int arg1) {
}
@Then("^user(\\d+) sees nothing happens$")
public void user_sees_nothing_happens(int arg1) {
}
}
???Check NewBddFeatureRunner.java for dryRun=true & run the feature as Cucumber Feature again.

Run Runner as JUnit Test
- if no errors occur, ready for login in the StepDefs
Feature: New BDD Featureless Feature
Scenario: So When I Do Nothing, Nothing Happens # src/test/java/com/cs/cmsauto/bdd/Features/NewBddFeature.feature:3
Given user1 is already on Login Page # NewBddFeatureDefs.user_is_already_on_Login_Page()
Given user1 is doing nothing # NewBddFeatureDefs.user_is_doing_nothing(int)
When user1 still does nothing # NewBddFeatureDefs.user_still_does_nothing(int)
Then user1 sees nothing happens # NewBddFeatureDefs.user_sees_nothing_happens(int)
Then close the browser # MenuAdminLoginDefs.close_the_browser()
1 Scenarios (1 skipped)
5 Steps (5 skipped)
0m0.000s

Run Runner as JUnit Test dryRun=false
- Test logic should be executed.
- In this feature:
- the browser will be opened
- the 3 new methods do nothing
- the browser will be closed

- Log in to post comments
Tags
