Beginner
Chapter 2 · 11 min read
Setup & Project Structure
Configure a Cucumber project with Maven (Java) and pip (Python). Install dependencies, set up runners, and organize feature files.
Setting Up Your Cucumber Project
A well-organized BDD project separates feature files (business language) from step definitions (code). Let's set up both Java and Python with the correct dependencies and folder layouts.
Java — Cucumber-JVM with Maven
Cucumber-JVM integrates with JUnit 5 or TestNG. We'll use Maven for dependency management and the cucumber-java + cucumber-testng modules alongside Selenium for browser automation.
Python — Behave
Behave is Python's leading BDD framework. It uses the same Gherkin syntax as Cucumber and follows a simple convention: feature files in features/, step definitions in features/steps/.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bdd.course</groupId>
<artifactId>cucumber-course</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<cucumber.version>7.20.1</cucumber.version>
<selenium.version>4.27.0</selenium.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium.version}</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.10.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</build>
</project>
project-structure.txt
# Java project structure
cucumber-course/
+-- pom.xml
+-- src/test/
+-- java/com/bdd/course/
| +-- runner/
| | +-- TestRunner.java # Cucumber runner
| +-- stepdefinitions/
| | +-- LoginSteps.java # Step implementations
| | +-- CommonSteps.java
| +-- pages/
| | +-- LoginPage.java # Page Objects
| | +-- HomePage.java
| +-- hooks/
| | +-- Hooks.java # Before/After hooks
| +-- context/
| +-- TestContext.java # Shared state
+-- resources/
+-- features/
| +-- login.feature # Gherkin scenarios
| +-- registration.feature
+-- cucumber.properties
requirements.txt
# requirements.txt
behave==1.2.6
selenium==4.27.0
allure-behave==2.13.5
webdriver-manager==4.0.2
project-structure.txt
# Python/Behave project structure
cucumber-course/
+-- requirements.txt
+-- behave.ini
+-- features/
| +-- login.feature # Gherkin scenarios
| +-- registration.feature
| +-- steps/
| | +-- login_steps.py # Step implementations
| | +-- common_steps.py
| +-- environment.py # Hooks (before/after)
+-- pages/
| +-- __init__.py
| +-- login_page.py # Page Objects
| +-- home_page.py
+-- config/
| +-- settings.py # URLs, timeouts
+-- reports/ # HTML/Allure reports
behave.ini
# behave.ini
[behave]
paths = features
format = pretty
stdout_capture = false
stderr_capture = false
log_capture = false
# Tags: behave --tags=@smoke
# Dry-run: behave --dry-run
Cucumber BDD
Beginner
Setup & Project Structure
Written by PV
© 2026 All Rights Reserved