pytest plugin for test analytics and flaky-test detection. Free local HTML reports out of the box, or upload to cloudreport.dev for cloud history and team dashboards.
Project description
pytest-cloudreport
Pass-rate trends, flaky-test detection, and duration tracking for your pytest suite — straight from pytest, no CI plugin, no YAML edits.
pip install pytest-cloudreport
pytest --cloudreport-local
Opens a self-contained cloudreport.html in your browser. No signup. No account. Nothing leaves your machine.
When you want history to survive across CI runs and developer laptops, point the plugin at cloudreport.dev and every pytest invocation uploads automatically.
Why pytest-cloudreport
Every pytest suite past ~50 tests develops the same three problems:
- Flaky tests that fail once a week. Impossible to spot from one CI log.
- Runs that quietly get slower. Until CI crawls and nobody knows which tests to blame.
- No memory across machines. Your local run, your coworker's run, and the last CI run all vanish the moment the process exits.
pytest-cloudreport records every run so the patterns show up on their own.
What you get
| Local (free, no account) | Hosted — cloudreport.dev | |
|---|---|---|
| Self-contained HTML report | ✅ | ✅ |
| Pass / fail / skip counts, durations, tracebacks | ✅ | ✅ |
| 10-run trend chart | ✅ with --accumulate |
✅ |
| Persistent history across CI + developer machines | — | ✅ |
| Flaky test detection across runs | — | ✅ |
| Branch / commit / CI provider auto-tracking | — | ✅ |
| Team dashboards | — | ✅ |
| Web UI + JSON API | — | ✅ |
30-second start
Local, no account
pip install pytest-cloudreport
pytest --cloudreport-local
Writes cloudreport.html and opens it. Everything stays on your machine.
Want trend charts across your last 10 runs?
pytest --cloudreport-local --accumulate
Each run is appended to ~/.pytest-cloudreport/history.db.
Hosted — cloudreport.dev
Every new account starts on the Free tier — no credit card required.
- Sign up at cloudreport.dev — a default project and API key are created immediately.
-
export PYTEST_CLOUD_API_KEY=pcr_your_key_here
-
pytest
Runs appear on the dashboard within seconds. No CI plugin install. No GitHub App. No YAML edits beyond exporting the key.
CI, out of the box
GitHub Actions, GitLab CI, Jenkins, and CircleCI are auto-detected — branch, commit SHA, and run ID are captured with zero configuration.
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: "3.12" }
- run: pip install -r requirements.txt pytest-cloudreport
- run: pytest
env:
PYTEST_CLOUD_API_KEY: ${{ secrets.PYTEST_CLOUD_API_KEY }}
The upload runs in a background thread with a 25-second timeout — your build never waits for analytics, and never fails because of them.
Configuration
Values come from environment variables or pytest.ini. Environment wins.
| Env var | pytest.ini |
Default | What it does |
|---|---|---|---|
PYTEST_CLOUD_API_KEY |
cloudreport_api_key |
— | Project API key. Setting this auto-enables cloud upload. |
PYTEST_CLOUD_API_URL |
cloudreport_api_url |
Production backend | Override for self-hosted or preview deployments. |
PYTEST_CLOUD_ENV |
cloudreport_environment |
ci |
Environment label attached to every run. |
CLI flags
--cloudreport-local— generate a self-contained HTML report. No API key required. If a key is also configured, the run uploads to the cloud in the same invocation.--accumulate— with--cloudreport-local, append the run to the local history DB so the HTML report shows trends.--cloudreport— force-enable cloud upload even withoutPYTEST_CLOUD_API_KEYset (warns if the key is missing so failures aren't silent).--cloudreport-verbose— print upload status (or error) to stdout.
Pricing
Free during early access. Paid pricing launches with 6 months free for early adopters on any plan.
| Free | Starter | Pro | |
|---|---|---|---|
| Price | $0 | $24/month | $99/month |
| Projects | 1 | 10 | Unlimited |
| Tests per day | 5,000 | 100,000 | 300,000 |
| History retention | 7 days | 6 months | 1 year |
| Flaky test detection | ✅ | ✅ | ✅ |
| CI provider auto-detect | ✅ | ✅ | ✅ |
| GitHub Action | ✅ | ✅ | ✅ |
| Team members | 1 | 10 | Unlimited |
| Priority support | — | ✅ | ✅ |
Setup is identical across all tiers — same plugin, same API key.
Privacy
Sent to the server: test names, statuses, durations, assertion messages, tracebacks. Never sent: source code, test fixtures, environment variables, or stdout/stderr captured during the run.
Zero runtime dependencies
The plugin depends only on pytest and jinja2. No SDK, no telemetry library, no background daemon. Uploads use the Python standard library over plain HTTPS.
Support
- Website: cloudreport.dev
- Email: support@cloudreport.dev
- Issues: github.com/ahmad212o/pytest-cloudreport/issues
License
MIT. See LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytest_cloudreport-0.2.1.tar.gz.
File metadata
- Download URL: pytest_cloudreport-0.2.1.tar.gz
- Upload date:
- Size: 19.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78369d1f72bbcffc509c7f2dd26c7461929dd5a7059fba03e9714af013f59ff1
|
|
| MD5 |
78ca1964d840d8083a9e903c3025c24c
|
|
| BLAKE2b-256 |
3a37fa3611228cde120c4dd4cda2f535a45cec65e0c9bcbab3e66f89bf71495f
|
File details
Details for the file pytest_cloudreport-0.2.1-py3-none-any.whl.
File metadata
- Download URL: pytest_cloudreport-0.2.1-py3-none-any.whl
- Upload date:
- Size: 15.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b8c45d941be06734e090f88216a31178e512fe6544ae57bbc72bb68e6cc624d
|
|
| MD5 |
da9e141c7a7ee5b3538c9aba7bf1e064
|
|
| BLAKE2b-256 |
00084a172b27b43cee82b945b289308cc5c55d24170789e5ab286b3581ac510c
|