freshcrate
Skin:/
Home > Frameworks > behave

behave

behave is behaviour-driven development, Python style

Why this rank:Strong adoptionRelease freshnessHealthy release cadence

Description

====== behave ====== .. |badge.latest_version| image:: https://img.shields.io/pypi/v/behave.svg :target: https://pypi.python.org/pypi/behave :alt: Latest Version .. |badge.license| image:: https://img.shields.io/pypi/l/behave.svg :target: https://pypi.python.org/pypi/behave/ :alt: License .. |badge.CI_status| image:: https://github.com/behave/behave/actions/workflows/test.yml/badge.svg :target: https://github.com/behave/behave/actions/workflows/test.yml :alt: CI Build Status .. |badge.docs_status| image:: https://readthedocs.org/projects/behave/badge/?version=latest :target: https://behave.readthedocs.io/en/latest/?badge=latest :alt: Documentation Status .. |badge.discussions| image:: https://img.shields.io/badge/chat-github_discussions-darkgreen :target: https://github.com/behave/behave/discussions :alt: Discussions at https://github.com/behave/behave/discussions .. |badge.gitter| image:: https://badges.gitter.im/join_chat.svg :target: https://app.gitter.im/#/room/#behave_behave:gitter.im :alt: Chat at https://gitter.im/behave/behave .. |badge.gurubase| image:: https://img.shields.io/badge/Gurubase-Ask%20behave%20Guru-006BFF :target: https://gurubase.io/g/behave :alt: Ask behave Guru at https://gurubase.io/g/behave .. |logo| image:: https://raw.github.com/behave/behave/master/docs/_static/behave_logo1.png |badge.latest_version| |badge.license| |badge.CI_status| |badge.docs_status| |badge.discussions| |badge.gitter| |badge.gurubase| behave is behavior-driven development, Python style. |logo| Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or business participants in a software project. *behave* uses tests written in a natural language style, backed up by Python code. First, `install *behave*.`_ Now make a directory called "features/". In that directory create a file called "example.feature" containing: .. code-block:: gherkin # -- FILE: features/example.feature Feature: Showing off behave Scenario: Run a simple test Given we have behave installed When we implement 5 tests Then behave will test them for us! Make a new directory called "features/steps/". In that directory create a file called "example_steps.py" containing: .. code-block:: python # -- FILE: features/steps/example_steps.py from behave import given, when, then, step @given('we have behave installed') def step_impl(context): pass @when('we implement {number:d} tests') def step_impl(context, number): # -- NOTE: number is converted into integer assert number > 1 or number == 0 context.tests_count = number @then('behave will test them for us!') def step_impl(context): assert context.failed is False assert context.tests_count >= 0 Run behave: .. code-block:: console $ behave Feature: Showing off behave # features/example.feature:2 Scenario: Run a simple test # features/example.feature:4 Given we have behave installed # features/steps/example_steps.py:4 When we implement 5 tests # features/steps/example_steps.py:8 Then behave will test them for us! # features/steps/example_steps.py:13 1 feature passed, 0 failed, 0 skipped 1 scenario passed, 0 failed, 0 skipped 3 steps passed, 0 failed, 0 skipped, 0 undefined Now, continue reading to learn how to get the most out of *behave*. To get started, we recommend the `tutorial`_ and then the `feature testing language`_ and `api`_ references. .. _`Install *behave*.`: https://behave.readthedocs.io/en/stable/install/ .. _`tutorial`: https://behave.readthedocs.io/en/stable/tutorial/ .. _`feature testing language`: https://behave.readthedocs.io/en/stable/gherkin/ .. _`api`: https://behave.readthedocs.io/en/stable/api/ More Information ------------------------------------------------------------------------------- * `behave documentation`_: `latest edition`_, `stable edition`_, `PDF`_ * `behave.example`_: Behave Examples and Tutorials (docs, executable examples). * `changelog`_ (latest changes) .. _behave documentation: https://behave.readthedocs.io/ .. _changelog: https://github.com/behave/behave/blob/main/CHANGES.rst .. _behave.example: https://github.com/behave/behave.example .. _`latest edition`: https://behave.readthedocs.io/en/latest/ .. _`stable edition`: https://behave.readthedocs.io/en/stable/ .. _PDF: https://behave.readthedocs.io/_/downloads/en/latest/pdf/

Release History

VersionChangesUrgencyDate
1.3.3Imported from PyPI (1.3.3)Low4/21/2026
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.3FIXED: * issue #1270: v1.3.2: Broke Python 2.7 support (submitted by: silent-observer) Low9/4/2025
v1.3.2CHANGED: * Recursive discovery and import in `steps` directory is now disabled by default. An expert user can enable this feature again (if he/she knows what he/she is doing). RELATED TO: #1210 -- Multiple, nested steps directories under steps directory. - REASON: Too many problems w/ Python packages using relative-imports in the `steps` directory. - BEST PRACTICE: Put a Python package or step-library on the Python search path, but not in the `steps` directory. DOCUMENTATION:Low8/29/2025
v1.3.1FIXED: * issue #1255: ImportError: cannot import name 'asynccontextmanager' not found in python 3.6 (submitted by: rzuckerm) * issue #1239: AmbiguousStep error on step import with "re" step-matcher (submitted by: VolodymyrDan00) DOCUMENTATION: * Appendix: Add section with description of "Runners" extension point. * Appendix: Add section with "Cucumber-Expressions". * pull #1256: docs: userdata (provided by: Therdel, fixes: #1234) * issue #1234: userdata_defines configuration file pLow8/11/2025
v1.3.0* Gherkin v6 support * Native support for `cucumber-expressions` as step matcher * Native support for `async-steps` * Support for `tag-expressions v2` * Distinguish in outcome between failures (`assert-failed`) and errors (`unexpected exceptions` at runtime) * Improved captured-output support * Improved logging support and log-to-file support * And many things more ... CHANGELOG: * [v1.3.0](https://github.com/behave/behave/blob/main/CHANGES.rst#version-130-2025-08-04) * [v1.2.7](htLow8/4/2025
v1.2.7.dev8* FIX #1251: Installation with pip does not install dependenciesLow7/16/2025
v1.2.7.dev7ENHANCEMENTS: * async-steps: Support async-step functions directly * async-steps: Add test from PR #1249 (provided by: jeteve) * ActiveTags: Add support to override an enabled active-tag * Feature: Improved capture support * issue #1246 ScenarioOutline: Placeholders in Examples.tags * Improve logging support, simplify logging to file (releated to; issue #948) * Support for Python 3.13 CHANGES: * In behave: Replace assert statements w/ require statements/calls * FIX: Spelling mistLow7/15/2025
v1.2.7.dev6* Status: Distinguish between failures and errors * Pending steps * Support for cucumber-expressions * Use StepNotImplementedError (was: NotImplementedError) * ADDED: steps.code formatter -- Shows steps with code-section. * ... ISSUES: * issue #1047: Step type is inherited for generic step if possible (submitted by: zettseb) * ... BACKWARD INCOMPATIBLE: * parser: No longer strips trailing colon from steps with text/table section.Low9/24/2024
v1.2.7.dev4behave: * CLEANUP: configuration -- tag_expression_protocol, show_bad_formats() * CLEANUP: configuration -- Refactor internals to make it more readable * REFACTOR: behave.matchers (StepMatcherFactory, ...) * NEW: behave.api.step_matchers * UPDATE: gherkin-languages.json / behave.i14n (language=be was added) * Use assertpy as assert-matcher (in some cases) * FIXED #1116: behave erroring in pretty format in pyproject.toml * FIXED #1120: Logging ignoring level set in setup_logging (submitLow7/12/2023
v1.2.7.dev3For details, see [CHANGES.rst](https://github.com/behave/behave/blob/main/CHANGES.rst#version-127-unreleased).Low7/9/2023

Dependencies & License Audit

Loading dependencies...

Similar Packages

robotframeworkGeneric automation framework for acceptance testing and robotic process automation (RPA)7.4.2
tqdmFast, Extensible Progress Meterv4.68.1
inspect-aiFramework for large language model evaluationsmain@2026-06-05
hypothesisThe property-based testing library for Pythonv6.155.2
bleachAn easy safelist-based HTML-sanitizing tool.main@2026-06-05

More in Frameworks

langchainThe agent engineering platform
deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of ta
tqdmFast, Extensible Progress Meter
simBuild, deploy, and orchestrate AI agents. Sim is the central intelligence layer for your AI workforce.