Skill

Generate Cucumber BDD tests with Gherkin scenarios

A Cucumber BDD skill generating Gherkin feature files and step definitions in Java, JavaScript, or Ruby, with cloud execution setup.

Works with cucumbergherkinjunitmaventestng

72
Spark score
out of 100
Updated last month
Version 1.0.0

Add to Favorites

Why it matters

Automate the creation of behavior-driven development test suites by generating Gherkin feature files and corresponding step definitions in Java, JavaScript, or Ruby, enabling teams to write human-readable acceptance tests that bridge business requirements and technical implementation.

Outcomes

What it gets done

01

Write Gherkin feature files with Given/When/Then scenarios and scenario outlines

02

Generate step definition code in Java, JavaScript, or Ruby that implements Gherkin steps

03

Configure test hooks for setup, teardown, and screenshot capture on failure

04

Set up cloud execution on LambdaTest with proper capabilities and environment variables

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ag-cucumber-skill | bash

Overview

Cucumber BDD Skill

This skill generates Cucumber BDD feature files and step definitions in Java, JavaScript, or Ruby, covering Gherkin structure, hooks, tag filtering, anti-patterns, and LambdaTest cloud execution setup. Use it when a user mentions Cucumber, Gherkin, Feature/Scenario, Given/When/Then, or BDD and needs test files generated.

What it does

This skill generates Cucumber BDD tests - Gherkin feature files and step definitions in Java, JavaScript, or Ruby. It covers Gherkin feature file structure with Feature, Background, Scenario, and Scenario Outline sections using Examples tables for data-driven runs, such as a login feature with successful and invalid-credential scenarios plus a parameterized outline testing multiple email, password, and result combinations. It covers Java step definitions using Cucumber's annotation-based Given, When, and Then with typed string parameters and JUnit assertions, JavaScript step definitions using the cucumber-js library with async page interactions and chai assertions, lifecycle hooks that set up a driver before a scenario and tear it down after, attaching a failure screenshot when a scenario fails, and tag-based scenario filtering using tags like smoke, critical, slow, and regression, run through Maven's tag-filter expressions with AND and NOT logic. It documents anti-patterns to avoid: UI details in Gherkin instead of business language, one step per line of code instead of meaningful business-level steps, no Background for shared setup instead of using one, and imperative instead of declarative step style, each with a readability, DRY, or maintainability rationale. It also covers cloud execution on LambdaTest's TestMu AI platform via environment-variable credentials and platform capabilities covering build name, scenario name, target platform, and video recording, for both Java through a remote WebDriver against the LambdaTest hub and JavaScript through a Selenium builder with embedded credentials in the server URL. A quick-reference table covers common commands - running all tests in Java through Maven with the JUnit platform engine, running all tests in JavaScript through cucumber-js, tagged runs, dry runs, and undefined-step snippet generation - and a companion playbook reference covers eleven deeper topics: project setup, feature-writing patterns, step definitions, dependency injection and shared state, hooks and lifecycle ordering, custom parameter types, parallel execution, reporting, CI/CD integration, a debugging quick-reference, and a best-practices checklist.

When to use - and when NOT to

Use it when a user mentions Cucumber, Gherkin, Feature or Scenario, Given/When/Then, or BDD, and needs feature files or step definitions generated in Java, JavaScript, or Ruby.

Inputs and outputs

Given a user story or test requirement, it produces a Gherkin feature file with Background, Scenarios, and Scenario Outlines where data-driven, matching step definitions in the target language, lifecycle hooks, and tag-based run configuration.

Integrations

Cucumber-JVM for Java or the cucumber-js library for JavaScript, JUnit or chai for assertions, Selenium WebDriver for browser automation, and LambdaTest's TestMu AI cloud grid for remote cross-browser execution.

Who it's for

QA engineers and developers writing BDD test suites in Cucumber who want correct Gherkin structure, working step definitions, and cloud execution setup rather than assembling boilerplate from scratch.

Source README

Cucumber BDD Skill

When to Use

Use this skill when you need generates Cucumber BDD tests with Gherkin feature files and step definitions in Java, JavaScript, or Ruby. Use when user mentions "Cucumber", "Gherkin", "Feature/Scenario", "Given/When/Then", "BDD". Triggers on: "Cucumber", "Gherkin", "BDD", "Feature file", "Given/When/Then", "step...

Core Patterns

Feature File (Gherkin)

Feature: User Login
  As a registered user
  I want to log into the application
  So that I can access my dashboard

  Background:
    Given I am on the login page

  Scenario: Successful login
    When I enter "user@test.com" in the email field
    And I enter "password123" in the password field
    And I click the login button
    Then I should be redirected to the dashboard
    And I should see "Welcome" on the page

  Scenario: Invalid credentials
    When I enter "wrong@test.com" in the email field
    And I enter "wrongpass" in the password field
    And I click the login button
    Then I should see an error message "Invalid credentials"

  Scenario Outline: Login with various users
    When I enter "<email>" in the email field
    And I enter "<password>" in the password field
    And I click the login button
    Then I should see "<result>"

    Examples:
      | email           | password    | result     |
      | admin@test.com  | admin123    | Dashboard  |
      | user@test.com   | password    | Dashboard  |
      | bad@test.com    | wrong       | Error      |

Step Definitions - Java

import io.cucumber.java.en.*;
import static org.junit.jupiter.api.Assertions.*;

public class LoginSteps {
    private LoginPage loginPage;
    private DashboardPage dashboardPage;

    @Given("I am on the login page")
    public void iAmOnTheLoginPage() {
        loginPage = new LoginPage(driver);
        loginPage.navigate();
    }

    @When("I enter {string} in the email field")
    public void iEnterEmail(String email) {
        loginPage.enterEmail(email);
    }

    @When("I enter {string} in the password field")
    public void iEnterPassword(String password) {
        loginPage.enterPassword(password);
    }

    @When("I click the login button")
    public void iClickLogin() {
        dashboardPage = loginPage.clickLogin();
    }

    @Then("I should be redirected to the dashboard")
    public void iShouldBeOnDashboard() {
        assertTrue(driver.getCurrentUrl().contains("/dashboard"));
    }

    @Then("I should see {string} on the page")
    public void iShouldSeeText(String text) {
        assertTrue(dashboardPage.getPageSource().contains(text));
    }
}

Step Definitions - JavaScript

const { Given, When, Then } = require('@cucumber/cucumber');
const { expect } = require('chai');

Given('I am on the login page', async function() {
  await this.page.goto('/login');
});

When('I enter {string} in the email field', async function(email) {
  await this.page.fill('#email', email);
});

When('I click the login button', async function() {
  await this.page.click('button[type="submit"]');
});

Then('I should see {string} on the page', async function(text) {
  const content = await this.page.textContent('body');
  expect(content).to.include(text);
});

Hooks

import io.cucumber.java.*;

public class Hooks {
    @Before
    public void setUp(Scenario scenario) {
        driver = new ChromeDriver();
    }

    @After
    public void tearDown(Scenario scenario) {
        if (scenario.isFailed()) {
            byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
            scenario.attach(screenshot, "image/png", "failure-screenshot");
        }
        driver.quit();
    }
}

Tags

@smoke
Feature: Login
  @critical @fast
  Scenario: Quick login
    ...

  @slow @regression
  Scenario: Full login flow
    ...
### Run by tag
mvn test -Dcucumber.filter.tags="@smoke"
mvn test -Dcucumber.filter.tags="@smoke and not @slow"

Anti-Patterns

Bad Good Why
UI details in Gherkin Business language Readability
One step per line of code Meaningful business steps Abstraction
No Background for shared steps Use Background DRY
Imperative steps Declarative steps Maintainable

Cloud Execution on TestMu AI

Set environment variables: LT_USERNAME, LT_ACCESS_KEY

Java:

// CucumberHooks.java
ChromeOptions browserOptions = new ChromeOptions();
HashMap<String, Object> ltOptions = new HashMap<>();
ltOptions.put("user", System.getenv("LT_USERNAME"));
ltOptions.put("accessKey", System.getenv("LT_ACCESS_KEY"));
ltOptions.put("build", "Cucumber Build");
ltOptions.put("name", scenario.getName());
ltOptions.put("platformName", "Windows 11");
ltOptions.put("video", true);
browserOptions.setCapability("LT:Options", ltOptions);
driver = new RemoteWebDriver(new URL("https://hub.lambdatest.com/wd/hub"), browserOptions);

JavaScript:

const driver = new Builder()
  .usingServer(`https://${process.env.LT_USERNAME}:${process.env.LT_ACCESS_KEY}@hub.lambdatest.com/wd/hub`)
  .withCapabilities({ browserName: 'chrome', 'LT:Options': {
    user: process.env.LT_USERNAME, accessKey: process.env.LT_ACCESS_KEY,
    build: 'Cucumber Build', platformName: 'Windows 11', video: true
  }}).build();

Quick Reference

Task Command
Run all (Java) mvn test with cucumber-junit-platform-engine
Run all (JS) npx cucumber-js
Run tagged --tags "@smoke"
Dry run --dry-run
Generate snippets Run undefined steps

Deep Patterns → reference/playbook.md

§ Section Lines
1 Project Setup & Configuration Maven, runner, rerun
2 Feature Writing Patterns Background, outlines, DataTable
3 Step Definitions Typed steps, DI injection
4 Dependency Injection & Shared State PicoContainer, ScenarioContext
5 Hooks (Lifecycle Management) Before/After ordering, screenshots
6 Custom Parameter Types Transformers, DocString
7 Parallel Execution Thread-safe, TestNG parallel
8 Reporting Allure, masterthought, JSON
9 CI/CD Integration GitHub Actions, tag matrix
10 Debugging Quick-Reference 10 common problems
11 Best Practices Checklist 13 items

Limitations

  • Use this skill only when the task clearly matches its upstream source and local project context.
  • Verify commands, generated code, dependencies, credentials, and external service behavior before applying changes.
  • Do not treat examples as a substitute for environment-specific tests, security review, or user approval for destructive or costly actions.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.