Skip to main content

Behave Modern Console Report

PyPI Python CI License

A modern console report formatter for Behave that provides rich terminal output with colors, progress indicators, execution summaries, timings, and failure diagnostics.

Inspired by modern developer tools such as Playwright CLI, pytest, and Cargo.

Table of Contents

Features

  • Six formatters: modern, modern-live, progress, log, ci, and minimal — each designed for a different use case.
  • Real-time output: Live scenario status updates as tests execute.
  • Progress bar: Completion percentage and scenario count during execution.
  • Colored status icons: Unicode icons (✓ ✗ ⏭ ? P) with color-coded results via Rich.
  • Failure diagnostics: Scenario name, error type, short message, and optional traceback.
  • Per-formatter configuration: mcr.<formatter>.<key> with global mcr.<key> fallback.
  • CI-friendly: The ci formatter produces compact, log-friendly output with colored status tags.
  • Lightweight: Only rich and colorama as dependencies.
  • Cross-platform: Works on Windows, macOS, and Linux.

Formatters

Formatter Description Best for
modern Playwright-like report with feature grouping, scenario/step lines, and end-of-run summary. Local development.
modern-live Live-updating version of modern using Rich Live for real-time status colors. Interactive terminals.
progress Single-line live progress bar that updates in place. Quick runs, overview.
log Timestamped log output for every completed scenario and step. CI logs, debugging.
ci CI-friendly output with colored status tags and end-of-run failure summary. CI/CD pipelines.
minimal Plain text output with only scenario names and a final summary. Minimal noise, piping.

Formatter examples

modern — grouped by feature with steps:

Feature: Authentication

  ✓ Login  (602ms)
    ✓ Given I am on the login page
    ✓ When I enter valid credentials
    ✓ Then I should be logged in

  ✗ Locked account shows error  (604ms)
    ✓ Given I am on the login page
    ✗ When I enter credentials for a locked account
    ✗ Then I should see an error message

RESULTS

  Passed   18
  Failed   1
  Skipped  1

  ⏱ Duration 9.1s

progress — single-line live update:

████████████████████ 100% 20/20 - done

log — timestamped lines:

2026-06-30 12:00:01 [PASS] Login (602ms)
2026-06-30 12:00:02 [FAIL] Locked account shows error (604ms)
2026-06-30 12:00:02 [SKIP] Login with social provider (0ms)

ci — colored status tags:

PASS  Login (602ms)
FAIL  Locked account shows error (604ms)
SKIP  Login with social provider (0ms)

████████████████████ 100% 20/20

RESULTS
  Passed   18
  Failed   1
  Skipped  1
  Duration 9.1s

minimal — plain text only:

Login
Locked account shows error
Login with social provider

Passed: 18  Failed: 1  Skipped: 1  Duration: 9.1s

Installation

Install from PyPI:

pip install behave-modern-console-report

Or install from source:

git clone https://github.com/MathiasPaulenko/behave-modern-console-report.git
cd behave-modern-console-report
pip install -e .

For development:

pip install -e ".[dev]"

Quick start

  1. Create or update behave.ini in your Behave project root:
[behave]
default_format=modern

[behave.formatters]
modern = behave_modern_console_report.formatters.modern:ModernFormatter
modern-live = behave_modern_console_report.formatters.modern_live:ModernLiveFormatter
progress = behave_modern_console_report.formatters.progress:ProgressFormatter
log = behave_modern_console_report.formatters.log:LogFormatter
ci = behave_modern_console_report.formatters.ci:CIFormatter
minimal = behave_modern_console_report.formatters.minimal:MinimalFormatter
  1. Run Behave:
behave

You can also select a formatter from the command line:

behave --format=modern-live

Or use the full module path without registering:

behave -f behave_modern_console_report.formatters.modern:ModernFormatter

Configuration

All options are passed through Behave's userdata mechanism. Add a [behave.userdata] section to behave.ini:

[behave.userdata]
mcr.colors = true
mcr.show_steps = true
mcr.show_traceback = true

Each formatter reads its own mcr.<formatter>.<key> namespace with fallback to global mcr.<key> keys. The show_progress option is formatter-specific (no global fallback).

Option Default Description
mcr.colors true Enable/disable colored output.
mcr.show_steps true Show step-level details.
mcr.show_traceback true Show tracebacks for failed steps.
mcr.<formatter>.show_progress true Show progress bar (formatter-specific, no global fallback).

Override from the command line:

behave --format=modern -D mcr.colors=false -D mcr.show_steps=false

See docs/configuration.md for the full reference.

Example output

🚀 Behave Modern Console Report

Feature: Authentication

  ✓ Login  (602ms)
  ✗ Locked account shows error  (604ms)
  ⏭ Login with social provider  (0ms)

RESULTS

  Passed   18
  Failed   1
  Skipped  1

  ⏱ Duration 9.1s

CI/CD

The ci formatter is designed for CI pipelines — compact, colored status tags, and a final failure summary.

behave --format=ci -D mcr.colors=false

GitHub Actions

name: Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install -e ".[dev]"
      - run: behave --format=ci -D mcr.colors=false

Combining with the Markdown report

Show console output and generate a Markdown report at the same time:

behave -f ci -o /dev/null -f behave_modern_md_report.formatter:BehaveMarkdownFormatter -o report.md

See docs/ci-cd.md for GitLab CI, Azure DevOps, and Jenkins examples.

Architecture

Behave → BaseFormatter → Collector → Models → Render → Console
Layer File Responsibility
BaseFormatter base.py Receives Behave events and forwards them to the Collector.
Collector collector.py Builds the Execution model from Behave objects.
Models models.py Pure dataclasses for Execution, Feature, Scenario, Step, and Error.
Render render.py Converts the model into Rich Text objects for terminal output.
Formatters formatters/ Each formatter renders the model differently.
Config config.py Resolves per-formatter and global settings from Behave user data.

See docs/architecture.md for details.

Documentation

Development

pytest
ruff check .
mypy behave_modern_console_report

Changelog

See CHANGELOG.md.

License

MIT

Release files for behave-modern-console-report 1.0.1

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-modern-console-report 1.0.1
File Size Uploaded
behave_modern_console_report-1.0.1.tar.gz 25.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for behave-modern-console-report 1.0.1
File Interpreter ABI Platform
behave_modern_console_report-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 45.9 kB

Release files / behave_modern_console_report-1.0.1.tar.gz

Download URL behave_modern_console_report-1.0.1.tar.gz
Size 25.3 kB
Tags Source
SHA-256 checksum
How to use checksums
af14b903f5f65584b6dadec30cf3c53160175f0b471987a136c0795f65d4165d
BLAKE2b-256 checksum
How to use checksums
56758bf02c44097acebb269a4bca330994c3025d4e21889dd580eb2bf8b8cfe0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jul 1, 2026.

Transparency log

Release files / behave_modern_console_report-1.0.1-py3-none-any.whl

Download URL behave_modern_console_report-1.0.1-py3-none-any.whl
Size 20.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
add400d8749c5b366ccbfdc0e1ba25e841184c2e4c4867effba0be0e71dc0c63
BLAKE2b-256 checksum
How to use checksums
b7fe3797be8aff09b7589bb4f01f90aa0506d5f0796761be611ea0c09828e95d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jul 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.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