Skip to content
Snippets Groups Projects
Commit c9a70193 authored by squidfunk's avatar squidfunk Committed by Martin Donath
Browse files

Added SauceLabs test results integration

parent b6b5904a
No related branches found
No related tags found
No related merge requests found
...@@ -27,15 +27,25 @@ import * as sauce from "~/lib/servers/sauce-connect" ...@@ -27,15 +27,25 @@ import * as sauce from "~/lib/servers/sauce-connect"
import * as selenium from "~/lib/servers/selenium" import * as selenium from "~/lib/servers/selenium"
import Gemini from "gemini" import Gemini from "gemini"
import SauceLabs from "saucelabs"
/* ---------------------------------------------------------------------------- /* ----------------------------------------------------------------------------
* Task: run visual tests * Locals
* ------------------------------------------------------------------------- */ * ------------------------------------------------------------------------- */
export default (gulp, config, args) => { /* SauceLabs job name */
const id = process.env.TRAVIS const id = process.env.TRAVIS
? `Travis #${process.env.TRAVIS_BUILD_NUMBER}` ? `Travis #${process.env.TRAVIS_BUILD_NUMBER}`
: `Local #${moniker.choose()}` : `Local #${moniker.choose()}`
/* SauceLabs test results */
const passed = {}
/* ----------------------------------------------------------------------------
* Task: run visual tests
* ------------------------------------------------------------------------- */
export default (gulp, config, args) => {
return done => { return done => {
/* Start static file server */ /* Start static file server */
...@@ -72,15 +82,15 @@ export default (gulp, config, args) => { ...@@ -72,15 +82,15 @@ export default (gulp, config, args) => {
/* Setup and run Gemini */ /* Setup and run Gemini */
.then(runner => { .then(runner => {
const gemini = require( const setup = require(
path.join(process.cwd(), `${config.tests.visual}/config`, path.join(process.cwd(), `${config.tests.visual}/config`,
process.env.CI || process.env.SAUCE process.env.CI || process.env.SAUCE
? "gemini.sauce-connect.json" ? "gemini.sauce-connect.json"
: "gemini.selenium.json")) : "gemini.selenium.json"))
/* Add dynamic configuration to capabilities */ /* Add dynamic configuration to capabilities */
for (const key of Object.keys(gemini.browsers)) { for (const key of Object.keys(setup.browsers)) {
const caps = gemini.browsers[key].desiredCapabilities const caps = setup.browsers[key].desiredCapabilities
caps.tunnelIdentifier = id caps.tunnelIdentifier = id
caps.public = "private" caps.public = "private"
caps.name = id caps.name = id
...@@ -90,8 +100,23 @@ export default (gulp, config, args) => { ...@@ -90,8 +100,23 @@ export default (gulp, config, args) => {
caps.public = "public" caps.public = "public"
} }
/* Start Gemini and return runner upon finish */ /* Setup Gemini and test listeners */
return new Gemini(gemini).test(`${config.tests.visual}/suites`, { const gemini = new Gemini(setup)
if (process.env.CI || process.env.SAUCE) {
/* Initialize test run */
gemini.on(gemini.events.START_BROWSER, job => {
passed[job.sessionId] = true
})
/* Update state of test run */
gemini.on(gemini.events.TEST_RESULT, job => {
passed[job.sessionId] = passed[job.sessionId] && job.equal
})
}
/* Run tests */
return gemini.test(`${config.tests.visual}/suites`, {
reporters: ["flat", "html"], reporters: ["flat", "html"],
browsers: args.browsers ? [].concat(args.browsers) : null browsers: args.browsers ? [].concat(args.browsers) : null
}) })
...@@ -110,6 +135,22 @@ export default (gulp, config, args) => { ...@@ -110,6 +135,22 @@ export default (gulp, config, args) => {
}) })
}) })
/* Update SauceLabs jobs with test results */
.then(() => {
const saucelabs = new SauceLabs({
username: process.env.SAUCE_USERNAME,
password: process.env.SAUCE_ACCESS_KEY
})
const updates = Object.keys(passed).map(sessionId => {
return new Promise(resolve => {
saucelabs.updateJob(sessionId, {
passed: passed[sessionId]
}, resolve)
})
})
return Promise.all(updates)
})
/* Stop static file server */ /* Stop static file server */
}) })
.then(() => { .then(() => {
......
...@@ -103,6 +103,7 @@ ...@@ -103,6 +103,7 @@
"karma-webpack": "^2.0.1", "karma-webpack": "^2.0.1",
"mocha": "^3.2.0", "mocha": "^3.2.0",
"moniker": "^0.1.2", "moniker": "^0.1.2",
"saucelabs": "^1.4.0",
"sauce-connect-launcher": "^1.2.0", "sauce-connect-launcher": "^1.2.0",
"selenium-standalone": "^6.0.0" "selenium-standalone": "^6.0.0"
}, },
......
...@@ -3416,7 +3416,7 @@ https-browserify@0.0.1, https-browserify@~0.0.0: ...@@ -3416,7 +3416,7 @@ https-browserify@0.0.1, https-browserify@~0.0.0:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
https-proxy-agent@~1.0.0: https-proxy-agent@^1.0.0, https-proxy-agent@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
dependencies: dependencies:
...@@ -6206,6 +6206,12 @@ sauce-connect-launcher@^1.2.0: ...@@ -6206,6 +6206,12 @@ sauce-connect-launcher@^1.2.0:
lodash "^4.16.6" lodash "^4.16.6"
rimraf "^2.5.4" rimraf "^2.5.4"
saucelabs@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.4.0.tgz#b934a9af9da2874b3f40aae1fcde50a4466f5f38"
dependencies:
https-proxy-agent "^1.0.0"
sax@~1.2.1: sax@~1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment