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
| Robot Framework | 11,9061 | 2026-09-141v7.5 | 2026-09-211 | Apache-2.0 | Python | active |
|---|---|---|---|---|---|---|
| cucumber-js | 5,3941 | 2026-08-041v13.2.1 | 2026-09-221 | MIT | TypeScript | active |
| cucumber-ruby | 5,2121 | 2026-06-251v11.1.1 | 2026-09-181 | MIT | Ruby | active |
| Codeception | 4,8571 | 2026-02-1815.3.5 | 2026-08-061 | MIT | PHP | active |
| Behat | 3,9701 | 2026-09-071v3.33.0 | 2026-09-181 | MIT | PHP | active |
| behave | 3,5291 | 2025-09-041v1.3.3 | 2026-09-211 | BSD-2-Clause | Python | active |
| Gauge | 3,1891 | 2026-09-161v1.6.38 | 2026-09-161 | Apache-2.0 | Go | active |
| Cucumber JVM | 2,8351 | 2026-09-221v7.34.9 | 2026-09-221 | MIT | Java | active |
| Godog | 2,6731 | 2026-07-311v0.16.0 | 2026-09-181 | MIT | Go | active |
| pytest-bdd | 1,4661 | 2024-09-261publish-test-pypi | 2026-09-141 | MIT | Python | active |
| Reqnroll | 7871 | 2026-03-231v3.3.4 | 2026-08-261 | BSD-3-Clause | C# | active |
| Serenity BDD | 7551 | 2024-01-1014.0.1 | 2026-09-101 | Apache-2.0 | HTML | active |
| JBehave | 411 | 2023-09-251jbehave-5.2.0 | 2026-03-051 | BSD-3-Clause | Java | slow |
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.
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
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
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
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
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
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
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
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
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
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
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
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
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