# Share a Serenity BDD Report — Screenshots, Drill-Down and All

Canonical: https://commareports.com/share-serenity-report
Published: 2026-08-28

> `mvn serenity:aggregate` writes target/site/serenity — hundreds of files whose whole value is the click-through. Publish the directory to Comma: one link, evidence intact, comments on the failing step.

# Share a Serenity BDD report

Serenity's output is unusually good and unusually hard to send. Two
commands produce it:

```bash
mvn clean verify
mvn serenity:aggregate
# → target/site/serenity/index.html
```

Gradle users get the same path — the Serenity plugin writes to
`target/site/serenity` rather than `build/reports`, which trips up
almost everyone once.

What's in there is a **site**: the summary, a page per requirement, a
page per test with the narrated step breakdown, the CSS and JS that make
the tabs work, and every screenshot the run captured. The narrative is
the product; a single `index.html` is a table of contents for files that
aren't there.

## Publish the directory

Zip `target/site/serenity` and drop it into
[Comma](https://commareports.com/):

- `index.html` becomes the **report body**.
- Every requirement page, test page, stylesheet, script and screenshot
  uploads alongside, and the relative links between them are rewritten
  to the uploaded copies — so clicking from a failing scenario into the
  step that failed, and into the screenshot taken at that moment, still
  works.
- Scripts run inside a sandboxed iframe with no same-origin access, so
  the tabs and filters behave —
  [interactive HTML reports](/interactive-html-reports).

## Trim the screenshots first

The default screenshot policy is generous. In
`serenity.properties`:

```properties
serenity.take.screenshots=FOR_FAILURES
```

Options run from `FOR_EACH_ACTION` (a PNG per interaction — thousands of
files on a real suite) down through `AFTER_EACH_STEP` and `FOR_FAILURES`
to `DISABLED`. `FOR_FAILURES` is the setting that makes the report both
publishable and readable: evidence where something went wrong, nothing
where it didn't.

## From CI

```bash
mvn clean verify -Dserenity.take.screenshots=FOR_FAILURES
mvn serenity:aggregate
zip -qr serenity.zip target/site/serenity
```

Publish the zip to a report id per branch. The URL stays stable and each
run appends a revision — which is how you tell an intermittent failure
from a new one, instead of losing last week's evidence to the artifact
retention window. See [publishing from CI](/docs/ci) and the
[Jenkins](/ci/jenkins-html-report) walkthrough, which covers the
Content-Security-Policy setting that makes Jenkins serve these reports
unstyled in the first place.

## What review adds

- **Anchored threads** on the failing step, next to the screenshot —
  [commenting on HTML](/comment-on-html).
- **Revisions**, so "this test has failed three nights running" is
  visible rather than remembered.
- **Access per report** — private, team, domain-gated or link-based. See
  [sharing & access control](/docs/sharing).

## Limits

- Assets: 25 MB per file, **250 MB and 500 files** per report. A
  full-screenshot Serenity run blows past the file count; `FOR_FAILURES`
  is the fix, and it's the right setting anyway.
- **Entry HTML: 5 MB.** **60 requests/minute per token.**

## Try it

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

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

### Related

- [Share an Allure report](/share-allure-report) · [Share an Extent report](/share-extent-report)
- [Share a Cucumber report](/share-cucumber-report) · [Share a TestNG report](/share-testng-report)
- [Publish from CI](/docs/ci)
