Plow is a high-performance HTTP benchmarking tool with real-time web UI and terminal displaying

Related tags

plow
Overview

plow

build Homebrew

Plow is a HTTP(S) benchmarking tool, written in Golang. It uses excellent fasthttp instead of Go's default net/http due to its lightning fast performance.

Plow runs at a specified connections(-c) concurrently and real-time records a summary statistics, histogram of execution time and calculates percentiles to display on Web UI and terminal. It can run for a set duration(-d), for a fixed number of requests(-n), or until Ctrl-C interrupted.

The implementation of real-time computing Histograms and Quantiles using stream-based algorithms inspired by prometheus with low memory and CPU bounds. so it's almost no additional performance overhead for benchmarking.

❯ ./plow http://127.0.0.1:8080/hello -c 20
Benchmarking http://127.0.0.1:8080/hello using 20 connection(s).
> Real-time charts is listening on http://127.0.0.1:18888/

Summary:
  Elapsed        8.6s
  Count        969657
    2xx        776392
    4xx        193265
  RPS      112741.713
  Reads    10.192MB/s
  Writes    6.774MB/s

Statistics    Min       Mean     StdDev      Max
  Latency     32µs      176µs     37µs     1.839ms
  RPS       108558.4  112818.12  2456.63  115949.98

Latency Percentile:
  P50     P75    P90    P95    P99   P99.9  P99.99
  173µs  198µs  222µs  238µs  274µs  352µs  498µs

Latency 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

Installation

Binary and image distributions are available through the releases assets page.

Via Go

go get github.com/six-ddc/plow

Via Docker

docker run --rm --net=host ghcr.io/six-ddc/plow
# docker run --rm -p 18888:18888 ghcr.io/six-ddc/plow

Via Homebrew

brew install plow

Usage

Options

request url ">
usage: plow [<flags>] <url>

A high-performance HTTP benchmarking tool with real-time web UI and terminal displaying

Example:

  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 POST

Flags:
      --help                    Show context-sensitive help.
  -c, --concurrency=1           Number of connections to run concurrently
  -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 as time unit to print
      --body=BODY               HTTP request body, if start the body with @, the rest should be a filename to read
      --stream                  Specify whether to stream file specified by '--body @file' using chunked encoding or to read into memory
  -m, --method="GET"            HTTP method
  -H, --header=K:V ...          Custom HTTP headers
      --host=HOST               Host header
  -T, --content=CONTENT         Content-Type header
      --listen=":18888"         Listen addr to serve Web UI
      --link="127.0.0.1:18888"  Link addr used for show Web html and request backend server
      --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
      --version                 Show application version.

Args:
  <url>  request url

Examples

Basic usage:

plow http://127.0.0.1:8080/ -c 20 -n 10000 -d 10s

POST a json file:

plow http://127.0.0.1:8080/ -c 20 --body @file.json -T 'application/json' -m POST

License

See LICENSE.

Issues
  • chore(deps): use go 1.16

    chore(deps): use go 1.16

    opened by chenrui333 4
  • optimize link address setting for direct connect to remote plow

    optimize link address setting for direct connect to remote plow

    在服务器(远程)执行 plow 的时候,原先 --link=XXX 是必须设置,才能正常展示图标的。 现在不用设置也可以正常查看了

    opened by wweir 4
  • add https skip verify flag

    add https skip verify flag

    can you add https skip verify flag to ignore cert verify,like -k, --insecure in curl ? or is there some way to do this in current version ?

    opened by KleKwi 4
  • can not pull project

    can not pull project

    when i run go get -u github.com/six-ddc/plow,i got

    build github.com/six-ddc/plow: cannot load github.com/nicksnyder/go-i18n/i18n: cannot find module providing package github.com/nicksnyder/go-i18n/i18n
    

    so i watch https://github.com/nicksnyder/go-i18n/, the pkg catalogue is changed. So

    github.com/nicksnyder/go-i18n/i18n

    changed

    v2/github.com/nicksnyder/go-i18n/i18n

    opened by BlackSinny 3
  • homebrew install

    homebrew install

    • doc: update homebrew install
    • doc: add toc
    • doc: add build badge and homebrew release badge

    relates to Homebrew/homebrew-core#79661

    opened by chenrui333 1
  • feat: add dependabot to manage the deps

    feat: add dependabot to manage the deps

    👋 I have applied dependabot whenever I saw the fit, I think it would be a good addon for maintain the project health. Let me know what you think. :)

    opened by chenrui333 1
  • Feature/rand init

    Feature/rand init

    opened by musinit 1
  • 🛠️

    🛠️

    Why do you need to upgrade to

    opened by B0989180192 1
  • build(deps): bump actions/cache from 1 to 2.1.6

    build(deps): bump actions/cache from 1 to 2.1.6

    Bumps actions/cache from 1 to 2.1.6.

    Release notes

    Sourced from actions/cache's releases.

    v2.1.6

    • Catch unhandled "bad file descriptor" errors that sometimes occurs when the cache server returns non-successful response (actions/cache#596)

    v2.1.5

    • Fix permissions error seen when extracting caches with GNU tar that were previously created using BSD tar (actions/cache#527)

    v2.1.4

    • Make caching more verbose #650
    • Use GNU tar on macOS if available #701

    v2.1.3

    • Upgrades @actions/core to v1.2.6 for CVE-2020-15228. This action was not using the affected methods.
    • Fix error handling in uploadChunk where 400-level errors were not being detected and handled correctly

    v2.1.2

    • Adds input to limit the chunk upload size, useful for self-hosted runners with slower upload speeds
    • No-op when executing on GHES

    v2.1.1

    • Update @actions/cache package to v1.0.2 which allows cache action to use posix format when taring files.

    v2.1.0

    • Replaces the http-client with the Azure Storage SDK for NodeJS when downloading cache content from Azure. This should help improve download performance and reliability as the SDK downloads files in 4 MB chunks, which can be parallelized and retried independently
    • Display download progress and speed

    v2.0.0

    Initial v2 release

    What's new in v2

    v1.2.0

    Bug Fixes

    • Fall back to GNU tar on older versions of Windows that do not have BSD tar installed (#252)
    • Fixed chunk upload retry logic (#305)

    Improvements

    • Improved reliability of the download cache APIs (#269)
    • Added retries to API calls that failed due to retryable errors (#306)
    • Improved error handling during both cache upload (#300) and download (#284)

    v1.1.2

    Other

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 0
  • build(deps): bump github.com/valyala/fasthttp from 1.27.0 to 1.28.0

    build(deps): bump github.com/valyala/fasthttp from 1.27.0 to 1.28.0

    Bumps github.com/valyala/fasthttp from 1.27.0 to 1.28.0.

    Release notes

    Sourced from github.com/valyala/fasthttp's releases.

    v1.28.0

    • 1504a84 Increase TestHostClientMaxConnWaitTimeoutSuccess timeout (Erik Dubbelboer)
    • f6560be Flush buffered responses if we have to wait for the next request (#1050) (Erik Dubbelboer)
    Commits
    • 1504a84 Increase TestHostClientMaxConnWaitTimeoutSuccess timeout
    • f6560be Flush buffered responses if we have to wait for the next request (#1050)
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies go 
    opened by dependabot[bot] 0
Releases(v1.1.0)
Owner
ddc
std::cout<<"hello"<
ddc
go-wrk - a HTTP benchmarking tool based in spirit on the excellent wrk tool (https://github.com/wg/wrk)

go-wrk - an HTTP benchmarking tool go-wrk is a modern HTTP benchmarking tool capable of generating significant load when run on a single multi-core CP

Tal Sliwowicz 451 Jul 22, 2021
a benchmarking&stressing tool that can send raw HTTP requests

reqstress reqstress is a benchmarking&stressing tool that can send raw HTTP requests. It's written in Go and uses fasthttp library instead of Go's def

Utku Sen 112 Jul 17, 2021
A bytecode-based virtual machine to implement scripting/filtering support in your golang project.

eval-filter Implementation Scripting Facilities Types Built-In Functions Conditionals Loops Functions Case/Switch Use Cases Security Denial of service

Steve Kemp 63 Jul 23, 2021
Stress testing and benchmarking tool for the NEAR EVM

evm-bully --- stress testing and benchmarking tool for the NEAR EVM

Project Aurora 29 Jul 7, 2021
HTTP load testing tool and library. It's over 9000!

Vegeta Vegeta is a versatile HTTP load testing tool built out of a need to drill HTTP services with a constant request rate. It can be used both as a

Tomás Senart 17.8k Jul 22, 2021
Fortio load testing library, command line tool, advanced echo server and web UI in go (golang). Allows to specify a set query-per-second load and record latency histograms and other useful stats.

Fortio Fortio (Φορτίο) started as, and is, Istio's load testing tool and now graduated to be its own project. Fortio is also used by, among others, Me

Fortio (Φορτίο) 2k Jul 18, 2021
Fast cross-platform HTTP benchmarking tool written in Go

bombardier bombardier is a HTTP(S) benchmarking tool. It is written in Go programming language and uses excellent fasthttp instead of Go's default htt

Максим Федосеев 2.7k Jul 16, 2021
Go testing in the browser. Integrates with `go test`. Write behavioral tests in Go.

GoConvey is awesome Go testing Welcome to GoConvey, a yummy Go testing tool for gophers. Works with go test. Use it in the terminal or browser accordi

SmartyStreets 6.5k Jul 19, 2021
Go testing in the browser. Integrates with `go test`. Write behavioral tests in Go.

GoConvey is awesome Go testing Welcome to GoConvey, a yummy Go testing tool for gophers. Works with go test. Use it in the terminal or browser accordi

SmartyStreets 6.5k Jul 26, 2021
Learn Go with test-driven development

Learn Go with Tests Art by Denise Formats Gitbook EPUB or PDF Translations 中文 Português 日本語 한국어 Support me I am proud to offer this resource for free,

Chris James 14.9k Jul 23, 2021
HTTP traffic mocking and testing made easy in Go ༼ʘ̚ل͜ʘ̚༽

gock Versatile HTTP mocking made easy in Go that works with any net/http based stdlib implementation. Heavily inspired by nock. There is also its Pyth

Tom 1.4k Jul 25, 2021
ScareCrow - Payload creation framework designed around EDR bypass.

ScareCrow More Information If you want to learn more about the techniques utlized in this framework please take a look at Part 1 and Part 2 Descriptio

Optiv Security 1.1k Jul 26, 2021
Framework of performance testing

Framework of performance testing fperf is a powerful and flexible framework which allows you to develop your own benchmark tools so much easy. You cre

null 325 Jul 22, 2021
A Devtools driver for web automation and scraping

Overview Documentation | API reference Rod is a high-level driver directly based on DevTools Protocol. It's designed for web automation and scraping.

Rod 1.7k Jul 24, 2021