A useful test report should explain failures without changing what the runner considers a failure. The latest release hardens report lifecycle and rendering, fixes async step reporting, and documents the difference between an offline-readable file and its online interactive enhancements.
One test, one result
The pytest integration accounts for setup, call, and teardown failures in one test result. The unittest wrapper preserves the runner’s exit status and records failures, errors, skips, subtests, expected failures, and unexpected successes. Report styling must never turn a failed run into a passing command.
python -m pip install "pytest-glow-report[pytest]==0.1.3"
pytest
# Open reports/report.html; JSON and history are in the same directory.Attach evidence during the test
from beautiful_report import report
@report.step('Open login page')
def open_login(driver):
driver.get('https://test.example.com/login')
def test_login_title(driver):
open_login(driver)
report.screenshot('login page', driver=driver)
assert 'Sign in' in driver.titleThe example assumes your suite provides a driver fixture. Context API calls attach to a report only during an active test. Synchronous and asynchronous step decorators record duration and status, then re-raise exceptions so the runner sees the failure.
Offline readability and interactive enhancements
HTML reports have fallback styling for offline reading. Full styling and interactive filtering use Tailwind CSS and Alpine.js from public CDNs, so those enhancements need network access. The report is a file you can share, but it is not a fully dependency-free offline dashboard.
Control report output in CI
pytest --report-dir=artifacts/glow
# Disable only when intentionally running without this report:
pytest --no-glow-report
# unittest uses the installed wrapper:
glow-report run -- unittest discover -s testsUpload reports even when tests fail. Preserve the report directory if you want history across runs; a new ephemeral directory cannot contain earlier SQLite history. Avoid multiple workers or jobs writing the same report directory unless your integration explicitly coordinates them.
A score is not release approval
A summary score reflects recorded test outcomes. It cannot measure unknown requirements, missing tests, unobserved failures, or the business impact of a defect. Use it to navigate evidence and trends, then make release decisions with coverage and risk in view.
Inspect the portfolio project proof and the repository’s current configuration guide for supported hooks and environment variables.

