net-benchmark
fast, extensible network benchmarking — dns, http, ssl, and distributed load testing from a single cli.
pip install net-benchmark
pip install net-benchmark[pdf] # with pdf export
Also available as a container image — no local Python needed:
docker run --rm joeovo/net-benchmark:latest http benchmark --use-defaults --formats csv,excel
joeovo/net-benchmark on Docker Hub, ghcr.io/net-benchmark/net-benchmark on GHCR. Full guide: Running in Docker.
Or via Homebrew:
brew tap net-benchmark/net-benchmark
brew install net-benchmark
successor to dns-benchmark-tool — fully backward compatible.
dns-benchmarkcommand still works as an alias.
tools
dns benchmark — resolver performance, dnssec, doh/dot
net-benchmark dns benchmark --use-defaults
net-benchmark dns benchmark --use-defaults --doh
net-benchmark dns benchmark --use-defaults --dot --dnssec-validate
net-benchmark dns compare Cloudflare Google Quad9 --dnssec-validate
net-benchmark dns monitoring --use-defaults --interval 30
| flag | description | default |
|---|---|---|
--use-defaults |
built-in resolvers and sample domains | — |
--resolvers |
name, ip, or file | — |
--domains |
comma-separated or file | — |
--iterations |
queries per resolver | 1 |
--doh |
dns-over-https | false |
--doh-url |
comma-separated urls, one per resolver | — |
--dot |
dns-over-tls | false |
--dnssec-validate |
fail if ad flag absent | false |
--formats |
csv, excel, pdf, json | csv,excel,pdf |
full documentation: DNS Benchmark guide
http benchmark — latency, ttfb, security headers, tls certs
net-benchmark http benchmark --use-defaults
net-benchmark http benchmark --use-defaults --iterations 5
net-benchmark http benchmark --targets "https://api.example.com" --method POST --body '{}'
net-benchmark http compare api.example.com api2.example.com --iterations 3
net-benchmark http top --use-defaults --limit 5
net-benchmark http monitoring --use-defaults --interval 30
| flag | description | default |
|---|---|---|
--use-defaults |
built-in target urls | — |
--targets |
comma-separated urls or file | — |
--method |
http verb (get, post, etc.) | get |
--headers |
"key:value,key2:value2" |
— |
--body |
inline request body (e.g. json) | — |
--body-file |
path to body file | — |
--auth |
basic:user:pass or bearer:token |
— |
--cert / --cert-key |
mtls client certificate | — |
--proxy |
proxy url | — |
--assert |
repeatable: status=200, body_contains=ok, max_latency=500, etc. |
— |
--iterations |
requests per target | 1 |
--no-http2 |
force http/1.1 | false |
--no-verify-ssl |
skip tls verification | false |
--formats |
csv, excel, pdf, json | csv,excel,pdf |
full documentation: HTTP Benchmark guide
http load test — sustained traffic, thresholds, distributed workers
net-benchmark http load-test -t https://api.example.com/health --mode throughput --duration 30
net-benchmark http load-test -t https://api.example.com --mode sustained --rps 150 --duration 300
net-benchmark http load-test -t https://api.example.com --mode ramp-up --ramp-concurrency 500
net-benchmark http load-test -t https://api.example.com --threshold 'p95_latency<500' --threshold 'dropped_rate<1'
net-benchmark http load-test -t https://api.example.com --workers 4 --emit-summary node-a.json
net-benchmark http merge-load-test ./nodes/*.json -o ./merged
| flag | description | default |
|---|---|---|
--targets / -t |
comma-separated urls or file | — |
--mode |
throughput, sustained, ramp-up |
throughput |
--duration |
seconds (throughput/sustained) | 10 |
--rps |
target requests/sec — required for sustained |
— |
--max-concurrency |
max in-flight requests (throughput) | 200 |
--ramp-concurrency |
peak concurrency to ramp to | 200 |
--max-total-rps |
safety ceiling on aggregate rps during ramp-up | ramp-concurrency × 50 |
--expected-status |
codes treated as expected, e.g. 200-299,401 |
— |
--threshold |
repeatable pass/fail, e.g. p95_latency<500 |
— |
--workers |
generate load from n processes on this machine | 1 |
--target-distribution |
replicate (every worker hits every target) or shard |
replicate |
--start-at / --start-delay |
synchronised start across machines | — |
--warmup |
requests per target before the start barrier | 0 |
--emit-summary |
write this run's summaries as json, for merging | — |
--region |
label for where this generator runs, e.g. hel1 |
— |
--live |
print each interval as it completes | false |
--formats |
csv, excel, pdf, json | csv,excel |
since 0.5.2, load can be generated from several parallel workers — separate processes
on one machine, or separate machines entirely — with a synchronised start and a
statistically correct merge. merge-load-test recomputes p95_latency and p99_latency
from the merged latency histogram rather than averaging per-worker percentiles;
std_latency, jitter, consistency_score and the phase p95s do not survive a merge and
are rejected as unknown metrics, so evaluate those per worker.
full documentation: http load testing
ssl check — certificate expiry and chain validation (coming 0.6.0)
net-benchmark ssl check --hosts "example.com,api.example.com"
full documentation: SSL Check guide
export formats
| format | flag | notes |
|---|---|---|
| csv | --formats csv |
raw results + summary |
| excel | --formats excel |
charts, dnssec sheet, colour coding |
--formats pdf |
requires pip install net-benchmark[pdf] |
|
| json | --formats json |
full payload including protocol stats; per-worker summaries and latency histogram on merged runs |
links
- documentation: net-benchmark
- repository: github.com/net-benchmark/net-benchmark
- discussions: GitHub Discussions
- issues: github.com/net-benchmark/net-benchmark/issues
- changelog: github.com/net-benchmark/net-benchmark/blob/main/CHANGELOG.md
- powered by buildtools.net
license
mit © frankovo
Release files for net-benchmark 0.5.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| net_benchmark-0.5.6.tar.gz | 5.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| net_benchmark-0.5.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.4 MB
Release files / net_benchmark-0.5.6.tar.gz
| Download URL | net_benchmark-0.5.6.tar.gz |
|---|---|
| Size | 5.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5149957f9c5f79e1b46cd2f5a2b1b85145c4f0ad825e188411860866a8192918
|
|
BLAKE2b-256 checksum How to use checksums |
5335bee5c75d38539d0d30794732864e564b38827887ac5ba0c9c2f5b165e578
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency logRelease files / net_benchmark-0.5.6-py3-none-any.whl
| Download URL | net_benchmark-0.5.6-py3-none-any.whl |
|---|---|
| Size | 5.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9493edd573e845d8099e9d1a041f9faf9096e9230548ea1ce7f78c93f05d6f0d
|
|
BLAKE2b-256 checksum How to use checksums |
498c664981eb7a81777040aca0fadf7931ca7d242cecc8d3f527620f1306e834
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 7, 2026.
Transparency log