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.
##Experience Pre-compiled executables
##Features
- GET / POST
- Keep-alive
- Https
- Graphics display result
- Multi-target
- Large file support
- Cross-platform——Linux,FreeBSD,Darwin
##Compare
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 |
##Performance
- Memory usage less than Apache Benchmark(ab)
- Execution speed close to ab
- Large file support
To get the detail of this performance comparison,click me
##Graphics display
- 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.
##Usage manual ###1. install Golang
Please reference Go install chapter of open-source Golang book "build-web-application-with-golang".
###2. install Sniper
$ go get github.com/lubia/sniper
$ go install github.com/lubia/sniper
$ cp src/github.com/lubia/sniper/.sniperc ~
###3. Parameter declaration
####Example GET
$sniper -c 10 -n 100 http://www.google.com
POST
$sniper -c 10 -n 100 -p postData.txt http://www.google.com
####Parameter
#####Command line parameter
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).
#####Config file parameter
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
#####Output
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
##About ####Twin projects
####Author
Lubia Yang,programmer in finance
Blog:Program Design
Contact:yanyuan2046 at 126.com
####Licence Apache License, Version 2.0.
####中文文档