Allure Report vs ReportPortal: Picking One
Most teams pick a test reporting tool the same way they pick a font: whoever set up the repo first had a preference, and now it's load-bearing. Allure Report and ReportPortal are both mature, both widely used, and both capable of producing a dashboard that looks impressive in a sprint review. The difference is architectural — one is a static artifact generator, the other is a persistent analytics service — and that distinction determines everything about how your team will (or won't) act on test data six months from now.
The real problem isn't choosing the prettier UI. It's choosing the data model that matches your team's actual failure-triage workflow, CI topology, and retention needs. A wrong fit means either a beautiful report nobody queries, or an over-engineered server nobody maintains.
By the end of this article you'll have a clear decision framework, concrete configuration for both tools in CI, and a honest accounting of where each one breaks down under production load.
Learn Node.js, Cucumber, GitHub Copilot, APIs, CI/CD, and modern automation by building a complete framework.
What Each Tool Actually Is (and Isn't)
Allure Report is a static HTML report generator. You run your tests, collect a allure-results/ directory of JSON/XML artifacts, then invoke allure generate to produce a self-contained site. There is no server, no database, no persistent history unless you explicitly carry forward a history/ directory between runs. It integrates with JUnit XML, Pytest (allure-pytest plugin), Playwright, and most JVM frameworks out of the box. The mental model: it's a build artifact, not a service.
ReportPortal is a persistent test-results aggregation platform. It runs as a set of Docker/Kubernetes services (API, UI, Elasticsearch or PostgreSQL for storage, RabbitMQ for async ingestion) and receives results via agents that stream data in real time or post-run. Because results are stored server-side, you get cross-run trend analysis, launch-level filtering, and ML-assisted defect classification without any artifact management. The trade-off: you're operating a service, with all the infra cost and maintenance surface that implies. For teams already thinking about what makes a test report actually useful beyond pass/fail counts, ReportPortal's persistent model is the more natural fit.
Wiring Both Tools Into Real CI Pipelines
For Allure in GitHub Actions, the critical detail is history carry-forward. Without it, the trend graphs are empty and the tool's best feature — flakiness detection via retry history — is dead on arrival. The pattern that works:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Restore Allure history
uses: actions/cache@v4
with:
path: allure-history
key: allure-history-${{ github.ref_name }}
restore-keys: allure-history-
- name: Run tests
run: pytest --alluredir=allure-results
- name: Copy history into results
run: |
mkdir -p allure-results/history
cp -r allure-history/. allure-results/history/ 2>/dev/null || true
- name: Generate report
run: allure generate allure-results -o allure-report --clean
- name: Save new history
run: cp -r allure-report/history/. allure-history/
- name: Upload report
uses: actions/upload-artifact@v4
with:
name: allure-report
path: allure-report
This keeps history in the Actions cache keyed by branch, which is good enough for most teams. For deeper GitHub Pipelines integration — custom summary annotations, per-test PR comments — see the patterns covered in improving test report output in GitHub pipelines. The cache approach breaks down on monorepos with dozens of parallel shards; at that scale you need a shared store (S3 or GCS) and a merge step.
For ReportPortal, the equivalent Pytest configuration is simpler operationally but requires the service to be reachable:
# pytest.ini
[pytest]
addopts = --reportportal
rp_endpoint = https://reportportal.internal
rp_uuid = ${RP_API_TOKEN}
rp_launch = ${CI_PIPELINE_ID}
rp_project = platform-tests
rp_launch_attributes = branch:${BRANCH_NAME}; env:staging
The rp_launch_attributes field is where ReportPortal earns its keep — you can filter and group launches by any attribute combination in the UI, then build widgets on top of those filters. A query like "show me P95 duration for all tests tagged env:staging over the last 30 days" is a few clicks, not a SQL join. Triage time for recurring failures dropped from roughly 20 minutes per failure to under 5 once the team wired attribute-based filters to Slack alerts via ReportPortal's webhook integration. The caveat: that workflow assumes someone has kept the RP service healthy and the Elasticsearch index hasn't bloated past your retention policy.
One area where both tools need external help: distinguishing infrastructure flakes from logic flakes requires sequencing data — timestamps, retry counts, environment tags — that neither tool surfaces automatically. You need to deliberately emit that metadata as Allure labels or RP attributes, or the flakiness classification is noise.
Where Senior Engineers Still Get Burned
Allure history drift is the most common silent failure. Teams set up the cache, it works for a sprint, then a branch rename or a cache eviction policy change wipes the history and nobody notices because the report still generates. The trend graphs just silently reset to day one. The fix is to version the cache key on something stable (main branch SHA prefix, not full SHA) and add a CI step that fails loudly if the history directory is unexpectedly empty on a non-first-run branch.
On the ReportPortal side, the failure mode is Elasticsearch index management. The default configuration retains every test result indefinitely. On a suite of 10,000 tests running 20 times a day, that's 200,000 documents per day, and Elasticsearch will start degrading query performance within weeks. Set an ILM policy on day one, not after the first incident. A related org-level mistake: treating RP's ML defect classifier as authoritative without auditing it. The classifier conflates error types more often than teams expect — a problem explored in detail in the context of AI failure classifiers conflating assertion errors with timeouts. Treat its output as a triage hint, not a verdict.
Myths That Lead Teams to the Wrong Tool
"Allure is for small teams, ReportPortal scales." Scale is the wrong axis. Allure with S3-backed history and a CDN-hosted report site handles thousands of tests across hundreds of pipelines cleanly. ReportPortal is the right choice when you need cross-launch querying, persistent defect triage workflows, or multi-team visibility into a shared test estate — not simply because your suite is large. Conversely, a 50-person team running a single monorepo with a 2,000-test suite has no business operating RP's six-service stack if a static report covers their workflow. Also worth noting: suite composition skews the metrics you report regardless of which tool you use — a dashboard built on a badly composed suite is misleading in either system.
"Whichever tool I pick, pass rate is the KPI." Pass rate is a lagging, gameable metric. Both Allure and ReportPortal support richer signals — retry counts, duration trends, first-failure timestamps, environment-specific failure rates — and neither tool forces you to surface pass rate as the headline number. If your dashboard leads with pass rate, that's a configuration choice, not a tool constraint. The more honest KPIs are mean time to detection, retry-adjusted failure rate, and duration variance by test class. Build toward those from day one; retrofitting a dashboard after the team has anchored on pass rate is an organizational lift, not a technical one.
The decision rule is straightforward: choose Allure when you want zero infra overhead and your triage workflow lives inside a single pipeline's artifact. Choose ReportPortal when you need persistent, queryable history across teams and launches, and you have the platform capacity to own the service. Either way, instrument your metadata carefully from the start — attributes, tags, retry counts — because the tool can only surface what you feed it. If you're still calibrating what "useful" looks like before committing, the breakdown at the anatomy of a useful test report is a solid reference point.
Note: This article is for informational purposes only and is not a substitute for professional advice. If you need guidance on specific situations described in this article, consider consulting a qualified professional.