# Share a Behave HTML Report — BDD Results Your Product Owner Can Open

Canonical: https://commareports.com/share-behave-report
Published: 2026-08-31

> behave -f html writes one self-contained page of Gherkin scenarios and failures. Publish it to Comma so non-engineers can read the run and comment on a scenario.

# Share a Behave HTML report

Behave exists because a `.feature` file is meant to be readable by the person
who asked for the feature. Then the results of running those features get
written to `stdout` on a build agent, and the readable-by-anyone property
quietly evaporates.

## Write the HTML

```bash
pip install behave-html-formatter
behave -f html -o behave-report.html
```

The prettier variant, if you want collapsible scenarios and a summary bar:

```bash
pip install behave-html-pretty-formatter
behave -f html-pretty -o behave-report.html
```

Both write a single self-contained page — styling and scripts inlined — which
makes publishing a one-request job.

Keep a machine format alongside it if a dashboard needs one; Behave takes
multiple formatters:

```bash
behave -f html -o behave-report.html -f junit --junit-directory reports/
```

## Publish it

Drag the file into [the app](https://commareports.com/), or from CI:

```bash
curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile html behave-report.html \
        --arg title "Acceptance — $(git rev-parse --short HEAD)" \
        '{title: $title, html: $html}')"
```

Run the step with `if: always()` — Behave exits non-zero on a failing
scenario, and a failing scenario is the one the product owner needs to see.

## Screenshots from failing steps

If your `environment.py` attaches a screenshot on failure, upload those files
as assets with the report. Their `<img src="...">` references are rewritten to
the uploaded copies, so the evidence travels with the run instead of being a
path into a deleted workspace.

## What review adds

The reason to publish a BDD report rather than archive it:

- **Anchored threads** on the scenario — the specification conversation happens
  on the specification. See [commenting on HTML](/comment-on-html).
- **Revisions**, so "we changed that step last sprint" is checkable.
- **Access per report** — private, team, domain-gated, or named reviewers, so
  a stakeholder outside the engineering org can read it without a seat in your
  CI provider. See the [sharing model](/docs/sharing).

## Limits

- **Entry HTML: 5 MB.** Assets: 25 MB per file, 250 MB and 500 files total.
  Screenshot-heavy suites are the ones to watch.
- **60 requests/minute per token.**

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision
history.

**[Publish a test report →](https://commareports.com/)**

### Related

- [Share a Cucumber report](/share-cucumber-report) · [Share a pytest report](/share-pytest-report)
- [Share a Robot Framework report](/share-robot-framework-report) · [Share a Serenity report](/share-serenity-report)
- [Publish from CI](/docs/ci) · [Commenting on HTML](/comment-on-html)
