Настройка непрерывной интеграции транспортера с использованием Jenkins
Я пишу сценарии автоматизации тестирования с помощью Protractor, и теперь мне нужно настроить CI для этого с помощью Jenkins.
Задачи, которые необходимо выполнить:
- Запуск автономного сервера selenium.
- Запуск теста с использованием файла conf.js.
- Остановка автономного сервера selenium.
Может ли кто-нибудь помочь в этом отношении?
Ответы
Ответ 1
Для этого я создал небольшой bash script.
# start selenium
./node_modules/protractor/bin/webdriver-manager start > /dev/null 2>&1 &
# wait until selenium is up
while ! curl http://localhost:4444/wd/hub/status &>/dev/null; do :; done
# run the build
grunt cibuild --force
# stop selenium
curl -s -L http://localhost:4444/selenium-server/driver?cmd=shutDownSeleniumServer > /dev/null 2>&1
Этот script вызывается из проекта свободного стиля в jenkins (Build > Execute shell)
![enter image description here]()
Затем отчет о результатах теста генерируется путем считывания результатов теста транспортира. Следовательно, вы должны создавать отчеты юнита от транспортира, (смотрите здесь):
onPrepare: function() {
// The require statement must be down here, since jasmine-reporters
// needs jasmine to be in the global and protractor does not guarantee
// this until inside the onPrepare function.
require('jasmine-reporters');
jasmine.getEnv().addReporter(
new jasmine.JUnitXmlReporter('xmloutput', true, true));
},
Чтобы отчет стал заметным в jenkins, добавьте в задание post build: Publish JUnit test result report
:
![enter image description here]()
Ответ 2
В качестве альтернативы вы можете запустить это как задачу Grunt. Сначала установите хрюканье на Дженкинса. Установите пакеты NPM для protractor_webdriver и транспортира. Настройте файл конфигурации, чтобы указать путь к узлу node_module и пути к файлам конфигурации.
http://sideroad.secret.jp/articles/grunt-on-jenkins/
Затем установите модуль транспортира node. Файл Grunt будет похож на этот. Я создал тестовый каталог, в котором будут расположены файлы conf и spec.
module.exports = function (grunt) {
grunt.initConfig({
protractor_webdriver: {
your_target: {
options: {
path: 'node_modules/protractor/bin/',
command: 'webdriver-manager start'
}
}
},
protractor: {
options: {
configFile: "node_modules/protractor/referenceConf.js", // Default config file
keepAlive: true, // If false, the grunt process stops when the test fails.
noColor: false, // If true, protractor will not use colors in its output.
args: {
// Arguments passed to the command
}
},
your_target: {
options: {
configFile: "test/conf.js", // Target-specific config file
args: {} // Target-specific arguments
}
}
}
});
grunt.registerTask('p:test', [
'protractor_webdriver',
'protractor'
]);
});
Ответ 3
Самый новый транспортирщик позволяет запускать автономный сервер selenium непосредственно из conf.js(или любой точки входа вашего транспортиратора).
закомментируйте (или удалите) строку seleniumAddress: 'http://localhost:4444/wd/hub',
и замените ее на seleniumServerJar: './node_modules/protractor/selenium/latest.jar',
.
latest.jar
не установлен по умолчанию, я создал его как символическую ссылку на последнюю версию, установленную через npm install protractor --save
. Это дает больше времени для моих файлов conf.js
в том же каталоге.
В папке ./node_modules/protractor/selenium/
я запустил ln -s selenium-server-standalone-2.48.2.jar latest.jar
Ответ 4
Вы можете использовать Gulp, который намного проще.
После установки Gulp в Jenkins System вы можете установить зависимости npm (npm install) и запустить задачи Gulp напрямую, как команда windows batch в Jenkins, как показано ниже:
В фоновом режиме для запуска и запуска селенового сервера и предоставления различных других параметров вы можете использовать пакеты, такие как gulp - angular -protractor 'в файле gulpfile.js, как показано ниже:
gulpfile.js
'use strict';
var gulp = require('gulp'),
gulpProtractorAngular = require('gulp-angular-protractor'),
gulpStart = gulp.Gulp.prototype.start,
currentStartTaskName;
gulp.Gulp.prototype.start = function (task) {
currentStartTaskName = task;
gulpStart.apply(this, arguments);
};
function executeWebTests(suiteName, appName) {
return gulp.src([])
.pipe(gulpProtractorAngular({
'configFile': './conf.js',
'debug': false,
'autoStartStopServer': true,
args: [
'--suite', suiteName,
'--capabilities.browserName', 'chrome',
'--params.APPNAME', appName,
'--params.SUITENAME', currentStartTaskName,
'--capabilities.platformName', 'Windows'],
keepAlive: false
}))
.on('error', function (e) {
console.log('Ended with below ERROR::',e);
process.exit(1);
})
.on('end', function () {
console.log('Test complete');
process.exit();
});
}
gulp.task('RegressionSuiteTask', function () {
executeWebTests('regressionTests,','Application_Name');
});
conf.js
suites: {
regressionTests: ['testCases/**/*.js']//will run all specs in subfolders
},