A simple benchmark testing tool implemented in golang, the basic functions refer to wrk and ab, added some small features based on personal needs.
- http and socks5 proxy support
- good performance as wrk(some implements in golang not work well)
- simple code, easy to change
go get github.com/cnlh/benchmark
basic usage is quite simple:
benchmark [flags] url
with the flags being
-b string
the body of request
-c int
the number of connection (default 1000)
-cpu int
the number of cpu used
-h string
request header, split by \r\n
-host string
the host of request
-m string
request method (default "GET")
-n int
the number of request (default 100000)
-t int
request/socket timeout in ms (default 3000)
-proxy string
proxy of request
-proxy-transport string
proxy transport of request, "tcp" or "quic" (default "tcp")
-quic-protocol string
tls application protocol of quic transport (default "h3")
for example
benchmark -c 1100 -n 1000000 http://127.0.0.1/
benchmark -c 1100 -n 1000000 -proxy http://111:222@127.0.0.1:1235 http://127.0.0.1/
benchmark -c 1100 -n 1000000 -proxy socks5://111:222@127.0.0.1:1235 http://127.0.0.1/
benchmark -c 1100 -n 1000000 -h "Connection: close\r\nCache-Control: no-cache" http://127.0.0.1/
Running 1000000 test @ 127.0.0.1:80 by 1100 connections
Requset as following format:
GET / HTTP/1.1
Host: 127.0.0.1:80
1000000 requests in 5.73s, 4.01GB read, 33.42MB write
Requests/sec: 174420.54
Transfer/sec: 721.21MB
Error : 0
Percentage of the requests served within a certain time (ms)
50% 5
65% 6
75% 7
80% 7
90% 9
95% 13
98% 19
99% 23
100% 107
- Consumes more cpu when testing short connections