Created
November 21, 2017 11:59
-
-
Save monolithed/ebd2a90ae7b43d2b743a16c002a1d10e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
let AccountManager = require('@qa/account-manager'); | |
let WebDriverIOUtils = require('@qa/wdio-utils'); | |
let capabilities = require('@qa/wdio-capabilities'); | |
let MochaHooks = require.resolve('@qa/wdio-mocha-hooks'); | |
let minimist = require('minimist'); | |
let VisualRegressionCompare = require('wdio-visual-regression-service/compare'); | |
let utils = new WebDriverIOUtils({ | |
cache: './cache/', | |
cases: './cases/' | |
}); | |
let account = new AccountManager.Hooks(); | |
/** | |
* Для запуска сервера мы можем использовать selenium-standalone, | |
* который нам доступен как сервис wdio-selenium-standalone-service или по ссылке | |
* https://www.npmjs.com/package/selenium-standalone | |
* | |
* chromedriver, которй также доступен как сервис wdio-chromedriver-service | |
* А также selenoid, который можно скачать с официального сайта http://aerokube.com/selenoid/latest/ | |
* | |
* Допустимые значения используемого драйвера: selenium-standalone, chromedriver, | |
* null или отсутствие значения это внешний сервер, например selenoid | |
*/ | |
let USED_DRIVER = 'chromedriver'; | |
/** @namespace browser **/ | |
exports.config = { | |
/* | |
* Настройки с которыми запущен сервер Selenium | |
* | |
* Операционная система: Windows | |
* Список доступных браузеров: Chrome, Firefox, Opera, IE 11 | |
* Грид: http://vagabond3.dev.mail.ru:4444/grid/console | |
* | |
* Операционная система: Linux | |
* Список доступных браузеров: Chrome, Firefox | |
* Грид: http://win110.dev.mail.ru:4444/grid/console | |
*/ | |
host: 'localhost', | |
/** 4444 — используется Selenium и Selenoid, 9515 для ChromeDriver */ | |
port: 4444, | |
/** /wd/hub — используется Selenium и Selenoid, / для ChromeDriver */ | |
path: '/wd/hub', | |
/* Базовый адрес тестирования */ | |
baseUrl: 'https://e.mail.ru', | |
/* Доступные значения: silent, verbose, command, data, result, error */ | |
logLevel: 'silent', | |
/* | |
* Максимальное время на выполнение команды. | |
* Если какая-то из команд фреймворка не получит за это время результат, | |
* то выполнение тестов будет прервано. | |
*/ | |
waitforTimeout: 30 * 1000, | |
/* Максимальное количество попыток на установление соединения с сервером */ | |
connectionRetryCount: 1, | |
/* Максимальное время на выполнение повторного запроса */ | |
connectionRetryTimeout: 30 * 1000, | |
/* Количество инстансов параллельного запуска тестов */ | |
maxInstances: 1, | |
/** Использовать синхронное API */ | |
sync: true, | |
/* | |
* Опция позволяет отладчику остановить выполнение тестов | |
* в месте вызова инструкции debugger. | |
* Для использования этой опции требуется наличие пакета node-inspector | |
*/ | |
debug: false, | |
/** Конфигурация для сервиса visual-regression */ | |
visualRegression: { | |
compare: new VisualRegressionCompare.LocalCompare({ | |
referenceName : utils.screenshot('./store/shots/expected'), | |
screenshotName: utils.screenshot('./store/shots/actual'), | |
diffName : utils.screenshot('./store/shots/diff') | |
}) | |
}, | |
/** | |
* Список сервисов, которые будет использоваться для запуска тестов | |
*/ | |
services: [ | |
/** Позволяет использовать отладочный режим */ | |
'debug', | |
/** | |
* Обеспечивает работу Allure-реппортов | |
* ВНИМАНИЕ! Не убирать, без него тесты не взлетят ;) | |
*/ | |
'yoda-allure-utils', | |
/** Расширенный набор комманд */ | |
'yoda-api', | |
/** Сервис для регрессионого тестирования через сравнение скриншотов */ | |
'visual-regression', | |
/** Добавляет нотификацию о прогоне */ | |
'notify' | |
], | |
plugins: { | |
/** Вспомогательный модуль для быстрого сохранения эталонных скриншотов */ | |
'wdio-screenshot': {} | |
}, | |
/* Доступные значения: cucumber, mocha, jasmine */ | |
framework: 'mocha', | |
mochaOpts: { | |
'ui': 'bdd', | |
/** Расширение интерфейса Mocha */ | |
'require': MochaHooks, | |
/** Включает поддержку TypeScript */ | |
'compilers': ['ts-node/register'], | |
/* | |
* Количество попыток на выполнение теста, который не был пройден | |
* Используйте эту опцию с умом! Если в процессе выполнения теста вы изменили | |
* состояние аккаунта, то повторное его выполнение только усугубит разбор отчета | |
* и увеличит общее время выполнения тестового прогона. | |
* Вместо этой опции рекомендуется использовать метод this.retries | |
*/ | |
'retries': 0, | |
/** Максимальное время на ожидание результата выполнения теста */ | |
'timeout': 15 * (60 * 1000), | |
/** Показывать стек-трейс */ | |
'trace': true, | |
'full-trace': true, | |
/** Ругаться на вызов устаревших функций */ | |
'throw-deprecation': true, | |
'trace-deprecation': true | |
}, | |
/* Для реппортера Allure требуется наличие установленного плагина в CI */ | |
reporters: ['spec', 'yoda-log', 'yoda-re-check', 'junit', 'yoda-allure'], | |
reporterOptions: { | |
outputDir: utils.cache('reports'), | |
'yoda-allure': { | |
outputDir: utils.cache('yoda-allure-results') | |
}, | |
'yoda-log': { | |
title: /(TESTMAIL-\d+)/ | |
}, | |
'yoda-re-check': { | |
title: /(TESTMAIL-\d+)/, | |
param: 'TEST_GREP' | |
} | |
}, | |
/* Директория, куда будут складываться скриншоты */ | |
// @see https://github.com/webdriverio/webdriverio/issues/1591 | |
// screenshotPath: utils.cache('shots'), | |
/* Директория, куда будут складываться логи сервера */ | |
seleniumLogs: utils.cache('logs'), | |
/* | |
* Список файлов, которые требуется запустить если не передано значение для | |
* опции --suite. | |
* Порядок файлов сохраняется, дубликаты исключаются | |
* ВАЖНО: без метода utils.specs опция --grep не будет работать | |
* если не передано значение в --suite! | |
* | |
* @see utils.specs — [ <files> ] | |
*/ | |
specs: utils.specs(/** [ ... ] */), | |
/** | |
* Набор тестовых кейсов | |
* ВАЖНО: без метода utils.suites опция --grep работать не будет! | |
* | |
* @see utils.suites — { <suite>: [ <files> ] } | |
*/ | |
suites: utils.suites(/** { ...} */), | |
/* | |
* Набор инстансов | |
* | |
* Конфигуратор https://wiki.saucelabs.com/display/DOCS/Platform+Configurator | |
* Внутри каждой группы доступны поля specs и exclude | |
* | |
* Список стандартных опций WebDriver и пр. см ниже по ссылке: | |
* @see https://stash.mail.ru/projects/QA/repos/wd-capabilities/browse | |
*/ | |
capabilities: utils.capabilities([ | |
{ | |
browserName: 'chrome' | |
} | |
]), | |
onPrepare () { | |
utils.clean(); | |
}, | |
before (capabilities, specs) { | |
browser.on('error', error => { | |
console.log('[WebDriver Error]:', error); | |
}); | |
}, | |
afterSuite () { | |
account.discard(); | |
} | |
}; | |
/** Управление автоматическим запуском сервера */ | |
try { | |
// Пробуем получить опции для запуска из командной строки | |
let options = minimist(process.argv.slice(2)); | |
let { host, path, port, url, baseUrl, services = [ USED_DRIVER ] } = | |
Object.assign(exports.config, options); | |
// Устанавливаем параметры для требуемого драйвера | |
if (USED_DRIVER && /^(localhost|127\.0\.0\.1)$/.test(host)) { | |
switch (USED_DRIVER) { | |
case 'chromedriver': | |
path = '/'; | |
port = 9515; | |
break; | |
case 'selenium-standalone': | |
path = '/wd/hub'; | |
port = 4444; | |
break; | |
} | |
if (!services.includes(USED_DRIVER)) { | |
services.push(USED_DRIVER); | |
} | |
} | |
else { | |
// Сервис для запуска сервера требуется только для локального прогона | |
services = services.filter(service => service !== USED_DRIVER); | |
} | |
Object.assign(exports.config, { path, port, services }); | |
console.log(`Service started at ${host}:${port}${path} for ${url || baseUrl}`); | |
} catch (error) { | |
console.error('Please, pay your attention to: ', error.stack); | |
} | |
process.on('unhandledRejection', error => { | |
if (!error.seleniumStack) { | |
console.error('[UnhandledRejection Error]', error.stack); | |
} | |
}); | |
process.on('message', function (error) { | |
console.log('[Message Error]:', error.stack); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment