This tutorial will help you configure Cucumber into a Java project using the Gradle build tool.
Introduction
Cucumber is a test automation tool that supports Behavior-Driven Development (BDD). It is written in plain English text called "Gherkin." Cucumber enables you to write test cases that anyone can easily understand, regardless of their technical knowledge.
Setup
First, create a Gradle project using the gradle init command.
> gradle init
Complete the Gradle wizard to create a project.
Now update the gradle.build file to add the Gradle Cucumber dependency.
testImplementation 'io.cucumber:cucumber-java8:7.0.0'
This will add Cucumber implementation to your project.
Task Configuration
Add the following configuration to gradle.build
This will enable the Cucumber runtime to execute BDD test cases.
configurations { cucumberRuntime { extendsFrom testImplementation } }
Create a new custom task to execute Cucumber
task cucumber() { dependsOn assemble, testClasses doLast { javaexec { main = "io.cucumber.core.cli.Main" classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output args = [ '--plugin', 'pretty', '--plugin', 'html:target/cucumber-report.html', '--glue', 'com.zainabed.cucumber.bdd', 'src/test/resources'] } } }
NOTE: com.zainabed.cucumber.bdd is reference to a package name, You should put in your project package name..
Cucumber Options/Args
plugin: Plugins which you want to add in the project.
pretty: Generate a pretty report
html: Generate Cucumber HTML report.
src/test/resources: Location of feature files.
Feature File
Cucumber interprets the Gherkins feature file and executes the glue code associated with it.Therefore, create a features folder inside the test resources section src/test/resources/ and add the Gherkin feature which gets executed by cucumber.
Feature: User Registration User will initiate registration request to system and system will validate the information and add user to system Scenario: Basic Flow Given User visit registration When User enter his registration details Then System validate the information And User get registered
Run the Task
Next, run the following command to execute Cucumber test cases../gradlew cucumber
It will fail and give you the glue code that you need to add to your project like this.
> Task :app:cucumber FAILED Scenario: Basic Flow # src/test/resources/features/user-registration.feature:5 Given User visit registration When User enter his registration details Then System validate the information And User get registered Undefined scenarios: You can implement missing steps with the snippets below: Given("User visit registration", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); When("User enter his registration details", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); Then("System validate the information", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); Then("User get registered", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); });
Glue Code
Create a new Java file named UserRegistrationBDD.java inside bdd package and add the above code into it.
package com.zainabed.cucumber.bdd; import io.cucumber.java8.En; public class UserRegistrationBDD implements En { public UserRegistrationBDD() { Given("User visit registration", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); When("User enter his registration details", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); Then("System validate the information", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); Then("User get registered", () -> { // Write code here that turns the phrase above into concrete actions throw new io.cucumber.java8.PendingException(); }); } }
Add some business logic to it, then rerun it.
Note: Cucumber Java 8 dependency uses constructor and English "En" interface to implement glue code.
Add your business logic and assertions to execute features.
Re-Run the Cucumber Task
At the end, execute the cucumber tasks.
> Task :app:cucumber Scenario: Basic Flow # src/test/resources/features/user-registration.feature:5 Given User visit registration # com.zainabed.cucumber.bdd.UserRegistrationBDD.<init>(UserRegistrationBDD.java:9) When User enter his registration details # com.zainabed.cucumber.bdd.UserRegistrationBDD.<init>(UserRegistrationBDD.java:13) Then System validate the information # com.zainabed.cucumber.bdd.UserRegistrationBDD.<init>(UserRegistrationBDD.java:17) And User get registered # com.zainabed.cucumber.bdd.UserRegistrationBDD.<init>(UserRegistrationBDD.java:21) 1 Scenarios (1 passed) 4 Steps (4 passed)
Conclusion
This tutorial demonstrated the setup and configuration of the Cucumber test framework using the Gradle build tool.
Full source can be found on the Github page.
Comments
Post a Comment