- Notifications
You must be signed in to change notification settings - Fork141
A high-performance HTTP benchmarking tool that includes a real-time web UI and terminal display
License
six-ddc/plow
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Plow is an HTTP(S) benchmarking tool, written in Golang. It usesexcellentfasthttp instead of Go's defaultnet/http due to its lightning fast performance.
Plow runs at a specified connections(option-c
) concurrently andreal-time records a summary statistics, histogramof execution time and calculates percentiles to display on Web UI and terminal. It can run for a set duration(option-d
), for a fixed number of requests(option-n
), or until Ctrl-C interrupted.
The implementation of real-time computing Histograms and Quantiles using stream-based algorithms inspiredbyprometheus with low memory and CPU bounds. so it's almost noadditional performance overhead for benchmarking.
❯ ./plow http://127.0.0.1:8080/hello -c 20Benchmarking http://127.0.0.1:8080/hello using 20 connection(s).@ Real-time charts is listening on http://[::]:18888Summary: Elapsed 8.6s Count 969657 2xx 776392 4xx 193265 RPS 112741.713 Reads 10.192MB/s Writes 6.774MB/sStatistics Min Mean StdDev Max Latency 32µs 176µs 37µs 1.839ms RPS 108558.4 112818.12 2456.63 115949.98Latency Percentile: P50 P75 P90 P95 P99 P99.9 P99.99 173µs 198µs 222µs 238µs 274µs 352µs 498µsLatency Histogram: 141µs 273028 ■■■■■■■■■■■■■■■■■■■■■■■■ 177µs 458955 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 209µs 204717 ■■■■■■■■■■■■■■■■■■ 235µs 26146 ■■ 269µs 6029 ■ 320µs 721 403µs 58 524µs 3
Binary and image distributions are available through thereleasesassets page.
go install github.com/six-ddc/plow@latest
# brew updatebrew install plow
docker run --rm --net=host ghcr.io/six-ddc/plow# docker run --rm -p 18888:18888 ghcr.io/six-ddc/plow
usage: plow [<flags>]<url>A high-performance HTTP benchmarking tool with real-time web UI and terminal displayingExamples: plow http://127.0.0.1:8080/ -c 20 -n 100000 plow https://httpbin.org/post -c 20 -d 5m --body @file.json -T'application/json' -m POSTFlags: --help Show context-sensitive help. -c, --concurrency=1 Number of connections to run concurrently --rate=infinity Number of requests pertime unit, examples: --rate 50 --rate 10/ms -n, --requests=-1 Number of requests to run -d, --duration=DURATION Duration of test, examples: -d 10s -d 3m -i, --interval=200ms Print snapshot result every interval, use 0 to print once at the end --seconds Use seconds astime unit to print --json Print snapshot result as JSON -b, --body=BODY HTTP request body,if start the body with @, the rest should be a filename toread --stream Specify whether to stream file specified by'--body @file' using chunked encoding or toread into memory -m, --method="GET" HTTP method -H, --header=K:V ... Custom HTTP headers --host=HOST Host header -T, --content=CONTENT Content-Type header --cert=CERT Path to the client's TLS Certificate --key=KEY Path to the client's TLS Certificate Private Key -k, --insecure Controls whether a client verifies the server's certificate chain and host name --listen=":18888" Listen addr to serve Web UI --timeout=DURATION Timeout for each http request --dial-timeout=DURATION Timeout for dial addr --req-timeout=DURATION Timeout for full request writing --resp-timeout=DURATION Timeout for full response reading --socks5=ip:port Socks5 proxy --auto-open-browser Specify whether auto open browser to show Web charts --[no-]clean Clean the histogram bar once its finished. Default is true --summary Only print the summary without realtime reports --version Show application version. Flags default values also read from env PLOW_SOME_FLAG, such as PLOW_TIMEOUT=5s equals to --timeout=5sArgs: <url> request url
Basic usage:
plow http://127.0.0.1:8080/ -c 20 -n 10000 -d 10s
POST a json file:
plow https://httpbin.org/post -c 20 --body @file.json -T'application/json' -m POST
# Add the statement to their bash_profile (or equivalent):eval"$(plow --completion-script-bash)"# Or for ZSHeval"$(plow --completion-script-zsh)"
SeeLICENSE.
About
A high-performance HTTP benchmarking tool that includes a real-time web UI and terminal display
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.