Traffic Generators
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
Upload the locust test file (Click here to see how to make a locust testfile) Exec this command (this only starts the interface to control the tests it doesnt actually start a test):
locust -f ./test.py --host=http://somedomain.io --master
You will get this:
SHOW LOCUST PICS HERE
Go to the web interface to control the test variables and to start and stop it.
Running on multiple hosts:
You will have a master slave setup where only one master exists.
Run the "running a test" steps on each node you want to have as part of the testing cluster but on each slave you should exec this instead:
locust -f ./test.py --host=http://somedomain.io --slave --master-host=x.x.x.x
Where x.x.x.x is the ip of the master you would have set up in the "running a test" section.
You will only need to use the one admin interface provided my the master. It should report whether the slaves are correctly setup and activey serving traffic.
Distributed Mode
Running locally is fine for basic testing and getting started with Locust, but most applications will not receive a significant load if you’re just running it from your local machine. It’s almost always necessary to run it in distributed mode. This is easy to do with a couple AWS nodes.
After installing Locust and moving your locustfile.py to all nodes, you can start the “master” node:
locust --host=http://localhost:5000 --master
Then start any “slave” nodes, giving them a reference to the master node:
locust --host=http://localhost:5000 --slave\ --master-host=192.168.10.100
Slowhttptest
Source: ubuntu.com
This section is under construction. |
- References
{{#widget:DISQUS
|id=networkm
|uniqid=Traffic Generators
|url=https://aman.awiki.org/wiki/Traffic_Generators
}}