Free load testing tool that reads Postman collections — browser UI + CLI
Project description
Overload
Free, open-source load testing tool that reads Postman collections. Run tests from a browser dashboard or the terminal CLI.
Why "Overload"?
Named Overload because that's exactly what it does to your server.
No metaphor. No brand committee. Just requests — a lot of them — all at once, until something interesting happens.
Install
pip install overload-cli
Or in dev mode from source:
git clone https://github.com/dprakash2101/overload
cd overload
pip install -e ".[dev]"
Two Ways to Run
Option 1 — Browser UI (results on screen)
Run overload with no arguments. It starts a local server and opens a dashboard in your browser where you configure the test, watch live progress, and view charts and reports — no terminal reading required.
overload
# Opens http://localhost:3000 automatically
Step-by-step in the browser:
- The app auto-detects any Postman collection JSON files in your working directory and lists them under "Detected Files". Click Load next to the one you want.
- Optionally load a Postman environment file the same way.
- Pick the Test Type from the dropdown (Burst, Load, Stress, Spike, etc.).
- Adjust the config fields that appear (concurrency, RPS, duration, etc.).
- Click Start Test. The dashboard shows live progress: phase, request count, RPS, and a real-time latency chart.
- When the test finishes, click View Report to open the full HTML report in a new tab — latency charts, timeline scatter, per-second breakdown, and the raw request log.
- Click Stop at any time to cancel immediately with partial results saved.
Options:
overload ui --port 8080 # Use a different port
overload ui --no-browser # Start server without auto-opening browser
overload ui --host 0.0.0.0 # Bind to all interfaces (LAN access)
Option 2 — CLI (results in terminal)
Run tests headlessly and see a progress bar + summary printed to the terminal. An HTML report is saved to disk.
overload run --collection path/to/collection.json --pattern burst
Output looks like:
OVERLOAD — BURST TEST
Collection: my_api.json
Requests: 5
Run ID: burst_20260529_abc123
[####################] 100% (200 requests) — complete
Results:
Total: 200 OK: 198 Errors: 2
Latency — min: 45ms p95: 312ms max: 891ms
Duration: 4.2s Avg RPS: 47.6
Report: /path/to/overload_report_20260529_abc123.html
All CLI flags for overload run:
| Flag | Default | Description |
|---|---|---|
--collection |
(required) | Path to Postman collection JSON |
--environment |
— | Path to Postman environment JSON |
--pattern |
burst |
Test type: load, stress, spike, soak, ramp, burst, breakpoint, custom, ratelimit |
--requests |
200 |
Total requests (burst / rate limit tests) |
--concurrency |
20 |
Max simultaneous connections |
--rps |
50 |
Target requests per second |
--duration |
300 |
Test duration in seconds |
--timeout |
30 |
Per-request timeout in seconds |
--stages |
— | Custom stages JSON: '[{"duration":60,"rps":100}]' |
--var KEY=VALUE |
— | Override a collection variable (repeatable) |
--save-responses |
off | Save response bodies in the report |
--no-verify-ssl |
off | Skip SSL certificate verification |
--output |
reports |
Directory to write the HTML report |
--format |
html |
Report format: html, json, csv |
--assert EXPR |
— | Assertion threshold (repeatable), e.g. p95_latency_ms<500 |
--junit PATH |
— | Write JUnit XML report for CI systems |
--config PATH |
— | Load config from overload.config.yaml |
--open-report |
off | Open HTML report in browser after run |
Sequential runner (run requests in order):
overload sequential --collection my_api.json --iterations 5 --delay 500
| Flag | Default | Description |
|---|---|---|
--collection |
(required) | Path to Postman collection JSON |
--environment |
— | Path to Postman environment JSON |
--iterations |
1 |
How many times to run the full collection |
--delay |
0 |
Milliseconds to wait between requests |
--timeout |
30 |
Per-request timeout in seconds |
--output |
. |
Directory to write the HTML report |
Test Types
| Type | What it does |
|---|---|
| Burst | Fires all N requests at once as fast as possible |
| Load | Sustained traffic — ramp up → hold at target RPS → ramp down |
| Stress | Steps up RPS until errors exceed the failure threshold |
| Spike | Baseline RPS → sudden spike → recovery, to test elasticity |
| Soak | Steady low RPS over a long duration (find memory leaks / drift) |
| Ramp | Linearly increases from start RPS to end RPS |
| Breakpoint | Binary search to find the exact RPS where latency or errors degrade |
| Custom | Define your own stages: [{"duration": 60, "rps": 100}, ...] |
| Rate Limit | 2-phase validation: sends at cap (req/min) → cooldown → exceeds cap; returns a working / not_working / too_strict verdict |
| Sequential | Runs each request in collection order, N iterations |
CI/CD Integration
Overload can gate your CI pipeline. Add assertions and the process exits 1 on failure — the universal CI signal.
Inline assertions:
overload run --collection api.json --pattern load --rps 100 --duration 60 \
--assert "p95_latency_ms<500" \
--assert "error_rate_pct<1" \
--junit results.xml
Using a config file:
Save your test config with assertions to overload.config.yaml (the browser UI can do this via Save Config):
test_type: load
config:
target_rps: 100
hold_duration_seconds: 60
concurrency: 20
thresholds:
- metric: p95_latency_ms
operator: "<"
value: 500
- metric: error_rate_pct
operator: "<"
value: 1
Then in CI:
overload run --collection api.json --config overload.config.yaml --junit results.xml
GitHub Actions example:
- name: Run load test
run: |
pip install overload-cli
overload run --collection tests/api.json \
--config overload.config.yaml \
--junit results.xml
- name: Publish test results
uses: dorny/test-reporter@v1
if: always()
with:
name: Load Test
path: results.xml
reporter: java-junit
Available assertion metrics: p50_latency_ms, p95_latency_ms, p99_latency_ms, max_latency_ms, mean_latency_ms, error_rate_pct, success_rate_pct, avg_rps, total_requests, rate_limited_count
Operators: <, <=, >, >=, ==
Quick Reference
# See results in browser (recommended)
overload
# See results in terminal
overload run --collection my_api.json --pattern burst --requests 100
# Debug mode (verbose logging)
overload --debug
# or
OVERLOAD_DEBUG=1 overload
Working Directory
When you launch overload from a directory that contains Postman JSON files, the UI auto-detects and lists them. Start from your project folder:
cd path/to/my-api-tests/
overload
The HTML report is also saved to the working directory after each test.
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 overload_cli-0.2.1.tar.gz.
File metadata
- Download URL: overload_cli-0.2.1.tar.gz
- Upload date:
- Size: 115.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7688b35c8f452d11b62edc6c61f63c0cde8246977f6287d9b23142f57ae59165
|
|
| MD5 |
ef2217ff94a36aba462ce28de5817fff
|
|
| BLAKE2b-256 |
88e9eb9d64815a08f2f1ac6222267573767302ce0eee9f805b72111c18475f3c
|
Provenance
The following attestation bundles were made for overload_cli-0.2.1.tar.gz:
Publisher:
publish.yml on dprakash2101/overload
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
overload_cli-0.2.1.tar.gz -
Subject digest:
7688b35c8f452d11b62edc6c61f63c0cde8246977f6287d9b23142f57ae59165 - Sigstore transparency entry: 1739983048
- Sigstore integration time:
-
Permalink:
dprakash2101/overload@79a76526a96f9ad49a3962115e7b8ffe8179cdd3 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dprakash2101
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@79a76526a96f9ad49a3962115e7b8ffe8179cdd3 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file overload_cli-0.2.1-py3-none-any.whl.
File metadata
- Download URL: overload_cli-0.2.1-py3-none-any.whl
- Upload date:
- Size: 70.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb4887b08230dbdebc461054d193d41f5963d5c27842ffa22d53243b62e5c0c7
|
|
| MD5 |
6954b9c376ed0a93c8cffcb77dd557ee
|
|
| BLAKE2b-256 |
e9b6002f04d35e27c8ae7d7ebabfba989762d331835785f9db9a5739592699d9
|
Provenance
The following attestation bundles were made for overload_cli-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on dprakash2101/overload
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
overload_cli-0.2.1-py3-none-any.whl -
Subject digest:
fb4887b08230dbdebc461054d193d41f5963d5c27842ffa22d53243b62e5c0c7 - Sigstore transparency entry: 1739983052
- Sigstore integration time:
-
Permalink:
dprakash2101/overload@79a76526a96f9ad49a3962115e7b8ffe8179cdd3 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dprakash2101
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@79a76526a96f9ad49a3962115e7b8ffe8179cdd3 -
Trigger Event:
workflow_dispatch
-
Statement type: