This guide will walk you through the installation and setup process for Cucumber using Java, one of the most popular languages for Cucumber. We’ll keep it simple, beginner-friendly, and include practical examples to ensure you can follow along. Let’s get started!
Prerequisites
Before setting up Cucumber, ensure you have the following installed on your system:
- Java Development Kit (JDK): Version 8 or higher. Cucumber works best with Java, and most examples in this guide use Java.
- Maven or Gradle: A build tool to manage dependencies. We’ll use Maven for this guide, as it’s widely used and beginner-friendly.
- Integrated Development Environment (IDE): IntelliJ IDEA, Eclipse, or Visual Studio Code. IntelliJ IDEA is recommended for its excellent Cucumber plugin support.
- Web Browser: For testing (if you plan to integrate with Selenium later).
- Command Line Tool: For running Maven commands (e.g., Terminal on macOS/Linux or Command Prompt/PowerShell on Windows).
Verify Prerequisites
- Check Java: Open a terminal and run
java -version. You should see output like:java version "1.8.0_281" (or higher) - Check Maven: Run
mvn -version. You should see output like:Apache Maven 3.8.6 (or higher)
If these aren’t installed, download and install them:
Step-by-Step Setup for Cucumber with Java
We’ll set up a Maven project with Cucumber and JUnit (a popular testing framework). This setup allows you to write and run Cucumber tests.
Step 1: Create a Maven Project
Open Your IDE:
- In IntelliJ IDEA, select File > New > Project.
- Choose Maven, select your JDK, and click Next.
- Enter a GroupId (e.g.,
com.example) and ArtifactId (e.g.,cucumber-demo). - Click Finish to create the project.
Verify Project Structure:
Your project should have apom.xmlfile (Maven’s configuration file) and a basic folder structure:cucumber-demo/ ├── src │ ├── main │ │ └── java │ └── test │ └── java └── pom.xml
Step 2: Add Cucumber Dependencies
Cucumber requires several dependencies to work with Java and JUnit. Open the pom.xml file and add the following dependencies inside the <dependencies> section.
<dependencies>
<!-- Cucumber Java -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.18.1</version>
</dependency>
<!-- Cucumber JUnit -->
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.18.1</version>
<scope>test</scope>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
Explanation:
cucumber-java: Core Cucumber library for Java.cucumber-junit: Integrates Cucumber with JUnit to run tests.junit: JUnit framework for running tests.<scope>test</scope>: Ensures these dependencies are used only for testing.
Step 3: Install Dependencies
Run Maven Install:
- In your IDE, right-click the
pom.xmlfile and select Maven > Reload Project (IntelliJ) or Update Project (Eclipse). - Alternatively, open a terminal in the project directory and run:
mvn install - This downloads the Cucumber and JUnit libraries.
- In your IDE, right-click the
Verify Installation:
- Create a simple test to ensure everything is set up correctly. We’ll do this in the next steps.
Step 4: Create a Feature File
Cucumber tests start with a feature file written in Gherkin syntax. Let’s create one to test a login feature.
Create a Features Directory:
- In
src/test/resources, create a folder namedfeatures. - Inside
features, create a file namedlogin.feature.
- In
Write a Simple Feature File:
Add the following content tologin.feature:Feature: User Login As a user, I want to log in to the application so that I can access my account. Scenario: Successful login with valid credentials Given the user is on the login page When the user enters valid credentials Then the user should be redirected to the homepageExplanation:
- The
Featurekeyword describes the functionality being tested. - The
Scenariodefines a specific test case. Given,When, andThenstructure the test steps.
- The
Step 5: Create Step Definitions
Cucumber needs step definitions to map the Gherkin steps to executable code.
Create a Steps Package:
- In
src/test/java, create a package namedsteps. - Inside
steps, create a Java class namedLoginSteps.java.
- In
Add Step Definitions:
Add the following code toLoginSteps.java:package steps; import io.cucumber.java.en.Given; import io.cucumber.java.en.When; import io.cucumber.java.en.Then; public class LoginSteps { @Given("the user is on the login page") public void userIsOnLoginPage() { System.out.println("User navigates to the login page"); // Placeholder: Add Selenium code later } @When("the user enters valid credentials") public void userEntersValidCredentials() { System.out.println("User enters username and password"); // Placeholder: Add Selenium code later } @Then("the user should be redirected to the homepage") public void userRedirectedToHomepage() { System.out.println("User is redirected to the homepage"); // Placeholder: Add Selenium code later } }Explanation:
- Each step in the feature file is mapped to a Java method using annotations (
@Given,@When,@Then). - For now, the methods print messages. In a real project, you’d add automation logic (e.g., using Selenium).
- Each step in the feature file is mapped to a Java method using annotations (
Step 6: Create a Test Runner
To run the Cucumber tests, you need a test runner class.
Create a Runner Package:
- In
src/test/java, create a package namedrunner. - Inside
runner, create a Java class namedTestRunner.java.
- In
Add Test Runner Code:
Add the following code toTestRunner.java:package runner; import io.cucumber.junit.Cucumber; import io.cucumber.junit.CucumberOptions; import org.junit.runner.RunWith; @RunWith(Cucumber.class) @CucumberOptions( features = "src/test/resources/features", glue = "steps", plugin = {"pretty", "html:target/cucumber-reports.html"} ) public class TestRunner { }Explanation:
@RunWith(Cucumber.class): Tells JUnit to use Cucumber as the test runner.@CucumberOptions:features: Specifies the location of feature files.glue: Specifies the package containing step definitions.plugin: Generates a readable console output (pretty) and an HTML report.
Step 7: Run the Test
Run via IDE:
- Right-click
TestRunner.javain your IDE and select Run As > JUnit Test. - You should see console output like:
User navigates to the login page User enters username and password User is redirected to the homepage
- Right-click
Run via Command Line:
- In the project directory, run:
mvn test - This executes the Cucumber tests and generates an HTML report in
target/cucumber-reports.html.
- In the project directory, run:
Check the Report:
- Open
target/cucumber-reports.htmlin a browser to view a detailed test report.
- Open
Troubleshooting Common Setup Issues
- Dependency Errors:
- If Maven fails to download dependencies, ensure you have an internet connection and run
mvn clean install.
- If Maven fails to download dependencies, ensure you have an internet connection and run
- Feature File Not Found:
- Ensure the
featuresdirectory is insrc/test/resourcesand the path inTestRunneris correct.
- Ensure the
- Step Definitions Not Found:
- Check that the
glueoption inCucumberOptionspoints to the correct package (e.g.,steps).
- Check that the
- Java Version Mismatch:
- Ensure your JDK version is compatible (8 or higher). Update the
pom.xmlwith:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
- Ensure your JDK version is compatible (8 or higher). Update the
Tips for Beginners
- Use an IDE Plugin: Install the Cucumber for Java plugin in IntelliJ IDEA for syntax highlighting and step navigation.
- Keep Versions Consistent: Use the same version for all Cucumber dependencies (e.g., 7.18.1).
- Start Simple: Begin with basic scenarios like the login example before adding complex features.
- Explore Reports: The HTML report is a great way to understand test results and share them with your team.