Last active
December 15, 2015 14:18
-
-
Save paulocheque/5272981 to your computer and use it in GitHub Desktop.
Benchmarks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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