NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2044 most downloaded on PyPI
behave is behaviour-driven development, Python style
Last release 1 years ago
04 Sep 2025
Ships unpredictably
gaps range from 3 weeks to 6.6 years
Nearly every release is documented
notes for 13 of 13 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
15 releases · first in 2011
issue #1270 : v1.3.2: Broke Python 2.7 support (submitted by: silent-observer)
FIXED:
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/sh
CHANGED:
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.
steps directory.steps directory.DOCUMENTATION:
DEVELOP:
CI:
One column per quarter.
issue #1255 : ImportError: cannot import name 'asynccontextmanager' not found in python 3.6 (submitted by: rzuckerm)
Native support for cucumber-expressions as step matcher
cucumber-expressions as step matcherasync-stepstag-expressions v2assert-failed) and errors (unexpected exceptions at runtime)CHANGELOG:
HINT:
BASED ON: Version 1.2.7 changes
GOALS:
Will be released on https://pypi.org
Include all changes from behave v1.2.7 development
Last version minor version with Python 2.7 support
tag-expressions v2: Enabled by default ("strict" mode: only v2 supported).
BUT: Can be enabled via config-file parameter in "any" mode (supports: v1 and v2).
FIX #1251 : Installation with pip does not install dependencies
Status: Distinguish between failures and errors
ISSUES:
BACKWARD INCOMPATIBLE:
issue #582: behave emitting PendingDeprecationWarning messages (submitted by: adamjcooper)
GOALS:
Improve support for Windows
DOCUMENTATION:
issue #625: Formatter documentation is inaccurate for some methods (reported by: throwable-one)
pull #618: Fix a typo in the background section of gherkin docs (provided by: mrrn)
pull #609: Describe execute_steps() behaviour correctly (provided by: mixxorz)
pull #603: Update typo tutorial.rst (provided by: fnaval)
pull #601: Add Flask integration chapter to documentation (provided by: bittner)
pull #580: Fix some dead ecosystem links (provided by: smadness)
pull #579: Add explanation for step_impl function name (provided by: bittner)
issue #574: flake8 reports F811 redefinition of unused 'step_impl' (fixed by #579).
pull #545: Spell "section" correctly (provided by: chelmertz)
pull #489: Fix link to Selenium docs in Django chapter (provided by: bittner)
pull #469: Fix typo in "formatters.rst" (provided by: ab9-er)
pull #443: Fixing grammar in philosophy.rst (provided by: jamesroutley)
pull #441: Integrate hint on testing more nicely (provided by: bittner)
pull #429: Replace "Manual Integration" by "Automation Libraries" section (provided by: bittner)
pull #379: Correct wording in README.rst (provided by: franklinchou)
pull #362: docs/tutorial.rst: fixed non-monospace font (provided by: spacediver)
pull #359: Update documentation related to Django (behave-django) (provided by: bittner)
pull #326: docs/tutorial.rst: Correct features directory path creation (provided by: memee)
issue #356: docs/api.rst: type in implementation (submitted by: tomxtobin)
pull #335: docs/api.rst: execute_steps() example (provided by: miabbott)
pull #339: Adapt wording in install.rst (provided by: charleswhchan)
pull #338: docs/philosophy.rst: Correct to uppercase in example (provided by: charleswhchan)
issue #323: Update Django Example to work with version >=1.7 (submitted by: mpetyx, provided by: bittner)
pull #327: Fix typo in Django doc (provided by: nikolas)
pull #321: Update Django integration (provided by: bittner, contains: #315, #316)
FIX: cmdline/config-param doc-generator, avoid duplicated param entries (related to: #318)
issue #317: Update comparison: lettuce tags (provided by: ramiabughazaleh)
pull #307: Typo in readme (provided by: dflock)
pull #305: behave.rst related fixes reapplied (provided by: bittner)
pull #292: Use title-cased keywords in tutorial scenario (provided by: neoblackcap)
pull #291: Tiny tweaks in tutorial docs (provided by: bernardpaulus)
SITE:
pull #626: Formatting issue in stale-bot config (provided by: teapow)
pull #343: Update/fix badges in README (provided by: mixxorz)
ENHANCEMENTS:
fixtures: Add concept to simplify setup/cleanup tasks for scenario/feature/test-run
context-cleanups: Use context.add_cleanup() to perform cleanups after scenario/feature/test-run.
Tagged Examples: Examples in a ScenarioOutline can now have tags.
pull #596: Add missing Czech translation (provided by: hason)
pull #554: Adds galician language (provided by: carlosgoce)
pull #447: behave settings from tox.ini (provided by: bittner)
issue #411: Support multiple active-tags with same category (submitted by: Kani999)
issue #409: Support async/@asyncio.coroutine steps (submitted by: dcarp)
issue #357: Add language attribute to Feature class
pull #328: Auto-retry failed scenarios in unreliable environment (provided by: MihaiBalint, robertknight)
issue #302: Support escaped-pipe in Gherkin table cell value (provided by: connorsml, pull #360)
issue #301: Support default tags in configfile
issue #299: Runner can continue after a failed step (same as: #314)
issue #197: Hooks processing should be more exception safe (provided by: vrutkovs, jenisys, pull #205)
FORMATTERS:
pull #446: Remove Formatter scenario_outline(), examples() method (provided by: aisbaa, jenisys)
pull #448: json: Add status to scenarios in JSON report (provided by: remcowesterhoud)
issue #462: json: Invalid JSON output when no features are selected (submitted by: remcowesterhoud)
pull #423: sphinx.steps: Support ref link for each step (provided by: ZivThaller)
pull #460: pretty: Print the step implementation location when dry-run (provided by: unklhe, jenisys)
REPORTERS:
junit: Add timestamp and hostname attributes to testsuite XML element.
junit: Support to tweak output with userdata (experimental).
junit: Support scenario hook-errors with JUnitReporter (related to: #466)
CHANGES:
status: Use Status enum-class for feature/scenario/step.status (was: string)
hook-processing: Skips now feature/scenario/step if before-hook fails (related to: #454)
parser: language comment in feature file has higher priority than --lang option (related to: #334).
issue #385: before_scenario/before_feature called too late (submitted by: BRevzin)
FIXED:
issue #606: Using name option w/ special unicode chars (submitted by: alluir42)
issue #547: Crash when using step definition with optional cfparse parts (provided by: ftartaggia, jenisys)
pull #599: Steps from another Windows drive (provided by: psicopep)
issue #582: behave emitting PendingDeprecationWarning messages (submitted by: adamjcooper)
pull #476: scenario.status when scenario without steps is skipped (provided by: ar45, jenisys)
pull #471: convert an object to unicode (py2) using __unicode__ method first unicode (provided by: ftartaggia)
issue #458: UnicodeEncodeError inside naked except block in __main__.py (submitted by: mseery)
issue #453: Unicode chars are broken in stacktrace (submitted by: throwable-one)
issue #455: Restore backward compatibility to Cucumber style RegexMatcher (submitted by: avabramov)
issue #449: Unicode is processed incorrectly for Py2 in "textutil.text" (submitted by: throwable-one)
issue #446: after_scenario HOOK-ERROR asserts with jUnit reporter (submitted by: lagin)
issue #424: Exception message with unicode characters in nested steps (submitted by: yucer)
issue #416: JUnit report messages cut off (submitted by: remcowesterhoud, provided by: bittner)
issue #414: Support for Jython 2.7 (submitted by: gabtwi...)
issue #384: Active Tags fail with ScenarioOutline (submitted by: BRevzin)
issue #383: Handle (custom) Type parsing errors better (submitted by: zsoldosp)
pull #382: fix typo in tag name (provided by: zsoldosp)
issue #361: utf8 file with BOM (provided by: karulis)
issue #349: ScenarioOutline skipped with --format=json
issue #336: Stacktrace contents getting illegal characters inserted with text function (submitted by: fj40bryan)
issue #330: Skipped scenarios are included in junit reports when --no-skipped is specified (provided by: vrutkovs, pull #331)
issue #320: Userdata is case-insensitive when read from config file (provided by: mixxorz)
issue #319: python-version requirements in behave.whl for Python2.6 (submitted by: darkfoxprime)
issue #310: Use setuptools_behave.py with behave module
issue #309: behave --lang-list fails on Python3 (and Python2)
issue #300: UnicodeDecodeError when read steps.py (similar to: #361)
issue #288: Use print function instead print statement in environment/steps files
:Same as: Version 1.2.5a1 (unreleased).
NEWS and CHANGES:
General:
Improve support for Python3 (py3.3, py3.4; #268)
Various unicode related fixes (Unicode errors with non-ASCII, etc.)
Drop support for Python 2.5
Running:
ScenarioOutline: Annotates name with row.id, ... to better represent row.
NEW: Active Tags, see docs (New and Noteworthy).
NEW: Test stages, see docs (New and Noteworthy).
NEW: User-specific configuration data, see docs (New and Noteworthy).
CHANGED: Undefined step snippet uses now NotImplementedError (related to: #254)
Model:
ScenarioOutline: Various improvements, see docs (New and Noteworthy).
Formatters:
plain: Can now show tags, but currently disabled per default
NEW: steps.catalog: Readable summary of all steps (similar to: steps.doc, #271)
NEW: User-defined formatters, see docs (New and Noteworthy).
ENHANCEMENTS:
pull #285: Travis CI improvements to use container environment, etc. (provided by: thedrow)
pull #272: Use option role to format command line arg docs (provided by: helenst)
pull #271: Provide steps.catalog formatter (provided by: berdroid)
pull #261: Support "setup.cfg" as configuration file, too (provided by: bittner)
pull #260: Documentation tweaks and typo fixes (provided by: bittner)
pull #254: Undefined step raises NotImplementedError instead of assert False (provided by: mhfrantz)
issue #242: JUnitReporter can show scenario tags (provided by: rigomes)
issue #240: Test Stages with different step implementations (provided by: attilammagyar, jenisys)
issue #238: Allow to skip scenario in step function (provided by: hotgloupi, jenisys)
issue #228: Exclude scenario from run (provided by: jdeppe, jenisys)
issue #227: Add a way to add command line options to behave (provided by: attilammagyar, jenisys)
FIXED:
pull #283: Fix "fork me" image in docs (provided by: frodopwns)
issue #280: Fix missing begin/end-markers in RegexMatcher (provided by: tomekwszelaki, jenisys)
pull #268: Fix py3 compatibility with all tests passed (provided by: sunliwen)
pull #252: Related to #251 (provided by: mcepl)
pull #190: UnicodeDecodeError in tracebacks (provided by: b3ni, vrutkovs, related to: #226, #230)
issue #257: Fix JUnitReporter (XML) for Python3 (provided by: actionless)
issue #249: Fix a number of docstring problems (provided by: masak)
issue #253: Various problems in PrettyFormatter.exception()
issue #251: Unicode crash in model.py (provided by: mcepl, jenisys)
issue #236: Command line docs are confusing (solved by: #272)
issue #230: problem with assert message that contains ascii over 128 value (provided by: jenisys)
issue #226: UnicodeDecodeError in tracebacks (provided by: md1023, karulis, jenisys)
issue #221: Fix some PY2/PY3 incompatibilities (provided by: johbo)
pull #219: IDE's unknown modules import issue (provided by: xbx)
issue #216: Using --wip option does not disable ANSI escape sequences (coloring).
issue #119: Python3 support for behave (solved by: #268 and ...)
issue #82: JUnitReporter fails with Python 3.x (fixed with: #257, #268)
:Same as: Version 1.2.4a1 (unreleased).
NEWS and CHANGES:
Running:
ABORT-BY-USER: Better handle KeyboardInterrupt to abort a test run.
feature list files (formerly: feature configfiles) support wildcards.
Simplify and improve setup of logging subsystem (related to: #143, #177)
Step matchers:
cfparse: Step matcher with "Cardinality Field" support (was: optional).
Formatters:
steps.usage: Avoid duplicated steps usage due to Scenario Outlines.
json: Ensures now that matched step params (match args) cause valid JSON.
IMPROVEMENT:
issue #108: behave.main() can be called with command-line args (provided by: medwards, jenisys)
issue #172: Subfolders in junit XML filenames (provided by: roignac).
issue #203: Integration with pdb (debug on error; basic support)
Simple test runner to run behave tests from "setup.py"
FIXED:
issue #143: Logging starts with a StreamHandler way too early (provided by: jtatum, jenisys).
issue #175: Scenario isn't marked as 'failed' when Background step fails
issue #177: Cannot setup logging_format
issue #181: Escape apostrophes in undefined steps snippets
issue #184: TypeError when running behave with --include option (provided by: s1ider).
issue #186: ScenarioOutline uses wrong return value when if fails (provided by: mdavezac)
issue #188: Better diagnostics if nested step is undefined
issue #191: Using context.execute_steps() may change context.table/.text
issue #194: Nested steps prevent that original stdout/stderr is restored
issue #199: behave tag expression bug when or-not logic is used
Latest stable version. Same as last development version.
Latest stable version. Same as last development version.
Fix for an error when an assertion message contains Unicode characters.
Fix for an error when an assertion message contains Unicode characters.
Don't repr() the step text in snippets to avoid turning Unicode text into backslash hell.
Move summary reporter and snippet output to stderr.
Fixes for JSON output.
Move summary reporter and snippet output to stderr.
Changed step name provided in snippets to avoid issues with the @step decorator.
Changed step name provided in snippets to avoid issues with the @step decorator.
Use setup to create console scripts.
Fixed installation on Windows.
Fix ANSI escape sequences for cursor movement and text colourisation.
Fixes for various command-line argument issues.
Only print snippets once per unique step.
Reworked logging capture.
Fixes for dry-run mode.
General fixes.
Context variable now contains current configuration.
Context variable now contains current configuration.
Context values can now be tested for (name in context) and deleted.
__file__ now available inside step definition files.
Fixes for various formatting issues.
Add support for configuration files.
Add finer-grained controls for various things like log capture, coloured output, etc.
Fixes for tag handling.
Various documentation enhancements, including an example of full-stack testing with Django thanks to David Eyk.
Split reports into a set of modules, add junit output.
Added work-in-progress ("wip") mode which is useful when developing new code or new tests. See documentation for more details.
* Initial release
Initial release
Your coding agent can read these notes before it upgrades. Set up the MCP server →