Goku is an HTTP load testing application written in Rust

Goku is a high-performance, scalable HTTP load-testing tool designed for benchmarking and performance analysis of web services. Inspired by tools like Drill and Vegeta, Goku offers modern features and simplicity for engineers to simulate and analyze traffic efficiently.
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/v2.0.0/scripts/install.sh | shcargo install goku-bench
goku --versionGo 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:
As a requirement, you need rust installed:
$ cargo build --releaseCLI is versioned with SemVer v2.0.0.
See CONTRIBUTING.md.
Usage: goku [OPTIONS] --target <TARGET>
Options:
-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
--timeout <timeout_ms> Timeout value in ms, defaults set to 30000
-h, --help Prints help
-V, --version Prints version information--target -tSpecifies the operation and url to make the request, default to GET.<br>
Format: GET https://localhost:3000<br>
--request-body -r OptionalSpecifies the path of file with the body to send.<br>
--clients -cSpecifies the number of concurrent calls to be used, defaults to 1.
--iterations -iSpecifies the total number of calls to be performed, default to 1.
--duration -dSpecifies the duration of the test in seconds.
--headers OptionalSpecifies the headers to be sent.<br>
--scenario OptionalSpecifies the scenario file in yaml format.<br>
target: POST http://localhost:3000/
clients: 50
requests: 1000
headers:
- key: "bar"
value: "foo"
- key: "Content-Type"
value: "application/json"
body: "{\"firstName\": \"Terry\",
\"lastName\": \"Medhurst\",
\"maidenName\": \"Smitham\",
\"age\": 50}"
--helpPrints help.
--versionPrints version information.
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:3000goku --target "GET http://localhost:3000" --headers Content-Type:application/json --headers bar:foo goku -c 50 -i 1000 -r body.json --target "POST http://localhost:3000"
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 msSee LICENSE.
If you appreciate all the job done in this project, a small donation is always welcome:
jcaromiq/goku
February 6, 2023
July 2, 2025
Rust