A Comprehensive Guide to the Open-Source HTTP Load Testing Tool Hey
Hey is an HTTP load testing tool developed using Golang, which can serve as an alternative to ApacheBench (ab). The tool was mentioned in the article "Socat vs. Brook Port Forwarding Non-Authoritative Comparison Test: Who is Stronger?". This article details the installation and usage of hey.

Installing Hey
The following instructions use a Linux 64-bit system. If you are using a different operating system, please download the corresponding client from the hey project address.
The author has provided pre-compiled binary packages for direct download and use:
# Download hey
wget https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
# If the download speed is slow, you can use the xiaoz software library link
wget http://soft.xiaoz.org/linux/hey_linux_amd64
# Grant execution permissions
chmod +x hey_linux_amd64
# Move the file to the sbin directory
mv hey_linux_amd64 /usr/sbin/hey
For other operating systems, please refer to the following:
- Linux 64-bit: https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
- Mac 64-bit: https://hey-release.s3.us-east-2.amazonaws.com/hey_darwin_amd64
- Windows 64-bit: https://hey-release.s3.us-east-2.amazonaws.com/hey_windows_amd64
Using Hey
Enter hey -h to view help information:
flag needs an argument: -h
Usage: hey [options...] <url>
Options:
-n Number of requests to run. Default is 200.
-c Number of workers to run concurrently. Total number of requests cannot
be smaller than the concurrency level. Default is 50.
-q Rate limit, in queries per second (QPS) per worker. Default is no rate limit.
-z Duration of application to send requests. When duration is reached,
application stops and exits. If duration is specified, n is ignored.
Examples: -z 10s -z 3m.
-o Output type. If none provided, a summary is printed.
"csv" is the only supported alternative. Dumps the response
metrics in comma-separated values format.
-m HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.
-H Custom HTTP header. You can specify as many as needed by repeating the flag.
For example, -H "Accept: text/html" -H "Content-Type: application/xml" .
-t Timeout for each request in seconds. Default is 20, use 0 for infinite.
-A HTTP Accept header.
-d HTTP request body.
-D HTTP request body from file. For example, /home/user/file.txt or ./file.txt.
-T Content-type, defaults to "text/html".
-a Basic authentication, username:password.
-x HTTP Proxy address as host:port.
-h2 Enable HTTP/2.
-host HTTP Host header.
-disable-compression Disable compression.
-disable-keepalive Disable keep-alive, prevents re-use of TCP
connections between different HTTP requests.
-disable-redirects Disable following of HTTP redirects
-cpus Number of used cpu cores.
(default for current machine is 2 cores)
Here is an example:
hey -n 10000 -c 100 -m GET https://www.qq.com/
-n: Total number of requests-c: Number of client connections-m: Request method, such asGET/POST, etc.
The example above means initiating 100 concurrent GET requests to https://www.qq.com/, with a total of 10,000 requests. After execution, hey will print statistical information, as follows:
Summary:
Total: 9.9769 secs
Slowest: 0.3740 secs
Fastest: 0.0350 secs
Average: 0.0971 secs
Requests/sec: 1002.3120
Response time histogram:
0.035 [1] |
0.069 [894] |■■■■■■
0.103 [6193] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.137 [2158] |■■■■■■■■■■■■■■
0.171 [464] |■■■
0.205 [118] |■
0.238 [84] |■
0.272 [56] |
0.306 [29] |
0.340 [2] |
0.374 [1] |
Latency distribution:
10% in 0.0702 secs
25% in 0.0802 secs
50% in 0.0917 secs
75% in 0.1056 secs
90% in 0.1266 secs
95% in 0.1510 secs
99% in 0.2334 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0016 secs, 0.0350 secs, 0.3740 secs
DNS-lookup: 0.0008 secs, 0.0000 secs, 0.1045 secs
req write: 0.0001 secs, 0.0000 secs, 0.0716 secs
resp wait: 0.0896 secs, 0.0320 secs, 0.2326 secs
resp read: 0.0054 secs, 0.0014 secs, 0.1429 secs
Status code distribution:
[200] 10000 responses
For more usage, please execute hey -h to view the help documentation.
Conclusion
Hey allows for convenient website stress testing and returns detailed statistical results. Additionally, stress testing tools can place a certain amount of pressure on the server, equivalent to launching a CC attack on the website, so please do not abuse them.
Hey project address: https://github.com/rakyll/hey