Beautiful terminal and HTML output for pytest-describe.
Transforms pytest-describe's nested test hierarchy into formatted, readable output with real-time results, tree summaries, and self-contained HTML reports.
pip install pytest-describe-beautifullyRequires Python 3.11+ and pytest-describe 2.0+.
# Enable beautiful terminal output
pytest --describe-beautifully
# Short form
pytest --db
# Generate an HTML report alongside terminal output
pytest --db --describe-html report.htmlThe plugin only activates when --describe-beautifully (or --db) is passed. Without it, pytest behaves as normal.
With --db, test results print in real time as they complete, followed by a tree summary at the end:
Calculator
add
✓ it adds two numbers (3ms)
✓ it handles negatives (1ms)
divide
✓ it divides evenly (2ms)
✗ it raises on zero (1ms)
Summary
┌ Calculator (3/4 passed, 7ms)
├─┬ add (2/2 passed, 4ms)
│ ├── ✓ it adds two numbers (3ms)
│ └── ✓ it handles negatives (1ms)
└─┬ divide (1/2 passed, 3ms)
├── ✓ it divides evenly (2ms)
└── ✗ it raises on zero (1ms)
| Symbol | Meaning |
|---|---|
| ✓ | Passed |
| ✗ | Failed |
| ○ | Skipped |
| ⊘ | Expected failure (xfail) |
| ✗! | Unexpected pass (xpass) |
| ☠ | Error (setup/teardown) |
Tests exceeding the slow threshold get a ⏱ marker:
# Default threshold is 0.5s
pytest --db --describe-slow 1.0Show docstrings and fixtures inline:
pytest --db --describe-expand-allCalculator
add
✓ it adds two numbers (3ms)
Verifies basic addition of positive integers
🔧 calculator, sample_data
Hide fixtures while keeping docstrings:
pytest --db --describe-expand-all --describe-no-fixturesGenerate a self-contained HTML file with no external dependencies:
pytest --db --describe-html report.htmlThe report includes:
- Summary badges -- total tests, passed, failed, skipped, and duration
- Collapsible describe blocks -- click to expand/collapse, blocks with failures open automatically
- Interactive controls -- Expand All, Collapse All, and Show Failed Only
- Test details -- outcome, duration, docstrings, fixtures, and full failure tracebacks
- Dark theme with semantic color coding
| Flag | Default | Description |
|---|---|---|
--describe-beautifully / --db |
off | Enable the plugin |
--describe-slow SECONDS |
0.5 | Slow test threshold |
--describe-expand-all |
off | Show docstrings and fixtures inline |
--describe-no-fixtures |
off | Hide fixtures in expanded mode |
--describe-html PATH |
-- | Generate an HTML report at PATH |
The plugin humanizes pytest-describe's naming conventions:
describe_MyClassbecomes MyClass (CamelCase preserved)describe_my_featurebecomes my featureit_does_somethingbecomes it does somethingthey_are_equalbecomes they are equal
# Install in development mode
pip install -e ".[dev]"
# Run tests (100% branch coverage enforced)
python -m pytest
# Lint and format
python -m ruff check src/ tests/
python -m ruff format src/ tests/
# Mutation testing
mutmut runMIT