Skip to content
A powerful & high-performance http load tester
Branch: master
Clone or download
btfak Merge pull request #13 from btfak/develop
refactor: format code
Latest commit 82e2161 Oct 15, 2017


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.

Notice: This project is on pre-alpha stage !

Try it

Pre-compiled executables


  • 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

Alt text

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.

Alt text

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
$ go install
$ cp src/ ~

3. Parameter declaration



$sniper -c 10 -n 100


$sniper -c 10 -n 100 -p postData.txt


Command line parameter
   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
   -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.  
version = HTTP/1.1                            
#connection = keep-alive                      # to comment
connection = close
accept-encoding = gzip                        
user-agent = golang & sniper                  

#cookie = SSID=Abh_TYcDc6YSQh-GB              user-defined header

timeout = 30                                  socket timeout
failures = 64                                 max failure,socket failure over it then application break

login = jeff:supersecret                      HTTP Authenticate

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


Twin projects



Contact:yanyuan2046 at


Apache License, Version 2.0.


You can’t perform that action at this time.