Skip to content
forked from btfak/sniper

A powerful & high-performance http load tester

Notifications You must be signed in to change notification settings

yahaboss/sniper

 
 

Repository files navigation

Sniper Build Status

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

Alt text

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.

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 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.

####中文文档

About

A powerful & high-performance http load tester

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%