Allure
What it is
Section titled “What it is”Allure Framework is an open-source test-reporting tool. It ingests test results in a standard JSON format (allure-results/*-result.json) and produces a browseable HTML dashboard with screenshots, attachments, per-step breakdowns, history, and search.
For TRACE ALM, Allure is the destination for VisionTrace’s rich per-test output (per-step screenshots, AI reasoning text, screen recordings) and the lookup target the post-processor deep-links into from each requirement’s badge in the RTM.
Why we chose it
Section titled “Why we chose it”- Industry standard — wide language support (
allure-pytest,allure-junit, etc.) and well-known to QA professionals; an auditor or external reviewer will already recognise it - Rich attachments — screenshots, videos, freeform text (LLM reasoning) all attach to a specific test step; nothing else in the chain captures that
- Open-source, self-hosted — no vendor lock-in, no third-party data plane
- Native plug-in for pytest (
allure-pytest) — VisionTrace tests emit Allure-native JSON without extra glue
Alternatives considered: ReportPortal (heavier, requires its own server), plain JUnit XML (no screenshots / step-level attachments), bespoke HTML rendering (effort + no audit familiarity). Allure won on standardness + plug-in maturity.
Where it lives
Section titled “Where it lives”- Raw results during test runs:
test-results/allure-results/*-result.json(gitignored — produced fresh each run) - Generated dashboard HTML (in CI’s RTM artefact):
regulatory-docs/output/html/allure/ - CI installation: the
system-and-rtmjob in.github/workflows/pr_branch_tests.ymlrunsnpm install -g allure-commandlineand the post-processor then invokesallure generateto build the dashboard - Local installation (for previewing artefacts): see How to operate it
How to operate it
Section titled “How to operate it”Generate the dashboard from raw results
Section titled “Generate the dashboard from raw results”After a pytest run with --alluredir test-results/allure-results, generate the static HTML dashboard:
allure generate test-results/allure-results -o test-results/allure-html --cleanThen either open test-results/allure-html/index.html via a local server, or use Allure’s dev server:
allure serve test-results/allure-resultsallure serve starts an HTTP server and opens the browser automatically. Don’t open the static index.html from the filesystem — Allure’s loader needs HTTP for asset loading.
Local install of the Allure CLI
Section titled “Local install of the Allure CLI”Easiest on Windows:
# Via npm (Node ≥ 14 required)npm install -g allure-commandlineOr via scoop:
scoop install allureThe CI runner installs it via npm.
Inspect a CI artefact locally
Section titled “Inspect a CI artefact locally”Download bioflow-rtm-<run> from the CI run, unzip, and serve with the post-processor’s helper:
uv run python tools/post_processor/serve.py --dir regulatory-docs/output/htmlThen open http://localhost:8000 and click any badge in the RTM — you’ll be deep-linked into the corresponding test in the bundled Allure dashboard.
Versioning / update policy
Section titled “Versioning / update policy”allure-pytestis a Python dep, pinned via uv lock — version recorded inuv.lockallure-commandlineis installed via npm in CI, currentlylatest— pin to a specific version before regulated releases by adding@<version>to thenpm installline in.github/workflows/pr_branch_tests.yml- Regulated SOUP — version pin and any bump go through the standard SOUP register procedure; Allure is in the audit-evidence path so the version used for any released RTM is part of the release record
External documentation
Section titled “External documentation”Allure’s own documentation is at https://allurereport.org/docs/. This site does not duplicate it. Refer there for:
- Allure’s JSON format specification
- The
allure-pytestplugin reference - CLI options for
allure generate/allure serve - History trend / categorisation features (we don’t currently use them but they’re available)
For how Allure fits into the post-processor’s badge / deep-link mechanism, see the post-processor page.