summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorJohn McLear <john@mclear.co.uk>2012-02-25 16:54:27 +0000
committerJohn McLear <john@mclear.co.uk>2012-02-25 16:54:27 +0000
commitbbaa6bb7d2ee46f41c35bb30d0b938de9ec5c740 (patch)
tree684a2484a062a3f759b54865f902f5ebe8d2229f /bin
parent97905983815ca5b312a72bf54f3caadd3d82a501 (diff)
downloadetherpad-lite-bbaa6bb7d2ee46f41c35bb30d0b938de9ec5c740.zip
add stuff for how to do load testing
Diffstat (limited to 'bin')
-rw-r--r--bin/loadTesting/README75
-rwxr-xr-xbin/loadTesting/launcher.sh16
-rw-r--r--bin/loadTesting/loader.js20
3 files changed, 111 insertions, 0 deletions
diff --git a/bin/loadTesting/README b/bin/loadTesting/README
new file mode 100644
index 00000000..297756f9
--- /dev/null
+++ b/bin/loadTesting/README
@@ -0,0 +1,75 @@
+This load tester is extremely useful for testing how many dormant clients can connect to etherpad lite.
+
+TODO:
+Emulate characters being typed into a pad
+
+HOW TO USE (from @mjd75) proper formatting at: https://github.com/Pita/etherpad-lite/issues/360
+
+Server 1:
+Installed Node.js (etc), EtherPad Lite and MySQL
+
+Server 2:
+Installed Xvfb and PhantomJS
+
+I installed Xvfb following (roughly) this guide: http://blog.martin-lyness.com/archives/installing-xvfb-on-ubuntu-9-10-karmic-koala
+
+ #sudo apt-get install xvfb
+ #sudo apt-get install xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic
+
+Launched two instances of Xvfb directly from the terminal:
+
+ #Xvfb :0 -ac
+ #Xvfb :1 -ac
+
+I installed PhantomJS following this guide: http://code.google.com/p/phantomjs/wiki/Installation
+
+ #sudo add-apt-repository ppa:jerome-etienne/neoip
+ #sudo apt-get update
+ #sudo apt-get install phantomjs
+
+I created a small JavaScript file for PhatomJS to use to control the browser instances:
+
+### BEGIN JAVASCRIPT ###
+
+var page = new WebPage(),
+ t, address;
+
+if (phantom.args.length === 0) {
+ console.log('Usage: loader.js <some URL>');
+ phantom.exit();
+} else {
+ t = Date.now();
+ address = phantom.args[0];
+
+ var page = new WebPage();
+ page.onResourceRequested = function (request) {
+ console.log('Request ' + JSON.stringify(request, undefined, 4));
+ };
+ page.onResourceReceived = function (response) {
+ console.log('Receive ' + JSON.stringify(response, undefined, 4));
+ };
+ page.open(address);
+
+}
+
+### END JAVASCRIPT ###
+
+And finally a launcher script that uses screen to run 400 instances of PhantomJS with the above script:
+
+### BEGIN SHELL SCRIPT ###
+
+#!/bin/bash
+
+# connect 200 instances to display :0
+for i in {1..200}
+do
+ DISPLAY=:0 screen -d -m phantomjs loader.js http://ec2-50-17-168-xx.compute-1.amazonaws.com:9001/p/pad2 && sleep 2
+done
+
+# connect 200 instances to display :1
+for i in {1..200}
+do
+ DISPLAY=:1 screen -d -m phantomjs loader.js http://ec2-50-17-168-xx.compute-1.amazonaws.com:9001/p/pad2 && sleep 2
+done
+
+### END SHELL SCRIPT ###
diff --git a/bin/loadTesting/launcher.sh b/bin/loadTesting/launcher.sh
new file mode 100755
index 00000000..375b1544
--- /dev/null
+++ b/bin/loadTesting/launcher.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# connect 500 instances to display :0
+for i in {1..500}
+do
+ echo $i
+ echo "Displaying Some shit"
+ DISPLAY=:0 screen -d -m /home/phantomjs/bin/phantomjs loader.js http://10.0.0.55:9001/p/pad2 && sleep 2
+done
+
+# connect 500 instances to display :1
+for i in {1..500}
+do
+ echo $i
+ DISPLAY=:1 screen -d -m /home/phantomjs/bin/phantomjs loader.js http://10.0.0.55:9001/p/pad2 && sleep 2
+done
diff --git a/bin/loadTesting/loader.js b/bin/loadTesting/loader.js
new file mode 100644
index 00000000..ddcd0572
--- /dev/null
+++ b/bin/loadTesting/loader.js
@@ -0,0 +1,20 @@
+var page = new WebPage(),
+ t, address;
+
+if (phantom.args.length === 0) {
+ console.log('Usage: loader.js <some URL>');
+ phantom.exit();
+} else {
+ t = Date.now();
+ address = phantom.args[0];
+
+ var page = new WebPage();
+ page.onResourceRequested = function (request) {
+ console.log('Request ' + JSON.stringify(request, undefined, 4));
+ };
+ page.onResourceReceived = function (response) {
+ console.log('Receive ' + JSON.stringify(response, undefined, 4));
+ };
+ page.open(address);
+
+}