From 809674139870188675e34cda74628da9eab810b0 Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Fri, 14 Aug 2020 15:32:52 +0100 Subject: [PATCH] Update protractor.conf.js (#1606) * Update protractor.conf.js * add option to retry for wanted executions * cahnges --- e2e/e2e-config/hooks/after-launch.js | 21 -------- package-lock.json | 80 +++++++++++++++++++++++++++ package.json | 1 + protractor.conf.js | 81 +++++++++++++++++++++------- 4 files changed, 144 insertions(+), 39 deletions(-) delete mode 100644 e2e/e2e-config/hooks/after-launch.js diff --git a/e2e/e2e-config/hooks/after-launch.js b/e2e/e2e-config/hooks/after-launch.js deleted file mode 100644 index b94538db5..000000000 --- a/e2e/e2e-config/hooks/after-launch.js +++ /dev/null @@ -1,21 +0,0 @@ -const uploadOutput = require('../utils/upload-output'); - -const SAVE_SCREENSHOT = process.env.SAVE_SCREENSHOT === 'true'; - -async function afterLaunch() { - - if (SAVE_SCREENSHOT) { - console.log(`Save screenshot is ${SAVE_SCREENSHOT}, trying to save screenshots.`); - - try { - await uploadOutput(); - console.log('Screenshots saved successfully.'); - } catch (e) { - console.log('Error happened while trying to upload screenshots and test reports: ', e); - } - } else { - console.log(`Save screenshot is ${SAVE_SCREENSHOT}, no need to save screenshots.`); - } -} - -module.exports = afterLaunch; diff --git a/package-lock.json b/package-lock.json index 77acc444b..30af6688f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3384,6 +3384,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -4400,6 +4406,23 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "^1.0.1", + "deep-eql": "^0.1.3", + "type-detect": "^1.0.0" + } + }, + "chai-as-promised": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz", + "integrity": "sha1-CdekApCKpw39vq1T5YU/x50+8hw=", + "dev": true + }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -6275,6 +6298,23 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, "deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", @@ -13752,6 +13792,40 @@ } } }, + "protractor-retry": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/protractor-retry/-/protractor-retry-1.2.12.tgz", + "integrity": "sha512-ys9ZKduWy2xPPnFjRNqPKnczqlO7IUueQKYFVCAxG6gfTg1YcSzuS9TVobdp2R2mN5sjamHN6WuhlE6fpvkbhw==", + "dev": true, + "requires": { + "array-unique": "~0.3.2", + "chai": "3.x", + "chai-as-promised": "5.x", + "debug": "^2.1.1", + "lodash": "^4.17.12", + "mkdirp": "^0.5.1", + "q": "^1.4.1", + "xml2js": "~0.4.17", + "yargs": "^15.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "protractor-smartrunner": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/protractor-smartrunner/-/protractor-smartrunner-0.1.1.tgz", @@ -17108,6 +17182,12 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", diff --git a/package.json b/package.json index 1973c9b95..4867dee26 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ "node-stream-zip": "^1.9.1", "prettier": "^2.0.5", "protractor": "^7.0.0", + "protractor-retry": "^1.2.9", "protractor-smartrunner": "^0.1.1", "rxjs-tslint": "^0.1.8", "rxjs-tslint-rules": "^4.34.0", diff --git a/protractor.conf.js b/protractor.conf.js index 7f2b07b8e..3071bc074 100755 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -2,13 +2,14 @@ // https://github.com/angular/protractor/blob/master/lib/config.ts const path = require('path'); -const { SpecReporter } = require('jasmine-spec-reporter'); -const afterLaunch = require('./e2e/e2e-config/hooks/after-launch'); +const {SpecReporter} = require('jasmine-spec-reporter'); const fs = require('fs'); const resolve = require('path').resolve; const logger = require('./tools/helpers/logger'); +const retry = require('protractor-retry').retry; +const uploadOutput = require('./e2e/e2e-config/utils/upload-output'); -require('dotenv').config({ path: process.env.ENV_FILE }); +require('dotenv').config({path: process.env.ENV_FILE}); const SmartRunner = require('protractor-smartrunner'); const projectRoot = path.resolve(__dirname); @@ -19,7 +20,10 @@ const BROWSER_RUN = process.env.BROWSER_RUN; const width = 1366; const height = 768; +const SAVE_SCREENSHOT = process.env.SAVE_SCREENSHOT === 'true'; const API_CONTENT_HOST = process.env.API_CONTENT_HOST || 'http://localhost:8080'; +const MAXINSTANCES = process.env.MAXINSTANCES || 1; +const MAX_RETRIES = process.env.MAX_RETRIES || 1; function rmDir(dirPath) { try { @@ -108,23 +112,39 @@ exports.config = { SELENIUM_PROMISE_MANAGER: false, capabilities: { + + loggingPrefs: { + browser: 'ALL' // "OFF", "SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST", "ALL". + }, + browserName: 'chrome', + + maxInstances: MAXINSTANCES, + + shardTestFiles: true, + chromeOptions: { prefs: { - credentials_enable_service: false, - download: { - prompt_for_download: false, - default_directory: downloadFolder + 'credentials_enable_service': false, + 'download': { + 'prompt_for_download': false, + 'directory_upgrade': true, + 'default_directory': downloadFolder + }, + 'browser': { + 'setDownloadBehavior': { + 'behavior': 'allow', + 'downloadPath': downloadFolder + } } }, - args: [ - '--incognito', - ...(BROWSER_RUN === 'true' ? [] : ['--headless']), - '--disable-web-security', - '--remote-debugging-port=9222', + args: ['--incognito', + `--window-size=${width},${height}`, '--disable-gpu', - '--no-sandbox' - ] + '--no-sandbox', + '--disable-web-security', + '--disable-browser-side-navigation', + ...(BROWSER_RUN === true ? [] : ['--headless'])] } }, @@ -138,8 +158,9 @@ exports.config = { jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 100000, - print: function () {}, - ...SmartRunner.withOptionalExclusions(resolve(__dirname, './e2e/protractor.excludes.json')) + print: function () { + }, + ...(process.env.CI ? SmartRunner.withOptionalExclusions(resolve(__dirname, './e2e/protractor.excludes.json')) : {}) }, plugins: [ @@ -153,13 +174,20 @@ exports.config = { } ], + onCleanUp(results) { + if (process.env.CI) { + retry.onCleanUp(results); + } + }, + onPrepare() { if (process.env.CI) { const repoHash = process.env.GIT_HASH || ''; const outputDirectory = process.env.SMART_RUNNER_DIRECTORY; logger.info(`SmartRunner's repoHash: "${repoHash}"`); logger.info(`SmartRunner's outputDirectory: "${outputDirectory}"`); - SmartRunner.apply({ outputDirectory, repoHash }); + SmartRunner.apply({outputDirectory, repoHash}); + retry.onPrepare(); } const tsConfigPath = path.resolve(e2eFolder, 'tsconfig.e2e.json'); @@ -196,5 +224,22 @@ exports.config = { downloadPath: downloadFolder }); }, - afterLaunch + + afterLaunch: async function () { + if (SAVE_SCREENSHOT) { + console.log(`Save screenshot is ${SAVE_SCREENSHOT}, trying to save screenshots.`); + + try { + await uploadOutput(); + console.log('Screenshots saved successfully.'); + } catch (e) { + console.log('Error happened while trying to upload screenshots and test reports: ', e); + } + } else { + console.log(`Save screenshot is ${SAVE_SCREENSHOT}, no need to save screenshots.`); + } + if (process.env.CI) { + return retry.afterLaunch(MAX_RETRIES); + } + } };