Skip to main content

behave-gen

A CLI toolkit for scaffolding and evolving Behave BDD projects.

CI Docs PyPI Python License Code style: ruff Types: mypy

behave-gen helps you create, extend, and maintain Behave (Python BDD) projects. It scaffolds new projects, generates .feature files and concrete step definitions, integrates ecosystem tools (behave-doctor, behave-lint, behave-format), and migrates Cucumber projects to Behave.

Features

Command Description
init Scaffold a new Behave project with sensible defaults.
add feature Generate .feature files from templates (default, CRUD).
add steps Add real, runnable step libraries (HTTP, auth) or generate steps from a wavexis recording (--from-recording). No empty skeletons.
add environment Rewrite environment.py with behave-kit/behave-data wiring.
add config Add ecosystem packages to pyproject.toml idempotently.
check Run behave-doctor diagnostics with actionable suggestions.
doctor Alias for check.
lint Lint .feature files via behave-lint.
format Format .feature files via behave-format.
from-openapi Generate features and HTTP steps from an OpenAPI 3.x spec.
from-postman Generate features from a Postman Collection v2.1.
from-swagger Convert Swagger 2.0 to OpenAPI 3.x and generate features.
migrate Migrate a Cucumber (Java) project to Behave.
preview Pretty-print a .feature file.
stats Report project statistics (features, scenarios, steps, tags).
update Re-apply generated environment and step libraries.

Installation

pip install behave-gen

Requirements

  • Python 3.11 or newer.
  • A working pip / venv environment.

Optional extras extend functionality as shown below.

With optional extras:

pip install behave-gen[doctor,lint,format,openapi]
pip install behave-gen[all]
Extra Provides
doctor behave-doctor — static analysis for check/doctor.
lint behave-lint — Gherkin linting for lint.
format behave-format — Gherkin formatting for format.
openapi pyyaml — YAML parsing for from-openapi.
swagger pyyaml — YAML parsing for from-swagger.
jinja2 jinja2 — alternative template engine.
kit behave-kit — environment hooks.
data behave-data — test data fixtures.
all All of the above.

Quick start

# Create a new Behave project
behave-gen init my-project
cd my-project

# Add a feature file
behave-gen add feature login

# Add HTTP step definitions
behave-gen add steps --lib http

# Generate steps from a wavexis recording
behave-gen add steps --from-recording recording.yaml

# Combine a step library with a recording (library first, then dedup)
behave-gen add steps --lib http --from-recording recording.yaml

# Check project health
behave-gen check

# Run tests
behave

Generating from an OpenAPI spec

behave-gen from-openapi spec.yaml --out-dir gen --step-lib http --tag api

This produces .feature files grouped by path, each with scenarios that use the HTTP step library syntax. The --step-lib http flag also generates a concrete, runnable http_steps.py module.

Generating steps from a wavexis recording

Use wavexis to record browser interactions, then generate Behave step definitions and a feature file from the recording:

# Record a flow with wavexis (produces recording.yaml)
# Then generate steps and a feature file:
behave-gen add steps --from-recording recording.yaml

This produces:

  • features/steps/recorded_steps.py — Python step definitions with real browser actions via context.page (Playwright/wavexis page object).
  • features/recorded.feature — a Gherkin feature file representing the recorded flow.

Supported action types: navigate, click (by selector or text), type, and scroll. Unsupported actions are silently skipped. Steps are deduplicated against existing step definitions in the project.

You can combine --from-recording with --lib to add a step library first, then generate recording-derived steps deduplicated against it.

Migrating from Cucumber

behave-gen migrate path/to/cucumber-project --out-dir migrated

Feature files are copied into a Behave features/ layout. Java step definitions are not auto-translated; use behave-gen add steps to generate Python equivalents.

Examples

The examples/ directory contains ready-to-run projects that demonstrate each workflow:

  • basic-projectinit + add feature + add steps with HTTP and auth step libraries.
  • openapi-projectfrom-openapi generating features and HTTP steps from a Petstore OpenAPI 3.0 spec.
  • migrated-projectmigrate converting a Cucumber (Java) project to Behave feature files.

See examples/README.md for details.

Architecture

behave_gen/
  cli/            Typer CLI application
  commands/       One module per CLI command
  generators/     Pluggable code generators (OpenAPI, Postman, Swagger)
  plugins/        Source-specific parsers and builders
  step_libraries/ Built-in step library templates (HTTP, auth)
  templates/      Project and feature templates
  config.py       [tool.behave-gen] configuration model
  diagnostics.py  Optional-dependency handling
  paths.py        Path resolution and validation helpers
  project.py      Project detection and state
  recording.py    Wavexis recording parser and step generator

Supply chain & trust

  • Trusted Publishing (OIDC) — releases to PyPI use Trusted Publishing via GitHub Actions OIDC. No long-lived API tokens are stored in secrets.
  • Pinned actions — all GitHub Actions are pinned to specific versions (e.g. @v7, @v1.14.1).
  • Minimal dependencies — only behave, behave-model, and typer at runtime. All other dependencies are optional extras.
  • py.typed marker — the package ships with inline type hints.
  • Reproducible buildshatchling build backend with no dynamic metadata.

Development

git clone https://github.com/MathiasPaulenko/behave-gen.git
cd behave-gen
pip install -e ".[dev,docs]"
pre-commit install
Command Description
make help Show all available targets.
make dev Install with dev extras.
make lint Run ruff check + mypy --strict.
make lint-fix Auto-fix lint issues.
make format Format the code with ruff format.
make format-check Verify formatting without changes.
make test Run the test suite.
make test-cov Run tests with coverage.
make build Build sdist + wheel into ref/output/dist/.
make docs Build documentation site.
make docs-serve Serve documentation locally.
make clean Remove build artifacts and caches.

See CONTRIBUTING.md for full guidelines.

Documentation

Full documentation, including the CLI reference, configuration guide, and Python API docs, is published at mathiaspaulenko.github.io/behave-gen.

Acknowledgements

  • Built on top of Behave and the Python packaging ecosystem.
  • Template and scaffolding patterns inspired by the Python open source community's emphasis on minimal, composable tools.

License

MIT

Release files for behave-gen 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for behave-gen 1.2.0
File Size Uploaded
behave_gen-1.2.0.tar.gz 107.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for behave-gen 1.2.0
File Interpreter ABI Platform
behave_gen-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 189.9 kB

Release files / behave_gen-1.2.0.tar.gz

Download URL behave_gen-1.2.0.tar.gz
Size 107.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6d3f5957c433ae3cc1064f2a31e0c7253f2efc52f729a3adf9235bcc79f38f4a
BLAKE2b-256 checksum
How to use checksums
21525c60d05be0f7c86340232636a546a08bf67a0db68ae70bfbc22649aeb0ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.

Transparency log

Release files / behave_gen-1.2.0-py3-none-any.whl

Download URL behave_gen-1.2.0-py3-none-any.whl
Size 82.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4a97a59ab5b33a68de2055fa67b2598bb5ec3eea23e959702f85342c28a5bd8a
BLAKE2b-256 checksum
How to use checksums
d1b9ecc01d04a9d0d26b7688c3d2a5cfc45d9342455f6ab63f7164d9d11e3163
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page