From 0fd6051f52c48689c203cf4c9547588fd27aee8b Mon Sep 17 00:00:00 2001 From: Peter 'Pita' Martischka Date: Sat, 3 Nov 2012 15:55:14 +0000 Subject: [PATCH] test in different browsers --- .travis.yml | 1 + tests/frontend/travis/remote_runner.js | 155 ++++++++++++++++++------- 2 files changed, 113 insertions(+), 43 deletions(-) diff --git a/.travis.yml b/.travis.yml index ddaa5e911..ae6103d7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ node_js: - "0.6" install: - "bin/installDeps.sh" + - "export GIT_HASH=$(cat .git/HEAD | head -c 7)" before_script: - "tests/frontend/travis/sauce_tunnel.sh" script: diff --git a/tests/frontend/travis/remote_runner.js b/tests/frontend/travis/remote_runner.js index 6140782c4..1c753d492 100644 --- a/tests/frontend/travis/remote_runner.js +++ b/tests/frontend/travis/remote_runner.js @@ -1,6 +1,6 @@ var srcFolder = "../../../src/node_modules/"; -var log4js = require(srcFolder + "log4js"); var wd = require(srcFolder + "wd"); +var async = require(srcFolder + "async"); var config = { host: "ondemand.saucelabs.com" @@ -9,50 +9,119 @@ var config = { , accessKey: process.env.SAUCE_KEY } -var browser = wd.remote(config.host, config.port, config.username, config.accessKey); -var browserChain = browser.chain(); +var allTestsPassed = true; -var enviroment = { +var sauceTestWorker = async.queue(function (testSettings, callback) { + var browser = wd.remote(config.host, config.port, config.username, config.accessKey); + var browserChain = browser.chain(); + var name = process.env.GIT_HASH + " - " + testSettings.browserName + " " + testSettings.version + ", " + testSettings.platform; + testSettings.name = name; + console.log("Remote sauce test '" + name + "' started!"); + + browserChain.init(testSettings).get("http://localhost:9001/tests/frontend/", function(){ + //tear down the test excecution + var stopSauce = function(success){ + getStatusInterval && clearInterval(getStatusInterval); + clearTimeout(timeout); + + browserChain.quit(); + + if(!success){ + allTestsPassed = false; + } + + var testResult = knownConsoleText.replace(/\[red\]/g,'\x1B[31m').replace(/\[yellow\]/g,'\x1B[33m') + .replace(/\[green\]/g,'\x1B[32m').replace(/\[clear\]/g, '\x1B[39m'); + testResult = testResult.split("\n").map(function(line){ + var newLine = "[" + testSettings.browserName + (testSettings.version === "" ? '' : (" " + testSettings.version)) + "] "; + }.join("\n")); + + console.log(testResult); + console.log("Remote sauce test '" + name + "' finished!"); + + callback(); + } + + //timeout for the case the test hangs + var timeout = setTimeout(function(){ + stopSauce(false); + }, 60000 * 10); + + var knownConsoleText = ""; + var getStatusInterval = setInterval(function(){ + browserChain.eval("$('#console').text()", function(err, consoleText){ + if(!consoleText || err){ + return; + } + knownConsoleText = consoleText; + + if(knownConsoleText.indexOf("FINISHED") > 0){ + var success = knownConsoleText.indexOf("FAILED") === -1; + stopSauce(success); + } + }); + }, 5000); + }); +}, 2); //run 2 tests in parrallel + +// Firefox +sauceTestWorker.push({ 'platform' : 'Linux' , 'browserName' : 'firefox' , 'version' : '' - , 'name' : 'Halloween test' -} - -browserChain.init(enviroment).get("http://localhost:9001/tests/frontend/", function(){ - var stopSauce = function(success){ - getStatusInterval && clearInterval(getStatusInterval); - clearTimeout(timeout); - - browserChain.quit(); - setTimeout(function(){ - process.exit(success ? 0 : 1); - }, 1000); - } - - var timeout = setTimeout(function(){ - stopSauce(false); - }, 60000 * 10); - - var knownConsoleText = ""; - var getStatusInterval = setInterval(function(){ - browserChain.eval("$('#console').text()", function(err, consoleText){ - if(!consoleText || err){ - return; - } - var newText = consoleText.substr(knownConsoleText.length); - newText = newText.replace(/\[red\]/g,'\x1B[31m').replace(/\[yellow\]/g,'\x1B[33m') - .replace(/\[green\]/g,'\x1B[32m').replace(/\[clear\]/g, '\x1B[39m'); - - if(newText.length > 0){ - console.log(newText.replace(/\n$/, "")) - } - knownConsoleText = consoleText; - - if(knownConsoleText.indexOf("FINISHED") > 0){ - var success = knownConsoleText.indexOf("FAILED") === -1; - stopSauce(success); - } - }); - }, 5000); }); + +// Chrome +sauceTestWorker.push({ + 'platform' : 'Linux' + , 'browserName' : 'googlechrome' + , 'version' : '' +}); + +// Opera +sauceTestWorker.push({ + 'platform' : 'Windows 2008' + , 'browserName' : 'opera' + , 'version' : '' +}); + +//Safari +sauceTestWorker.push({ + 'platform' : 'Mac 10.6' + , 'browserName' : 'safari' + , 'version' : '' +}); + +// IE 7 +sauceTestWorker.push({ + 'platform' : 'Windows 2003' + , 'browserName' : 'iexplore' + , 'version' : '7' +}); + +// IE 8 +sauceTestWorker.push({ + 'platform' : 'Windows 2003' + , 'browserName' : 'iexplore' + , 'version' : '8' +}); + +// IE 9 +sauceTestWorker.push({ + 'platform' : 'Windows 2008' + , 'browserName' : 'iexplore' + , 'version' : '9' +}); + +// IE 10 +sauceTestWorker.push({ + 'platform' : 'Windows 2012' + , 'browserName' : 'iexplore' + , 'version' : '10' +}); + +sauceTestWorker.drain = function() { + setTimeout(function(){ + process.exit(allTestsPassed ? 0 : 1); + }, 3000); +} \ No newline at end of file