Skip to content

Instantly share code, notes, and snippets.

@paulocheque
Last active December 15, 2015 14:18
Show Gist options
  • Save paulocheque/5272981 to your computer and use it in GitHub Desktop.
Save paulocheque/5272981 to your computer and use it in GitHub Desktop.
Benchmarks
# ab -n 2000 -c 200 https://url/
install_dependencies() {
brew install freetype
brew install libpng
brew install libevent
virtualenv venv --no-site-packages
source venv/bin/activate
pip install numpy
pip install matplotlib
pip install multi-mechanize
}
create_load_test() {
cat >config.cfg <<EOF
# http://testutils.org/multi-mechanize/
[global]
# seconds
run_time = 60
rampup = 0
results_ts_interval = 10
progress_bar = on
console_logging = off
xml_report = off
[user_group-2]
threads = 100
script = load_test1.py
EOF
cat >load_test1.py <<EOF
import time
import urllib2
URL = 'http://localhost:$1'
class Transaction(object):
def run(self):
req = urllib2.Request(url=URL)
resp = urllib2.urlopen(req)
content = resp.read()
assert (resp.code == 200), 'Bad Response: HTTP %s' % resp.code
if __name__ == '__main__':
trans = Transaction()
trans.run()
print trans.custom_timers
EOF
mkdir load-test
mkdir load-test/test_scripts
mv config.cfg load-test
mv load_test1.py load-test/test_scripts
rm -rf load-test/results/*
}
create_bottle_project() {
source venv/bin/activate
pip install bottle
mkdir $2
cd $2
cat >app.py <<EOF
import bottle
@bottle.route('/')
def index():
return "Hello World"
bottle.run(host='0.0.0.0', port=$1, quiet=True)
EOF
cat >run.sh <<EOF
python app.py
EOF
chmod a+x run.sh
create_load_test $1
cd ..
}
create_bottle_greenlets_project() {
source venv/bin/activate
pip install bottle gevent
mkdir $2
cd $2
cat >app.py <<EOF
from gevent import monkey; monkey.patch_all()
import bottle
@bottle.route('/')
def index():
return "Hello World"
bottle.run(host='0.0.0.0', port=$1, server='gevent', quiet=True)
EOF
cat >run.sh <<EOF
python app.py
EOF
chmod a+x run.sh
create_load_test $1
cd ..
}
create_tornado_project() {
source venv/bin/activate
pip install tornado
mkdir $2
cd $2
cat >app.py <<EOF
import tornado.ioloop
import tornado.web
class Home(tornado.web.RequestHandler):
def get(self):
self.write('Hello World')
application = tornado.web.Application([
(r'/?', Home),
],
)
if __name__ == "__main__":
application.listen($1)
tornado.ioloop.IOLoop.instance().start()
EOF
cat >run.sh <<EOF
python app.py
EOF
chmod a+x run.sh
create_load_test $1
cd ..
}
create_node_project() {
mkdir $2
cd $2
cat >app.js <<EOF
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen($1, '127.0.0.1');
EOF
cat >run.sh <<EOF
node app.js
EOF
chmod a+x run.sh
create_load_test $1
cd ..
}
run_load_test() {
cd $1
run.sh &
PID=$!
multimech-run load-test
kill -9 $PID
cd ..
}
mkdir benchmarks
cd benchmarks
# install_dependencies
create_bottle_project 5001 bottle
create_bottle_greenlets_project 5002 bottle-greenlets
create_tornado_project 5003 tornado
create_node_project 5004 node
run_load_test bottle
run_load_test bottle-greenlets
run_load_test tornado
run_load_test node
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment