8 stable releases

1.1.4 Jan 22, 2024
1.1.3 Oct 30, 2023
1.1.2 Sep 13, 2023
1.1.1 May 5, 2023
1.0.1 Feb 24, 2023

#60 in Profiling

48 downloads per month

MIT license

710 lines



Goku is a HTTP load testing tool built out of a need to drill HTTP services inspired by drill and vegeta



Automatic download (Linux, OSX, WSL)

You can download the latest version of Goku directly to your current directory with the following command:

curl -sSL https://raw.githubusercontent.com/jcaromiq/goku/1.1.4/scripts/install.sh | sh

Using Cargo

cargo install goku-bench
goku --version

Manual download

Go to the Goku's GitHub Releases page and download the latest .tar.gz file that matches your system. Currently, tarballs are available for the following:

  • Linux (x86_64)
  • macOS (x86_64)
  • Windows (x86_64)


As a requirement, you need rust installed:

$ cargo build --release


CLI is versioned with SemVer v2.0.0.



Usage manual

Usage: goku [OPTIONS] --target <TARGET>

  -v, --verbose                      Runs in verbose mode
  -t, --target <TARGET>              URL to be requested using an operation [default: GET] Ex. GET http://localhost:3000/
  -r, --request-body <REQUEST_BODY>  File path for the request body
  -c, --clients <CLIENTS>            Number of concurrent clients [default: 1]
  -i, --iterations <ITERATIONS>      Total number of iterations [default: 1]
  -d, --duration <DURATION>          Duration of the test in second
      --headers <HEADERS>            Headers, multi value in format headerName:HeaderValue
      --scenario <SCENARIO>          Scenario file
  -h, --help                         Prints help
  -V, --version                      Prints version information

--target -t

Specifies the operation and url to make the request, default to GET.
Format: GET https://localhost:3000

--request-body -r Optional

Specifies the path of file with the body to send.

--clients -c

Specifies the number of concurrent calls to be used, defaults to 1.

--iterations -i

Specifies the total number of calls to be performed, default to 1.

--duration -d

Specifies the duration of the test in seconds.

--headers Optional

Specifies the headers to be sent.

--scenario Optional

Specifies the scenario file in yaml format.

target: POST http://localhost:3000/
clients: 50
requests: 1000
  - key: "bar"
    value: "foo"
  - key: "Content-Type"
    value: "application/json"

body: "{\"firstName\": \"Terry\",
        \"lastName\": \"Medhurst\",
        \"maidenName\": \"Smitham\",
        \"age\": 50}"


Prints help.


Prints version information.

Simple targets
goku --target "GET http://localhost:3000"
goku --target http://localhost:3000?foo=bar
goku -c 50 -i 1000 --target http://localhost:3000
goku -c 50 --duration 60 --target http://localhost:3000
Targets with custom headers
goku --target "GET http://localhost:3000" --headers Content-Type:application/json --headers bar:foo 
Targets with custom bodies
goku -c 50 -i 1000 -r body.json --target "POST http://localhost:3000"

Targets with custom bodies and headers
goku -r body.json --target "POST http://localhost:3000" --headers Content-Type:application/json --headers bar:foo 

Concurrency level 50
Time taken 4 seconds
Total requests 1000
Mean request time 169.90099999999998 ms
Max request time 415 ms
Min request time 5 ms
95'th percentile: 319 ms
99.9'th percentile: 367 ms




If you appreciate all the job done in this project, a small donation is always welcome:

"Buy Me A Coffee"


~633K SLoC