Ответ 1
Это действительно интересный вопрос. Наша организация изучает, сколько из нашего конвейера CI/CD можно сделать без сервера. Это прямо вверх по этой аллее.
К сожалению, я не думаю, что есть элегантный способ запустить protractor
из другого Node script. То есть, protractor
, похоже, не предоставляет API, который позволяет легко потреблять таким образом.
было задано, но (как относительный новичок в protractor
) комментарий перед закрытием вопроса не содержит достаточно подробностей для меня, чтобы знать, как принять такой подход. Итак, не очень элегантный подход:
Реальный процесс
Несмотря на предыдущие комментарии, вы действительно можете запустить protractor
из другого Node script, включая Node script, выполняющийся в среде AWMS Lambda. Там могут быть более красивые/лучшие способы сделать это, но я взял этот ответ и основал на нем следующую функцию лямбда:
'use strict';
module.exports.runtest = (event, context, callback) => {
var npm = require('npm');
var path = require('path');
var childProcess = require('child_process');
var args = ['conf.js'];
npm.load({}, function() {
var child = childProcess
.fork(path.join(npm.root, 'protractor/bin/protractor'), args)
.on('close', function(errorCode) {
const response = {
statusCode: 200,
body: JSON.stringify({
message: `Selenium Test executed on BrowserStack! Child process Error Code: ${errorCode}`,
}),
};
callback(null, response);
});
process.on('SIGINT', child.kill);
});
};
var args = ['conf.js'];
указывает на конфигурационный файл protractor
, который, в свою очередь, указывает на тест (index.js
в этом случае):
exports.config = {
'specs': ['./index.js'],
'seleniumAddress': 'http://hub-cloud.browserstack.com/wd/hub',
'capabilities': {
'browserstack.user': '<BROWSERSTACK_USER>',
'browserstack.key': '<BROWSERSTACK_KEY>',
'browserName': 'chrome'
}
};
Примечания
-
npm
- это зависимость от времени выполнения, использующая этот подход, то есть он должен быть упакован в ваш развертываемый. Это приводит к относительно большой лямбда-функции. В ~ 20 Мб он достаточно большой, чтобы вы больше не могли редактировать встроенный код в консоли AWS. Подход, который не упаковалnpm
в качестве зависимости от времени выполнения, был бы намного более приятным. - Не забывайте, что Lambda имеет жесткий 5-минутный срок. Ваши тесты нужно будет выполнить за меньшее время.
- Смотрите часы. Во многих случаях мой пример с игрушкой использует только браузер в течение нескольких секунд, но накладные расходы (от подключения к BrowserStack, в основном, я полагаю) заставляют Лямбду принимать 12-30 секунд в целом. Уплата за 30 секунд вычисления для использования браузера в течение 2,5 секунд не похожа на выигрыш. Более крупные партии тестов могут быть менее расточительными.
- Вы do получаете доступ к CloudWatch для регистрации дочернего процесса, не делая никаких дополнительных сантехнических работ, что приятно.
- Отказ от ответственности: мой пример прошел проверку только на счастливом пути, и я не эксперт в отношении дочерних процессов в Node.