Siege

Siege is an open source stress / regression test and benchmark utility.

siege -c100 -t30S -d10 -b -v aman.info.tm

Some Extensions

--header="Cookie: SESSb43b2d1d084de3872c89b0b125b64564=Jafuk06rppYAXIxWaU0LY2VmqxN997DsKU3BSgfArCM" 
-f /path/to/some-urls.txt

The some-urls.txt file is just a simple list of URLs on newlines:

http://www.mywebsite.com/about-us
http://www.mywebsite.com/contact-us

Httperf

Installation:

sudo apt install httperf

Usage:

httperf --server waf.avitest.com --port 80 --num-conns 100 --rate 10 --timeout 1

Curl

curl -s -o /dev/null -w "%{http_code}" http://waf.avitest.com
seq 100 | parallel -j0 curl -s -o /dev/null -w "%{http_code}" http://waf.avitest.com
for i in `seq 1 99999`; do echo "Status Code:"; curl -s -o /dev/null -w "%{http_code}" https://10.1.1.1; sleep 1; done

Apache Benchmark

ab -t 1 -n 1000 -c 300 http://waf.avitest.com/

Increase Apache MaxClients (now called MaxRequestWorkers in new versions) on Backend Server:

sudo nano /etc/apache2/mods-available/mpm_event.conf
MaxRequestWorkers         1000
ServerLimit         565

Locust

Installation:

sudo apt-get update
sudo apt-get -y install python-pip python-dev libxml2-dev libxslt-dev
sudo pip install locustio

Install pyzmq for tests across multiple servers to increase the testing capacity:

sudo pip install pyzmq

Set file limit to unlimited to ensure there is no OS problems with files at concurrency:

ulimit -n 9999

Locust File

Single “task” which gets a specific webpage:

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):

    @task
    def get_something(self):
        self.client.get("/something")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior


The test below logs a user in to groupster then requests what will be their home page 1 time for every 3 times it requests a group page:

from locust import HttpLocust, TaskSet

def login(l):
    l.client.post("/login/process", {"email":"me@someemail.com", "pass":"password"})

def index(l):
    l.client.get("/")

def group(l):
    l.client.get("/group/1/")

class UserBehavior(TaskSet):
    tasks = {index:1, group:3}

    def on_start(self):
        login(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait=5000
    max_wait=9000

Executing

  • Go to the directory with locust file & execute below command:
  • This only starts the interface to control the tests it does not actually start a test:
locust -f ./locastfile.py --host=http://somedomain.io --master

Go to the web interface to control the test variables and to start and stop it.

http://localhost:8089

Distributed Mode

  • To generate significant load it is almost always necessary to run it in distributed mode.
  • Master server do not simulate any user itself.
  • For this we have to start one or more slaves using –slave flag
  • Both the master and each slave machine, must have a copy of the locust test scripts when running Locust distributed.
  • Run below command on each slave nodes as well
 ulimit -n 9999

Start “master” node:

locust --host=http://somedomain.io --master

Then start any “slave” nodes, giving them a reference to the master node:

locust --host=http://somedomain.io --slave --master-host=192.168.10.100

Without WebUI

Runs the cli mode as below:

locust -f locustfile.py --no-web -c 1000 -r 100 --run-time 1h30m

In Distributed mode it will wait until all slave nodes have connected before starting the test:

locust -f locustfile.py --no-web -c 1000 -r 100 --run-time 1h30m --expect-slaves

Slowhttptest

Source: ubuntu.com

         This section is under construction.

Bombardier

Source: softwaretester.info

Preparation

  1. install git and curl packages

$ sudo apt install -y curl git

  1. download go (do not install from Debian)

$ curl -O https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz

  1. unzip archive

$ tar xvf go1.8.linux-amd64.tar.gz

  1. set owner and group (recursive)

$ sudo chown -R root:root go

  1. move all into target directory

$ sudo mv go /usr/local/

  1. install git and curl packages

$ sudo apt install -y curl git

  1. download go (do not install from Debian)

$ curl -O https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz

  1. unzip archive

$ tar xvf go1.8.linux-amd64.tar.gz

  1. set owner and group (recursive)

$ sudo chown -R root:root go

  1. move all into target directory

$ sudo mv go /usr/local/

Configure go (for user)

  1. create hidden go directory

$ mkdir ~/.go

  1. configure needed paths (inside .bashrc)

$ echo "GOPATH=$HOME/.go" >> ~/.bashrc $ echo "export GOPATH" >> ~/.bashrc $ echo "PATH=\$PATH:/usr/local/go/bin:\$GOPATH/bin" >> ~/.bashrc

  1. reload

$ source ~/.bashrc

  1. check go version

$ go version go version go1.8 linux/amd64


  1. create hidden go directory

$ mkdir ~/.go

  1. configure needed paths (inside .bashrc)

$ echo "GOPATH=$HOME/.go" >> ~/.bashrc $ echo "export GOPATH" >> ~/.bashrc $ echo "PATH=\$PATH:/usr/local/go/bin:\$GOPATH/bin" >> ~/.bashrc

  1. reload

$ source ~/.bashrc

  1. check go version

$ go version go version go1.8 linux/amd64

Install bombardier

  1. install packages from github

$ go get -u github.com/codesenberg/bombardier

  1. show bombardier help

$ bombardier --help


  1. install packages from github

$ go get -u github.com/codesenberg/bombardier

  1. show bombardier help

$ bombardier --help

Usage/Examples

  1. run with 5 connections on 10 sec.

$ bombardier -c 5 -k https://www.heise.de

Statistics Avg Stdev Max

 Reqs/sec        32.44      37.83        201
 Latency      152.35ms    72.93ms      1.24s
 HTTP codes:
   1xx - 0, 2xx - 329, 3xx - 0, 4xx - 0, 5xx - 0
   others - 0
 Throughput:     6.18MB/s

  1. run with 10 connections on 5 sec and show latency statistics.

$ bombardier -d 5s -c 10 -l -k https://www.heise.de

Statistics Avg Stdev Max

 Reqs/sec        56.51      59.10        251
 Latency      173.10ms   102.95ms      1.32s
 Latency Distribution
    50%   155.83ms
    75%   164.06ms
    90%   174.99ms
    99%   542.91ms
 HTTP codes:
   1xx - 0, 2xx - 294, 3xx - 0, 4xx - 0, 5xx - 0
   others - 0
 Throughput:    10.63MB/s


  1. run with 5 connections on 10 sec.

$ bombardier -c 5 -k https://www.heise.de

Statistics Avg Stdev Max

 Reqs/sec        32.44      37.83        201
 Latency      152.35ms    72.93ms      1.24s
 HTTP codes:
   1xx - 0, 2xx - 329, 3xx - 0, 4xx - 0, 5xx - 0
   others - 0
 Throughput:     6.18MB/s

  1. run with 10 connections on 5 sec and show latency statistics.

$ bombardier -d 5s -c 10 -l -k https://www.heise.de

Statistics Avg Stdev Max

 Reqs/sec        56.51      59.10        251
 Latency      173.10ms   102.95ms      1.32s
 Latency Distribution
    50%   155.83ms
    75%   164.06ms
    90%   174.99ms
    99%   542.91ms
 HTTP codes:
   1xx - 0, 2xx - 294, 3xx - 0, 4xx - 0, 5xx - 0
   others - 0
 Throughput:    10.63MB/s



References





{{#widget:DISQUS |id=networkm |uniqid=Traffic Generators |url=https://aman.awiki.org/wiki/Traffic_Generators }}