Behave Modern Console Report

July 1, 2026 · View on GitHub

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

FormatterDescriptionBest for
modernPlaywright-like report with feature grouping, scenario/step lines, and end-of-run summary.Local development.
modern-liveLive-updating version of modern using Rich Live for real-time status colors.Interactive terminals.
progressSingle-line live progress bar that updates in place.Quick runs, overview.
logTimestamped log output for every completed scenario and step.CI logs, debugging.
ciCI-friendly output with colored status tags and end-of-run failure summary.CI/CD pipelines.
minimalPlain 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).

OptionDefaultDescription
mcr.colorstrueEnable/disable colored output.
mcr.show_stepstrueShow step-level details.
mcr.show_tracebacktrueShow tracebacks for failed steps.
mcr.<formatter>.show_progresstrueShow 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
LayerFileResponsibility
BaseFormatterbase.pyReceives Behave events and forwards them to the Collector.
Collectorcollector.pyBuilds the Execution model from Behave objects.
Modelsmodels.pyPure dataclasses for Execution, Feature, Scenario, Step, and Error.
Renderrender.pyConverts the model into Rich Text objects for terminal output.
Formattersformatters/Each formatter renders the model differently.
Configconfig.pyResolves 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