Sniper is a powerful and high-performance http load tester writing in Golang. Basing on advantage of goroutine,achieving high concurrency,low memory,rich graphics display.
Pre-compiled executables
- Darwin 64 bit
- Darwin 32 bit
- Linux 64 bit
- Linux 32 bit
- FreeBSD 64 bit
- FreeBSD 32 bit
- Windows 64 bit
- Windows 32 bit
- GET / POST
- Keep-alive
- Https
- Graphics display result
- Multi-target
- Large file support
- Cross-platform——Linux,FreeBSD,Darwin
tool | language | keep-alive | https | multi-target | result-show | proxy |
ab | c | NO | YES | NO | html,standard output | YES |
siege | c | YES | YES | YES | csv,standard output | YES |
http_load | c | NO | YES | YES | standard output | YES |
webbench | c | NO | YES | NO | standard output | YES |
sniper | go | YES | YES | YES | js+html5,standard output | NO |
- Memory usage less than Apache Benchmark(ab)
- Execution speed close to ab
- Large file support
- Analyse each request and record it
- Output http connect time
- Output server processing time
- Output total time
Basing on dygraphs and html5,show the detail of server's performance. Get 1000 samples from whole result,show the details of connect,processing,and server's response.
The chart below show the total time and connect time. Wait,how can golang get the connect time ? In a word,Sniper implements part of HTTP protocol stack, discard net/http package to get the details. Also improve the performance.
Please reference Go install chapter of open-source Golang book "build-web-application-with-golang".
$ go get github.com/lubia/sniper
$ go install github.com/lubia/sniper
$ cp src/github.com/lubia/sniper/.sniperc ~
GET
$sniper -c 10 -n 100 http://www.google.com
POST
$sniper -c 10 -n 100 -p postData.txt http://www.google.com
Usage:
sniper [options] http[s]://hostname[:port][/path] http or https,ip or domain support
sniper [options] -f urls.txt multi-target,format:each url per line
Options:
-c, --concurrent concurrent users, default is 1.
-n, --requests number of requests to perform.
-r, --repetitions number of times to run the test.
-t, --time testing time, 30 mean 30 seconds.
-R, --sniperc specify an sniperc file to get config
(default is $HOME/.sniperc).
-f, --urlfile select a specific URLS file.
-p, --post select a specific file to POST.
-T, --content-type set Content-Type in request
(default is text/plain).
-V, --Version print the version number.
-h, --help print this section.
-C, --config show the current config.
-s, --plot plot detail transactions' info
(true | false,default set true,
notice: set -t will not plot anyhow).
Notice:default get config file from $HOME/.sniperc,config file and command line parameter complement each other. CMD -R to specified config file, CMD -C to get default configuration.
[protocol]
version = HTTP/1.1
#connection = keep-alive # to comment
connection = close
accept-encoding = gzip
user-agent = golang & sniper
[header]
#cookie = SSID=Abh_TYcDc6YSQh-GB user-defined header
[process]
timeout = 30 socket timeout
failures = 64 max failure,socket failure over it then application break
[Authenticate]
login = jeff:supersecret HTTP Authenticate
[ssl]
ssl-cert = /root/cert.pem ssl-cert file
ssl-key = /root/key.pem ssl-key file
ssl-timeout = 30 https timeout
chart output to current directory "plot.html"
Transactions: 1000 hits total requests
Availability: 100.00 % percentage completion
Elapsed time: 0.15 secs sniper elapsed time
Document length: 1162 Bytes single response length
TotalTransfer: 1.11 MB total data transfer
Transaction rate: 6625.60 trans/sec transactions per second
Throughput: 7.34 MB/sec throughput
Successful: 1000 hits result code not 200 also successful
Failed: 0 hits socket errors
TransactionTime: 1.495 ms(mean) each request total time (average)
ConnectionTime: 0.596 ms(mean) connect time(average,tcp handshake)
ProcessTime: 0.900 ms(mean) TransactionTime = ConnectionTime + ProcessTime
StateCode: 1000(code 200) the number of result code is 200
Blog:Programer
Contact:yanyuan2046 at 126.com