SlideShare a Scribd company logo
Самодельная
параметризация и
параллелизация
тестов для JS
фреймворковРазработчик: Иван Котович
6 ноября, 2016
6 НОЯБРЯ, 2016
РАЗРАБОТЧИК: ИВАН КОТОВИЧ
Самодельная
параметризация и
параллелизация
тестов для JS
фреймворков
3CONFIDENTIAL
Иван Котович
Software Test Automation Engineer
• Более 2-х лет в JS автоматизации
• Разработал с нуля и внедрил в проект несколько
тестовых фреймворка на Java и JavaScript
• Участвую в Test Automation mentoring program как
ментор
• Читаю лекции в EPAM lab по автоматизации на JS
4CONFIDENTIAL
Параллелизация и параметризация на JS
Инструменты сборки (Grunt, Gulp)1
Параметризация с помощью инструментов сборки2
process.env объект содержащий настройки пользовательской среды3
child_process и его возможности4
Параллелизация тестов с помощью child process5
Итого6
5CONFIDENTIAL
Параллелизация и параметризация на JS
Инструменты сборки
…
6CONFIDENTIAL
Параллелизация и параметризация на JS
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
protractor:{
options:{
keepAlive:true,
noColor:false
},
target:{
options:{
configFile:'test/e2e/protractor-conf.js',
args:{
seleniumAddress:'http://localhost:4444/wd/hub',
baseUrl:'https://www.somehost.com/',
cucumberOpts:{
tags:['~@ignore']
}
}
}
}
}
});
grunt.loadNpmTasks('grunt-protractor-runner');
grunt.registerTask('e2e', 'Run e2e tests', function(target) {
console.log('E2e tests start');
grunt.task.run(['protractor:'+target]);
});
};
Инструменты сборки: Grunt
7CONFIDENTIAL
Параллелизация и параметризация на JS
gulp.task('protractor', function(callback) {
gulp.src(['example_spec.js'])
.pipe(gulpProtractorAngular({
'configFile': 'protractor.conf.js',
'debug': false,
'autoStartStopServer': true
}))
.on('error', function(e) {
console.log(e);
})
.on('end', callback);
});
Инструменты сборки: Gulp
Плюсы
• Лаконичен
• Простое API
• Потоковая передача данных
Минусы
• Меньше специализированных модулей
• Сложности в понимании процесса
потоковой передачи данных
8CONFIDENTIAL
Параллелизация и параметризация на JS
Параметризация с помощью инструментов сборки
var gulp = require('gulp'),
util = require('gulp-util');
gulp.task('cucumber', function() {
util.env.browser ? process.env.BROWSER = util.env.browser : process.env.BROWSER = 'chrome';
util.env.view ? process.env.VIEW = util.env.view : process.env.VIEW = 'desktop';
return gulp.src('test/features/*')
.pipe(cucumber({
'steps': 'test/step_definitions/*.js',
'support': 'test/support/*.js',
'format': 'json:test/reports/json/json-report.json',
'emitErrors': false
}));
});
gulp cucumber –-browser=chrome –-view=mobile
//выставление параметров через конфиг.bat
set BROWSER=firefox
set VIEW=mobile
gulp cucumber
9CONFIDENTIAL
Параллелизация и параметризация на JS
process.env объект содержащий настройки пользовательской среды
• process объект – глобаль ный объект
содержащий информацию о текущем node
процессе и предоставляющий инструменты
контроля над ним
• process доступен во всем приложении
• process.env содержит объект с информацией о
пользовательской среде
• process.env удобное место для хранения
конфигурационной информации для
приложения ( в том числе и для тестов )
$node -e ‘process.env.foo = "bar“’ && echo $foo
process.env.foo = 'bar';
console.log(process.env.foo);
chrome: {
'browserName' : 'chrome',
'chromeOptions' : {
'args': [chromeView[process.env.VIEW]]
}
}
10CONFIDENTIAL
Параллелизация и параметризация на JS
child_process и его возможности
• child_process – модуль который дает
возможность создавать дочерние процессы
• child_process предоставляет удобное API для
создания и управления дочерними процессами
• Child process такой же процесс содержащий
process объект
child_process.exec(command[, options][, callback])
child_process.execFile(file[, args][, options][, callback])
child_process.fork(modulePath[, args][, options])
child_process.spawn(command[, args][, options])
const exec = require('child_process').exec;
exec('cat *.js bad_file | wc -l', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
11CONFIDENTIAL
Параллелизация и параметризация на JS
Параллелизация тестов с помощью child process
gulp parallel = gulp cucumber Х 4
var q = require('q');
var exec = require('child-process-promise').exec;
gulp.task(‘parallel', function(){
var promises = [];
var f1 = function(){
return exec('gulp cucumber')
.then(function (results) {console.log(results.stdout);})
.catch(function (err) {console.error('ERROR: ', err);});
};
for( var i = 0; i<4; i++){
promises.push(f1());
}
return q.all(promises);
});
Минус: зачем нам 4
параллельных прогона с
одинаковыми параметрами ??
12CONFIDENTIAL
Параллелизация и параметризация на JS
SO
? …
13CONFIDENTIAL
Параметризация параллельных прогонов
Параллелизация и параметризация на JS
var q = require('q');
var exec = require('child-process-promise').exec;
gulp.task(‘parallel', function(){
var threads = util.env.threads ? util.env.threads : 3,
browsersStr = util.env.browsers ? util.env.browsers : 'chrome/chrome/chrome',
viewsStr = util.env.views ? util.env.views : 'desktop/desktop/desktop',
promises = [],
browsers = browsersStr.split('/'),
views = viewsStr.split('/');
var f1 = function(browser,view){
return exec('gulp cucumber --browser='+browser+' --view='+view)
.then(function (results) {console.log(results.stdout);})
.catch(function (err) {console.error('ERROR: ', err);});
};
for( var i = 0; i<threads; i++){
if(browsers[i] !== 'firefox' && browsers[i] !== 'phantomjs'){
browsers[i] = 'chrome';
}
if(views[i] !== 'mobile' && views[i] !== 'tabletL' && views[i] !== 'tabletP'){
views[i] = 'desktop';
}
promises.push(f1(browsers[i],views[i]));
}
return q.all(promises);
});
gulp parallel –threads=2 –-browsers=chrome/firefox –-views=mobile/desktop
14CONFIDENTIAL
Параллелизация и параметризация на JS
15CONFIDENTIAL
Параллелизация и параметризация на JS
Итого: Что мы имеем?
• Удобный параметризируемый прогон
тестов в одном потоке с
возможностью выбора браузера и
разрешения окна браузера через
командную строку или конфиг
• Удобный параметризируемый прогон
тестов в разных процессах с
возможностью задать количество
дочерних процессов, браузер и вью
для каждого
• Возможность добавлять
дополнительные параметры для
выборки по тэгам, спекам итд
• Поле для дальнейших исследований и
улучшений
• Удовлетворение от проделанной
работы
Note: Параллелизация в protractor и
других JS фреймворках основана на
тех же принципах
16CONFIDENTIAL
• “JavaScript Patterns” Stoyan Stefanov
Useful literature Useful links
• https://nodejs.org/api/
• https://www.npmjs.com/package/gru
nt
• https://www.npmjs.com/package/gul
p
• https://www.npmjs.com/package/chil
d-process-promise
Параллелизация и параметризация на JS
17CONFIDENTIAL
Параллелизация и параметризация на JS
ВОПРОСЫ ...

More Related Content

What's hot

Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
JSib
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
CodeFest
 
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsSelenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
COMAQA.BY
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
matroskin1980
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
Elogic Magento Development
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
automated-testing.info
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
DevDay
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
Konstantin Komelin
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ontico
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
DevDay
 
Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотите
CodeFest
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
vyacheslavmaslov
 

What's hot (20)

Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindingsSelenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
Selenide –  лаконичные тесты на Selenium 2 WebDriver + Java bindings
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
course js day 4
course js day 4course js day 4
course js day 4
 
Selenium vs AJAX
Selenium vs AJAXSelenium vs AJAX
Selenium vs AJAX
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотите
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
автоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Seleniumавтоматизация тестирования с помощью Selenium
автоматизация тестирования с помощью Selenium
 

Similar to Самодельная параметризация и параллелизация тестов на Webdriver (JS)

2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
Омские ИТ-субботники
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
Eugene Abrosimov
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Softengi
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
Ontico
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
MoscowJS
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
Timur Shemsedinov
 
обзор средств для тестирования Java script
обзор средств для тестирования Java scriptобзор средств для тестирования Java script
обзор средств для тестирования Java scriptAlexey Chumagin
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
Return on Intelligence
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
Pavlo Iuriichuk
 
Automating Canvas: difficult but possible
Automating Canvas: difficult but possibleAutomating Canvas: difficult but possible
Automating Canvas: difficult but possible
COMAQA.BY
 
Отладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/AjaxОтладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/Ajax
Alexander Shurkayev
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
oelifantiev
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java scriptNoveo
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
MoscowJS
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченкоsolit
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
Optimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinovOptimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinovyaevents
 
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
Yandex
 

Similar to Самодельная параметризация и параллелизация тестов на Webdriver (JS) (20)

2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
обзор средств для тестирования Java script
обзор средств для тестирования Java scriptобзор средств для тестирования Java script
обзор средств для тестирования Java script
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
Automating Canvas: difficult but possible
Automating Canvas: difficult but possibleAutomating Canvas: difficult but possible
Automating Canvas: difficult but possible
 
Отладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/AjaxОтладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/Ajax
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван ЗахарченкоSolit 2012, Enterprise разработка PHP приложений, Иван Захарченко
Solit 2012, Enterprise разработка PHP приложений, Иван Захарченко
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
 
Optimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinovOptimizaciya vremeni zagruzki_azat_razetdinov
Optimizaciya vremeni zagruzki_azat_razetdinov
 
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
Азат Разетдинов "Оптимизация времени загрузки на примере Яндекс.Карт"
 

More from COMAQA.BY

Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
COMAQA.BY
 
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
COMAQA.BY
 
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
COMAQA.BY
 
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьRoman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
COMAQA.BY
 
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
COMAQA.BY
 
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
COMAQA.BY
 
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
COMAQA.BY
 
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
COMAQA.BY
 
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
COMAQA.BY
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
COMAQA.BY
 
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
COMAQA.BY
 
Моя роль в конфликте
Моя роль в конфликтеМоя роль в конфликте
Моя роль в конфликте
COMAQA.BY
 
Организация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковОрганизация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиков
COMAQA.BY
 
Развитие или смерть
Развитие или смертьРазвитие или смерть
Развитие или смерть
COMAQA.BY
 
Системный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовСистемный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестов
COMAQA.BY
 
Эффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиЭффективная работа с рутинными задачами
Эффективная работа с рутинными задачами
COMAQA.BY
 
Как стать синьором
Как стать синьоромКак стать синьором
Как стать синьором
COMAQA.BY
 
Open your mind for OpenSource
Open your mind for OpenSourceOpen your mind for OpenSource
Open your mind for OpenSource
COMAQA.BY
 
JDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingJDI 2.0. Not only UI testing
JDI 2.0. Not only UI testing
COMAQA.BY
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, java
COMAQA.BY
 

More from COMAQA.BY (20)

Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
Тестирование аналогов инсталлируемых приложений (Android Instant Apps, Progre...
 
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
Anton semenchenko. Comaqa Spring 2018. Nine circles of hell. Antipatterns in ...
 
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
Vivien Ibironke Ibiyemi. Comaqa Spring 2018. Enhance your Testing Skills With...
 
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важностьRoman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
Roman Soroka. Comaqa Spring 2018. Глобальный обзор процесса QA и его важность
 
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
Roman Iovlev. Comaqa Spring 2018. Архитектура Open Source решений для автомат...
 
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
Vladimir Polyakov. Comaqa Spring 2018. Особенности тестирования ПО в предметн...
 
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
Kimmo Hakala. Comaqa Spring 2018. Challenges and good QA practices in softwar...
 
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
Дмитрий Лемешко. Comaqa Spring 2018. Continuous mobile automation in build pi...
 
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
Ivan Katunov. Comaqa Spring 2018. Test Design and Automation for Rest API.
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
 
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
Alexander Andelkovic. Comaqa Spring 2018. Using Artificial Intelligence to Te...
 
Моя роль в конфликте
Моя роль в конфликтеМоя роль в конфликте
Моя роль в конфликте
 
Организация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиковОрганизация приемочного тестирования силами матерых тестировщиков
Организация приемочного тестирования силами матерых тестировщиков
 
Развитие или смерть
Развитие или смертьРазвитие или смерть
Развитие или смерть
 
Системный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестовСистемный взгляд на параллельный запуск Selenium тестов
Системный взгляд на параллельный запуск Selenium тестов
 
Эффективная работа с рутинными задачами
Эффективная работа с рутинными задачамиЭффективная работа с рутинными задачами
Эффективная работа с рутинными задачами
 
Как стать синьором
Как стать синьоромКак стать синьором
Как стать синьором
 
Open your mind for OpenSource
Open your mind for OpenSourceOpen your mind for OpenSource
Open your mind for OpenSource
 
JDI 2.0. Not only UI testing
JDI 2.0. Not only UI testingJDI 2.0. Not only UI testing
JDI 2.0. Not only UI testing
 
Out of box page object design pattern, java
Out of box page object design pattern, javaOut of box page object design pattern, java
Out of box page object design pattern, java
 

Самодельная параметризация и параллелизация тестов на Webdriver (JS)

  • 1. Самодельная параметризация и параллелизация тестов для JS фреймворковРазработчик: Иван Котович 6 ноября, 2016
  • 2. 6 НОЯБРЯ, 2016 РАЗРАБОТЧИК: ИВАН КОТОВИЧ Самодельная параметризация и параллелизация тестов для JS фреймворков
  • 3. 3CONFIDENTIAL Иван Котович Software Test Automation Engineer • Более 2-х лет в JS автоматизации • Разработал с нуля и внедрил в проект несколько тестовых фреймворка на Java и JavaScript • Участвую в Test Automation mentoring program как ментор • Читаю лекции в EPAM lab по автоматизации на JS
  • 4. 4CONFIDENTIAL Параллелизация и параметризация на JS Инструменты сборки (Grunt, Gulp)1 Параметризация с помощью инструментов сборки2 process.env объект содержащий настройки пользовательской среды3 child_process и его возможности4 Параллелизация тестов с помощью child process5 Итого6
  • 5. 5CONFIDENTIAL Параллелизация и параметризация на JS Инструменты сборки …
  • 6. 6CONFIDENTIAL Параллелизация и параметризация на JS module.exports = function(grunt) { require('load-grunt-tasks')(grunt); grunt.initConfig({ protractor:{ options:{ keepAlive:true, noColor:false }, target:{ options:{ configFile:'test/e2e/protractor-conf.js', args:{ seleniumAddress:'http://localhost:4444/wd/hub', baseUrl:'https://www.somehost.com/', cucumberOpts:{ tags:['~@ignore'] } } } } } }); grunt.loadNpmTasks('grunt-protractor-runner'); grunt.registerTask('e2e', 'Run e2e tests', function(target) { console.log('E2e tests start'); grunt.task.run(['protractor:'+target]); }); }; Инструменты сборки: Grunt
  • 7. 7CONFIDENTIAL Параллелизация и параметризация на JS gulp.task('protractor', function(callback) { gulp.src(['example_spec.js']) .pipe(gulpProtractorAngular({ 'configFile': 'protractor.conf.js', 'debug': false, 'autoStartStopServer': true })) .on('error', function(e) { console.log(e); }) .on('end', callback); }); Инструменты сборки: Gulp Плюсы • Лаконичен • Простое API • Потоковая передача данных Минусы • Меньше специализированных модулей • Сложности в понимании процесса потоковой передачи данных
  • 8. 8CONFIDENTIAL Параллелизация и параметризация на JS Параметризация с помощью инструментов сборки var gulp = require('gulp'), util = require('gulp-util'); gulp.task('cucumber', function() { util.env.browser ? process.env.BROWSER = util.env.browser : process.env.BROWSER = 'chrome'; util.env.view ? process.env.VIEW = util.env.view : process.env.VIEW = 'desktop'; return gulp.src('test/features/*') .pipe(cucumber({ 'steps': 'test/step_definitions/*.js', 'support': 'test/support/*.js', 'format': 'json:test/reports/json/json-report.json', 'emitErrors': false })); }); gulp cucumber –-browser=chrome –-view=mobile //выставление параметров через конфиг.bat set BROWSER=firefox set VIEW=mobile gulp cucumber
  • 9. 9CONFIDENTIAL Параллелизация и параметризация на JS process.env объект содержащий настройки пользовательской среды • process объект – глобаль ный объект содержащий информацию о текущем node процессе и предоставляющий инструменты контроля над ним • process доступен во всем приложении • process.env содержит объект с информацией о пользовательской среде • process.env удобное место для хранения конфигурационной информации для приложения ( в том числе и для тестов ) $node -e ‘process.env.foo = "bar“’ && echo $foo process.env.foo = 'bar'; console.log(process.env.foo); chrome: { 'browserName' : 'chrome', 'chromeOptions' : { 'args': [chromeView[process.env.VIEW]] } }
  • 10. 10CONFIDENTIAL Параллелизация и параметризация на JS child_process и его возможности • child_process – модуль который дает возможность создавать дочерние процессы • child_process предоставляет удобное API для создания и управления дочерними процессами • Child process такой же процесс содержащий process объект child_process.exec(command[, options][, callback]) child_process.execFile(file[, args][, options][, callback]) child_process.fork(modulePath[, args][, options]) child_process.spawn(command[, args][, options]) const exec = require('child_process').exec; exec('cat *.js bad_file | wc -l', (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`stdout: ${stdout}`); console.log(`stderr: ${stderr}`); });
  • 11. 11CONFIDENTIAL Параллелизация и параметризация на JS Параллелизация тестов с помощью child process gulp parallel = gulp cucumber Х 4 var q = require('q'); var exec = require('child-process-promise').exec; gulp.task(‘parallel', function(){ var promises = []; var f1 = function(){ return exec('gulp cucumber') .then(function (results) {console.log(results.stdout);}) .catch(function (err) {console.error('ERROR: ', err);}); }; for( var i = 0; i<4; i++){ promises.push(f1()); } return q.all(promises); }); Минус: зачем нам 4 параллельных прогона с одинаковыми параметрами ??
  • 13. 13CONFIDENTIAL Параметризация параллельных прогонов Параллелизация и параметризация на JS var q = require('q'); var exec = require('child-process-promise').exec; gulp.task(‘parallel', function(){ var threads = util.env.threads ? util.env.threads : 3, browsersStr = util.env.browsers ? util.env.browsers : 'chrome/chrome/chrome', viewsStr = util.env.views ? util.env.views : 'desktop/desktop/desktop', promises = [], browsers = browsersStr.split('/'), views = viewsStr.split('/'); var f1 = function(browser,view){ return exec('gulp cucumber --browser='+browser+' --view='+view) .then(function (results) {console.log(results.stdout);}) .catch(function (err) {console.error('ERROR: ', err);}); }; for( var i = 0; i<threads; i++){ if(browsers[i] !== 'firefox' && browsers[i] !== 'phantomjs'){ browsers[i] = 'chrome'; } if(views[i] !== 'mobile' && views[i] !== 'tabletL' && views[i] !== 'tabletP'){ views[i] = 'desktop'; } promises.push(f1(browsers[i],views[i])); } return q.all(promises); }); gulp parallel –threads=2 –-browsers=chrome/firefox –-views=mobile/desktop
  • 15. 15CONFIDENTIAL Параллелизация и параметризация на JS Итого: Что мы имеем? • Удобный параметризируемый прогон тестов в одном потоке с возможностью выбора браузера и разрешения окна браузера через командную строку или конфиг • Удобный параметризируемый прогон тестов в разных процессах с возможностью задать количество дочерних процессов, браузер и вью для каждого • Возможность добавлять дополнительные параметры для выборки по тэгам, спекам итд • Поле для дальнейших исследований и улучшений • Удовлетворение от проделанной работы Note: Параллелизация в protractor и других JS фреймворках основана на тех же принципах
  • 16. 16CONFIDENTIAL • “JavaScript Patterns” Stoyan Stefanov Useful literature Useful links • https://nodejs.org/api/ • https://www.npmjs.com/package/gru nt • https://www.npmjs.com/package/gul p • https://www.npmjs.com/package/chil d-process-promise Параллелизация и параметризация на JS