Skip to content

Instantly share code, notes, and snippets.

@axemclion
Created September 26, 2014 18:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save axemclion/64a0bbdb5d756e8eac3a to your computer and use it in GitHub Desktop.
Save axemclion/64a0bbdb5d756e8eac3a to your computer and use it in GitHub Desktop.
Test the stability of metrics that browser-perf generates
var browserstack = {
"selenium": "http://hub.browserstack.com:80/wd/hub",
"browsers": [{
'browserName': 'chrome',
'browser_version': 35,
'os': 'OS X',
'platform': 'OS X',
'os_version': 'Mavericks',
"browserstack.debug": false,
/*
* CHANGE THIS to actual credentials
*/
"browserstack.user": "",
"browserstack.key": ""
}]
};
var saucelabs = {
"selenium": {
"hostname": "ondemand.saucelabs.com",
"port": "80",
/*
* CHANGE THIS to actual credentials
*/
"user": "",
"pwd": ""
},
"browsers": [{
"browserName": "chrome",
"platform": "linux",
"version": "35",
"record-video": false,
"record-screenshots": false,
"record-logs": false,
"sauce-advisor": false
}]
}
var local = {
"selenium": 'http://localhost:4444/wd/hub',
"browsers": [{
"browserName": "chrome"
}]
}
/*
* Change caps to browserstack|saucelabs|local to test on different selenium servers
*/
var caps = local;
if (process.argv.length < 4) {
console.log('Usage: node index.js <site-to-test> <number-of-runs>');
console.log('Ensure that you set open index.js and set the right server you would like to test on.');
return;
}
var fs = require('fs');
var browserperf = require('browser-perf');
var url = process.argv[2];
var count = parseInt(process.argv[3]);
console.log('Remember to delete tmp.json if this is a new set of tests');
console.log('Running tests on %s, %d times', url, count);
var tmpfile = 'tmp.json';
(function runTest(i) {
if (i > count) {
convertToCsv();
} else {
browserperf(url, function(err, res) {
if (err) {
console.log(err);
return;
}
try {
var data = JSON.parse(fs.readFileSync(tmpfile, 'utf-8'));
} catch (e) {
data = {};
}
for (var key in res[0]) {
if (typeof data[key] === 'undefined') {
data[key] = {
values: []
};
}
data[key].values.push(res[0][key].value);
data[key].category = res[0][key].source;
}
fs.writeFileSync(tmpfile, JSON.stringify(data));
runTest(i + 1);
}, caps);
}
}(0));
function convertToCsv() {
var data = JSON.parse(fs.readFileSync(tmpfile, 'utf-8'));
var result = [];
for (var key in data) {
result.push(key, ',', data[key].category, ',', data[key].values.join(), '\n');
}
fs.writeFileSync('results.csv', result.join(''));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment