- Notifications
You must be signed in to change notification settings - Fork140
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