Suggest a tool

Category guides · published

"Best open source bdd tools": 13 listed, sorted by GitHub stars

Metrics as of , from the GitHub or GitLab API of each repository. Refreshed monthly.

The BDD category on FreeQATools lists open-source behaviour-driven development frameworks and Gherkin runners. The table is sorted by GitHub stars on each tool's fetch date, which is a count and not a quality judgement. The sections below group the tools by documented specification format, step language, parallel execution and report output.

What the category covers

FreeQATools defines the BDD category as behaviour-driven development frameworks and Gherkin runners. A tool is listed only when it meets the published inclusion rules. A catalogue entry can carry more than one category code. Robot Framework is listed here and under browser automation.

Specification formats

Behat tests are Gherkin feature files. behave tests are Gherkin feature files. cucumber-js scenarios are written in Gherkin feature files. pytest-bdd reads feature files in a subset of Gherkin. Cucumber JVM describes its tests as automated tests in plain language.

cucumber-ruby runs Gherkin feature files. Godog scenarios use Gherkin with Given, When and Then steps. Reqnroll turns Given-When-Then scenarios in Gherkin feature files into tests.

Several BDD tools document a format other than Gherkin. Gauge reads Markdown-like specifications in .spec or .md files. JBehave maps Given/When/Then steps in plain-text .story files to annotated Java methods. Robot Framework uses keyword-driven plain text files with the .robot extension. Codeception tests are written as PHP code.

Serenity BDD works with either Cucumber scenarios or JUnit tests. Its catalogue entry describes it as a library that turns those test results into living-documentation reports (tool page).

Step code languages

Behat step code is PHP. Codeception is a PHP testing framework. Python is the documented language for behave. pytest-bdd is a Python plugin for pytest. Robot Framework names Python as the primary language for extending it.

cucumber-js runs JavaScript, plus TypeScript and other languages that transpile to JavaScript. Gauge provides language runners for C#, Java, JavaScript, Python and Ruby.

On the JVM, Cucumber JVM targets Java. JBehave supports Java and other JVM languages such as Groovy, Kotlin and Scala. Serenity BDD documents Java.

Outside the JVM, cucumber-ruby runs Ruby step definitions. Godog runs Go step definitions through go test. Reqnroll targets .NET.

Parallel runs and reports

behave has a --jobs option for test runners that support parallel execution. cucumber-js runs scenarios in parallel worker threads. Cucumber JVM documents parallel execution across multiple threads. Gauge has a --parallel option that runs worker processes.

Godog runs scenarios concurrently when concurrency is set in its options. JBehave runs stories concurrently through its Embedder. Reqnroll documents in-process parallel runs. Serenity BDD documents parallel Cucumber scenarios on JUnit 5.

Codeception documents sharding across CI jobs. Robot Framework points to external projects for parallel execution.

Behat has no parallel option in the documentation read. cucumber-ruby has no parallel option in the documentation read. pytest-bdd has no parallel option in the documentation read. A comparison row with no documented value is marked not documented instead of inferred (comparison method).

Behat has a junit formatter that writes JUnit XML. behave has a junit reporter with JUnit XML-like output. Codeception writes a JUnit XML report with --xml. cucumber-js has a JUnit formatter that produces an XML report. The Cucumber reporting docs list a junit formatter for Cucumber JVM and cucumber-ruby.

Godog lists a junit formatter. Robot Framework writes xUnit compatible XML next to its HTML log and report. pytest-bdd writes Cucumber JSON. Gauge adds HTML and XML reports through plugins.

How this list is sorted

The quoted title is a search query, not a verdict. FreeQATools does not rank tools by opinion. The list below is sorted by GitHub stars, descending, as fetched from the repository host API on the date shown with each value.

Stars count how many accounts have starred a repository. They say nothing about fit for a given project, so the documented facts under each tool are the part to compare.

Every tool here meets the inclusion rules: an OSI-approved license, a public repository, software testing or quality as its primary purpose and at least one release or tag. Each status badge follows the status rules on the methodology page.

Open-source BDD tools by GitHub stars

BDD tools. Sorted by GitHub stars, descending. Select a column heading to change the sort.
Robot Framework11,90612026-09-141v7.52026-09-211Apache-2.0Pythonactive
cucumber-js5,39412026-08-041v13.2.12026-09-221MITTypeScriptactive
cucumber-ruby5,21212026-06-251v11.1.12026-09-181MITRubyactive
Codeception4,85712026-02-1815.3.52026-08-061MITPHPactive
Behat3,97012026-09-071v3.33.02026-09-181MITPHPactive
behave3,52912025-09-041v1.3.32026-09-211BSD-2-ClausePythonactive
Gauge3,18912026-09-161v1.6.382026-09-161Apache-2.0Goactive
Cucumber JVM2,83512026-09-221v7.34.92026-09-221MITJavaactive
Godog2,67312026-07-311v0.16.02026-09-181MITGoactive
pytest-bdd1,46612024-09-261publish-test-pypi2026-09-141MITPythonactive
Reqnroll78712026-03-231v3.3.42026-08-261BSD-3-ClauseC#active
Serenity BDD75512024-01-1014.0.12026-09-101Apache-2.0HTMLactive
JBehave4112023-09-251jbehave-5.2.02026-03-051BSD-3-ClauseJavaslow

1 Fetched from the GitHub or GitLab API on . Hover a value for its own date.

Filters for language, license and status are on the bdd category page.

Tools in this list

Each entry gives the tool's one-line summary from its README and the facts its documentation states for this category, each with its source. Facts that are not documented are left out here and marked on the comparison pages.

  1. Robot Framework

    Python automation framework with a plain text, keyword-based syntax for acceptance testing, ATDD and RPA. README, read 2026-09-22

    Languages for writing tests
    Robot Framework plain text syntax; Python as the primary language for extending it source: README
    Specification format
    Plain text keyword-driven test and task files (.robot), extended with libraries source: README
    Parallel or distributed execution
    External tools, developed as separate projects, for parallel execution source: Docs: Robot Framework User Guide
    CI integration
    xUnit compatible output for CI servers such as Jenkins; Jenkins Robot Framework plugin source: Docs: Robot Framework User Guide
    Report formats
    HTML log and report, XML and JSON output files, xUnit compatible XML source: Docs: Robot Framework User Guide
    Install method
    pip (pip install robotframework) source: README
  2. cucumber-js

    JavaScript implementation of Cucumber for running plain-language Gherkin tests on Node.js. README, read 2026-09-22

    Languages for writing tests
    JavaScript; TypeScript and other languages that transpile to JavaScript source: Docs: Transpiling
    Specification format
    Plain language Gherkin feature files, with step definitions in code source: README
    Parallel or distributed execution
    --parallel option runs scenarios in worker threads source: Docs: Parallel
    CI integration
    JUnit formatter output for CI platforms to pick up results source: Docs: Formatters
    Report formats
    Summary, progress, pretty, HTML, message (NDJSON), JSON, JUnit XML, usage source: Docs: Formatters
    Install method
    npm (npm install @cucumber/cucumber) source: README
  3. cucumber-ruby

    Ruby implementation of Cucumber that runs Gherkin feature files with Ruby step definitions. README, read 2026-09-22

    Languages for writing tests
    Ruby source: README
    Specification format
    Gherkin feature files with Ruby step definitions source: README
    CI integration
    CI guide: run through Rake, Ant or Maven; JUnit formatter output for Jenkins source: Docs: Continuous Integration
    Report formats
    Built-in formatters: message, progress, pretty, html, json, rerun, junit source: Docs: Reporting
    Install method
    RubyGems (gem install cucumber) or Bundler (gem 'cucumber' in the Gemfile) source: README
  4. Codeception

    Full-stack PHP testing framework for acceptance, functional and unit tests written as actor steps. README, read 2026-09-22

    Languages for writing tests
    PHP source: README
    Specification format
    PHP code; classic PHPUnit tests also run source: README
    Parallel or distributed execution
    Sharding across CI jobs with the --shard option; robo-paracept task set for groups source: Docs: Parallel Execution
    CI integration
    Setup steps for Jenkins, GitHub Actions, GitLab CI and Travis CI source: Docs: Continuous Integration
    Report formats
    CLI, HTML (--html), JUnit XML (--xml); Allure through an extension source: Docs: Reporting
    Install method
    Composer (composer require "codeception/codeception" --dev) or codecept.phar source: README
  5. Behat

    BDD framework for PHP that runs plain-language feature specifications against business expectations. README, read 2026-09-22

    Languages for writing tests
    PHP source: Docs: Behat documentation
    Specification format
    Gherkin feature files with PHP FeatureContext classes source: Docs: Quick Start
    Report formats
    pretty, progress, junit (JUnit XML), json source: Docs: Output Formatters
    Install method
    Composer (composer require --dev behat/behat) source: README
  6. behave

    Behavior-driven development tool for Python that runs natural-language feature files backed by Python step functions. README, read 2026-09-22

    Languages for writing tests
    Python source: README
    Specification format
    Gherkin feature files with Python step implementations source: README
    Parallel or distributed execution
    --jobs / --parallel option, for test runners that support parallel execution source: Docs: Using behave
    CI integration
    TeamCity through the contributed behave-teamcity formatter source: Docs: Formatters and Reporters
    Report formats
    junit reporter (JUnit XML-like); json, html, plain, pretty, progress, rerun formatters source: Docs: Formatters and Reporters
    Install method
    pip (pip install behave) source: Docs: Installation
  7. Gauge

    Cross-platform test automation tool for specifications in business language, with C#, Java, JavaScript, Python and Ruby runners. README, read 2026-09-22

    Languages for writing tests
    Language runners for C# (.NET and .NET Core), Java, JavaScript, Python, Ruby source: Docs: Plugins
    Specification format
    Markdown-like specifications (.spec or .md files) with step implementations in code source: Docs: Writing specifications
    Parallel or distributed execution
    gauge run --parallel with worker processes (-n streams); threads for Java and .NET runners source: Docs: Execution
    CI integration
    Jenkins tutorial: gauge run specs as a build step source: Docs: Integrating Gauge with Jenkins
    Report formats
    HTML (html-report plugin), XML (xml-report plugin) source: Docs: Plugins
    Install method
    Homebrew, npm (npm install -g @getgauge/cli), curl script or ZIP source: Docs: Installing Gauge
  8. Cucumber JVM

    Java implementation of Cucumber for running plain-language tests on the JVM with JUnit. README, read 2026-09-22

    Languages for writing tests
    Java (JVM) source: README
    Specification format
    Automated tests written in plain language source: README
    Parallel or distributed execution
    Multi-threaded execution through JUnit 5 Platform, JUnit 4, TestNG or the CLI (--threads) source: Docs: Parallel execution
    CI integration
    CI guide: run through Rake, Ant or Maven; JUnit formatter output for Jenkins source: Docs: Continuous Integration
    Report formats
    Built-in formatters: message, progress, pretty, html, json, rerun, junit, testng source: Docs: Reporting
    Install method
    Maven Central (io.cucumber:cucumber-java) via Maven or Gradle source: Docs: Cucumber-JVM installation
  9. Godog

    Cucumber BDD framework for Go that runs Gherkin feature files against Go step definitions via go test. README, read 2026-09-22

    Languages for writing tests
    Go source: README
    Specification format
    Gherkin feature files with Go step definitions source: README
    Parallel or distributed execution
    Concurrent scenario execution when concurrency is set in options source: README
    Report formats
    Formatters: pretty, progress, cucumber, events, junit source: Docs: pkg.go.dev: godog
    Install method
    Go library run with go test; CLI via go install github.com/cucumber/godog/cmd/godog@latest (deprecated) source: README
  10. pytest-bdd

    BDD framework for pytest that runs Gherkin feature files through pytest with fixture-based step definitions. README, read 2026-09-22

    Languages for writing tests
    Python (pytest plugin) source: README
    Specification format
    Feature files in a subset of Gherkin, with steps as pytest functions source: README
    CI integration
    Cucumber JSON output usable by the Jenkins cucumber-testresult plugin source: README
    Report formats
    Cucumber JSON (--cucumberjson); Gherkin terminal output (--gherkin-terminal-reporter) source: README
    Install method
    pip (pip install pytest-bdd) source: README
  11. Reqnroll

    .NET BDD tool that turns Gherkin scenarios into tests run by MsTest, NUnit, xUnit or TUnit. README, read 2026-09-22

    Languages for writing tests
    .NET (.NET Framework 4.6.2+ up to .NET 10.0) source: README
    Specification format
    Gherkin feature files with Given-When-Then scenarios source: README
    Parallel or distributed execution
    In-process parallel runs: scenario level on NUnit, MSTest, TUnit; feature level on xUnit source: Docs: Parallel Execution
    CI integration
    Build metadata from Azure Pipelines, TeamCity, Jenkins, GitHub Actions, GitLab CI and others source: Docs: Build Metadata Provider
    Report formats
    HTML and Cucumber Messages formatters (Reqnroll v3.0 or later) source: Docs: Reqnroll formatters
    Install method
    NuGet: Reqnroll.NUnit, Reqnroll.MsTest, Reqnroll.xUnit or Reqnroll.TUnit source: README
  12. Serenity BDD

    Acceptance testing library that turns Cucumber and JUnit test results into living-documentation reports. README, read 2026-09-22

    Languages for writing tests
    Java (Java 17 or higher) source: Docs: Serenity BDD with Cucumber
    Specification format
    Cucumber scenarios or JUnit 4 or 5 tests source: Docs: Introduction
    Parallel or distributed execution
    Parallel Cucumber scenarios on JUnit 5 (cucumber.execution.parallel.enabled) with SerenityReporterParallel source: Docs: Serenity BDD with Cucumber
    Report formats
    Serenity reports, single-page report, JSON summary report, navigator report modules source: Docs: Using Maven with Serenity
    Install method
    Maven dependencies (Serenity BOM, serenity-junit5) plus serenity-maven-plugin source: Docs: Using Maven with Serenity
  13. JBehave

    Behavior-driven development framework for Java and JVM languages such as Groovy, Kotlin, Ruby and Scala. README, read 2026-09-22

    Languages for writing tests
    Java and other JVM languages (Groovy, Kotlin, Ruby, Scala) source: README
    Specification format
    Plain-text .story files with Given/When/Then steps mapped to annotated Java methods source: Docs: Getting Started
    Parallel or distributed execution
    Concurrent story execution through the Embedder, with a configurable thread count source: Docs: Multi-Threading
    Report formats
    Console, TXT, HTML, HTML template, XML source: Docs: Reporting Stories
    Install method
    Maven POM dependency (jbehave-core module) source: Docs: Dependencies

Comparisons in this category