Мы хотим запустить тесты транспортира на Jenkins, поэтому было бы очень полезно, если бы был репортер junit (например, у karma), чтобы Дженкинс мог сообщать о состоянии тестов.
Мои 2 цента: если вы используете Grunt в качестве инструмента сборки, вы можете запускать тесты Protractor с помощью grunt-jasmine-node и настраивать его для получения отчетов, подобных JUnit!
Как сделать это в вашем файле конфигурации лишь слегка хакерским способом - я проверил это с помощью собственного набора тестов Protractor:
npm install jasmine-reporters
Ваш файл конфигурации:
require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(
'outputdir/', true, true));
// The main suite of Protractor tests.
exports.config = {
seleniumServerJar: './selenium/selenium-server-standalone-2.35.0.jar',
chromeDriver: './selenium/chromedriver',
seleniumAddress: 'http://localhost:4444/wd/hub',
// Spec patterns are relative to this directory.
specs: [
'*_spec.js'
],
capabilities: {
'browserName': 'chrome'
},
baseUrl: 'http://localhost:8000',
};
Дополнительные примеры теперь показаны в https://github.com/angular/protractor/blob/master/spec/junitOutputConf.js.
Принимает ли он относительный или абсолютный путь каталога. Абсолютный путь работает, а относительный путь - нет. Я пробовал такие варианты, как ../Reports, но это бесполезно
жасмин.getEnv().addReporter(
новый jasmine.JUnitXmlReporter('xmloutput', правда, правда));
},
исследовано и работает, игнорируйте мой последний комментарий
Я не был достаточно умен, поэтому я ожидал, что папка будет создана, но на самом деле папку нужно создать заранее.
@juliemr Как использовать его с двумя экземплярами Protractor, работающими параллельно, например, через grunt-concurrent
? Это необходимо, чтобы мы могли одновременно запускать тесты в Firefox и Chrome, но это заставит один XML заменить другой, что смутит Дженкинса.
Может быть, Protractor должен знать, как работать в Parallel по таким причинам, подобно тому, что делает Karma?
@mzgol Вы пытались заставить каждую цель, работающую как параллельная задача, выводить другой отчет junit xml в зависимости от платформы? Вы можете просто создать новую выходную папку на основе целевого имени.
Вы также можете изучить цели с несколькими конфигурациями в Jenkins, которые позволяют вам выполнять шаги сборки параллельно, каждый из которых имеет чистую среду. Он также имеет отличные функции, такие как сборки пробного камня, и позволяет вам регулировать параллелизм лучше, чем ворчание.
Существует ли подобный конфиг для мокко? (поскольку я не использую Жасмин)
@mzgol Я попробовал предложение от jvandyke (спасибо), и оно у меня работает нормально:
onPrepare: function(){
require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then(function(caps){
var browserName = caps.caps_.browserName.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = browserName + "-" + browserVersion + "-";
jasmine.getEnv().addReporter(new
jasmine.JUnitXmlReporter("protractor_output", true, true,prePendStr));
});
},
Спасибо. У меня тоже работает:
при подготовке: функция () {
требуют('жасмин-репортеры');
var capsPromise = browser.getCapabilities();
capsPromise.then (функция (шапки) {
var имя_браузера = caps.caps_.имя_браузера.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = имя_браузера + "-" + версия_браузера + "-";
jasmine.getEnv().addReporter(новый
jasmine.JUnitXmlReporter("protractor_output", true, true, prePendStr));
});
},
Я создал html-репортер поверх этого. Пожалуйста, дайте мне знать ваши комментарии
https://github.com/jintoppy/protractor-html-screenshot-reporter
Может быть идея добавить создание папки в документы, так как я тоже споткнулся об этом @tracycummins !
@juliemr Устали от всех вариантов, перечисленных в примерах. Я получаю эту ошибку. Любые указатели приветствуются
/дома/гнездо/прототип/conf.js:19
jasmine.getEnv().addReporter(новый jasmine.JUnitXmlReporter('xmloutput', true, true));
^
TypeError: undefined не является функцией
в exports.config.onPrepare (/home/jack/prototype/conf.js:19:33)
в Runner.runFilenamesOrFns_ (/home/usr/lib/node_modules/protractor/lib/runner.js:64:9)
в Runner.runTestPreparers (/home/usr/lib/node_modules/protractor/lib/runner.js:91:8)
в runner.controlFlow.execute.then.jasmineNodeOpts (/home/usr/lib/node_modules/protractor/lib/frameworks/jasmine.js:39:12)
в webdriver.promise.ControlFlow.runInNewFrame_ (/home/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
в webdriver.promise.ControlFlow.runEventLoop_ (/home/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1404:8)
в обертке как _onTimeout
в Timer.listOnTimeout как ontimeout
==== асинхронная задача ====
запускать тестировщиков
в Object.exports.run (/home/usr/lib/node_modules/protractor/lib/frameworks/jasmine.js:38:24)
в driverprovider_.setupEnv.then.then.then.testResult (/home/usr/lib/node_modules/protractor/lib/runner.js:233:28)
в _fulfilled (/home/usr/lib/node_modules/protractor/node_modules/q/q.js:797:54)
в self.promiseDispatch.done (/home/usr/lib/node_modules/protractor/node_modules/q/q.js:826:30)
в Promise.promise.promiseDispatch (/home/usr/lib/node_modules/protractor/node_modules/q/q.js:759:13)
в /home/usr/lib/node_modules/транспортир/node_modules/q/q.js:525:49
при сбросе (/home/usr/lib/node_modules/protractor/node_modules/q/q.js:108:17)
в процессе._tickCallback (node.js:423:13)
в Function.Module.runMain (module.js:499:11)
// Пример файла конфигурации.
экспорт.config = {
// Адрес работающего Selenium-сервера.
seleniumAddress: ' http://localhost :4444/wd/hub',
allScriptsTimeout: 30000,
// Возможности, которые необходимо передать экземпляру веб-драйвера.
возможности: {
'имя_браузера': 'firefox'
},
// Шаблоны спецификаций относятся к текущей работе напрямую, когда
// транспортир вызывается.
спецификации: ['example_spec.js'],
// Опции для передачи Jasmine-node.
onPrepare: функция () {
требуют('жасмин-репортеры');
jasmine.getEnv().addReporter(новый jasmine.JUnitXmlReporter('xmloutput', true, true));
},
// Опции для передачи Jasmine-node.
жасминнодеоптс: {
showColors: правда,
по умолчаниюТимеаутИнтервал: 30000
}
};
привет @jkmurthy
Я столкнулся с той же самой проблемой. В последней версии [email protected] они изменили имя модуля. Документации по этому поводу нет, но она есть в этом файле.
https://github.com/larrymyers/jasmine-reporters/blob/master/src/junit_reporter.js
Тем не менее, я не мог заставить его работать, так как он говорит, что модуль «jasmineReporters» не определен.
Поэтому я переключился на более старую версию [email protected] , она отлично работала. Убедитесь, что вы создали каталог, который вы называете выходными данными в параметрах репортера.
Понизить версию jasmine-reporters до 0.4.1 не получилось
Пробовал с
onPrepare: функция () {
var имя_папки = (новая дата()).toString().split(' ').splice(1, 4).join(' ');
вар mkdirp = требуется ('mkdirp');
var newFolder = "./reports/" + имя_папки;
требуют('жасмин-репортеры');
mkdirp(newFolder, function(err) {
if (err) {
console.error(err);
} else {
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter(newFolder, true, true));
}
});
},
Пока не повезло
Это определенно проблема для меня. Используя jasmine-reporters 2.0, я получаю
D:\HgBuild\TPSOneSearch\Unstable\Tyler.TPS.OneSearch\Tyler.TPS.Web.OneSearch\app
\test\e2e\oneSearchChromeConf.js:29
jasmine.getEnv().addReporter(новый jasmine.JUnitXmlReporter(uri, t
правда, правда, ''));
^
TypeError: undefined не является функцией.
изменение «new jasmine.JUnitXmlReporter» на «jasmineReporters.JUnitXmlReporter» приводит к тому, что jasmineReporters не определено.
Если я верну jasmine-reporters обратно к 0.4.1, он отлично работает.
jasmine-reporters 2.0 имеет другой API, чем 1.x; нельзя просто вслепую обновляться; настроить свои вызовы.
Глядя на комментарий в файле junit_reporter.js для JUnitXmlReporter, я настроил свой файл conf следующим образом:
onPrepare: функция () {
требуют('жасмин-репортеры');
параметры переменной = {
savePath: 'путь к какому-то файлу',
закрепить: правда,
useDotNotation: правда
};
jasmine.getEnv().addReporter(новый jasmineReporters.JUnitXmlReporter(options));
},
это должно работать, не так ли?
Я получаю следующую ошибку «ReferenceError: jasmineReporters не определен»
/**
* Генерирует JUnit XML для данного запуска спецификации. Есть разные варианты
* чтобы контролировать, где записываются результаты, и значения по умолчанию
* установить как можно меньше файлов .xml. Можно сохранить
* один файл XML или файл XML для каждого describe
верхнего уровня или
* XML-файл для каждого describe
независимо от вложенности.
*
* Применение:
*
* jasmine.getEnv().addReporter(новый jasmineReporters.JUnitXmlReporter(options);
*
* @param {объект} [параметры]
* @param {string} Каталог [savePath] для сохранения файлов (по умолчанию: '')
* @param {boolean} [consolidateAll] следует ли сохранять все результаты теста в
* один файл (по умолчанию: true)
* ПРИМЕЧАНИЕ: если true, {filePrefix} рассматривается как полное имя файла (исключая
* расширение)
* @param {boolean} [consolidate] следует ли сохранять вложенные описания внутри
* тот же файл, что и их родитель (по умолчанию: true)
* ПРИМЕЧАНИЕ: значение true ничего не делает, если для consoleAll также установлено значение true.
* ПРИМЕЧАНИЕ. Значение false также устанавливает для консолидации All значение false.
* @param {boolean} [useDotNotation] следует ли разделять имена наборов с помощью
* точки вместо пробелов, т.е. "Class.init", а не "Class init" (по умолчанию: true)
* @param {string} [filePrefix] — это строковое значение, которое добавляется к
* Выходной файл xml (по умолчанию: junitresults-)
* ПРИМЕЧАНИЕ. Если для консолидации все установлено значение true, по умолчанию используется просто "junitresults" и
* это становится фактическим именем файла, т.е. "junitresults.xml"
*/
@john-bridges Можете ли вы обернуть свой код обратными галочками? Без него тяжело читать.
@john-bridges Ну, неудивительно, что переменная jasmineReporters
не определена, поскольку вы действительно ее не определяли. Вам нужно назначить модуль:
var jasmineReporters = require('jasmine-reporters');
@mzgol Я идиот, работает как шарм. Спасибо за вашу помощь, я ценю это.
Предыдущая версия jasmine-reporters
привязывала репортеров непосредственно к объекту jasmine
; теперь он подключается к собственному экспорту, что намного лучше.
Я вижу, откуда взялась путаница. ;)
@mzgol Согласен, намного лучше, еще раз спасибо.
[email protected]
поддерживает Jasmine 2.x и, как отмечалось/обсуждалось выше, имеет другой синтаксис и точку входа (на своем собственном объекте по сравнению с глобальным объектом jasmine
). Тем не менее, он _только_ поддерживает Jasmine 2.x, а не Jasmine 1.x, который использует Protractor. Таким образом, хотя вы можете получить прошлые ошибки в конфигурации транспортира, выполнив var jasmineReporters = require('jasmine-reporters'); new jasmineReporters.JUnitXmlReporter(/*...*/);
, вам будет трудно получить какой-либо значимый вывод, поскольку он ожидает событий Jasmine 2.x и интерфейса репортера.
Правильный способ заставить JUnitXmlReporter работать с Jasmine 1.x — немного изменить исходные инструкции @juliemr :
npm install jasmine-reporters@~1.0.0
Затем следуйте остальным ее инструкциям, как обычно.
Я переработал файл README jasmine-reporters, чтобы указать, чем [email protected]
отличается от [email protected]
. Я также добавил специальный раздел об использовании jasmine-reporters с Protractor, поскольку этот вопрос возникает часто.
Спасибо @ksraja за указание на серьезную нехватку документации.
Почему эта проблема продолжает закрываться, очевидно, что это все еще проблема.
onPrepare: function() {
require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('test-target/', true, true));
browser.driver.get('http://localhost:9000');
require('./test/e2e/models/login-page').login();
},
Выдает ошибку:
Running "protractor:e2e" (protractor) task
/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-reporters/src/jasmine.console
_reporter.js:2
if (! jasmine) {
^
ReferenceError: jasmine is not defined
at /Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-reporters/src/jasmine.
console_reporter.js:2:11
at Object.<anonymous> (/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-re
porters/src/jasmine.console_reporter.js:144:3)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Users/212400520/PredixExperience/predix-dashboard/node_modules/jasmine-re
porters/src/load_reporters.js:1:63)
at Module._compile (module.js:456:26)
>>
Fatal error: protractor exited with code: 8
@jonniespratley Я обнаружил, что npm install jasmine-reporters
по умолчанию устанавливает версию 1.0.1
.
Итак, убедитесь, что вы установили последнюю версию jasmine-reporters
. Например
npm install jasmine-reporters@~2.0.3 --save-dev
После этого я обновил конфигурацию транспортира следующим образом:
var jasmineReporters = require('jasmine-reporters');
exports.config = {
framework: 'jasmine2',
//...
//Other configurations...
//...
onPrepare: function () {
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
savePath: '..',
consolidateAll: false
}));
},
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 60000,
print: function() {}
}
};
Теперь jasmine-reporters у меня работает нормально.
В документации по транспортирам для обновления до фреймворка jasmine2 в разделе репортеров было бы неплохо, если бы был задокументирован ответ @luixaviles . Я не могу представить, что я единственный, кому было трудно понять, как получить отчеты junit для jasmine2. Конечно, как только я нашел это и перечитал текущую документацию, она стала яснее, но изначально я ошибочно прочитал ее, чтобы иметь в виду, что jasmine-reporters (совсем) не работают с jasmine2. Имея приведенный выше ответ или ссылку на файл readme jasmine-reporters, было бы немного проще.
попробовал отчеты жасмин
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter('../TestReports/test', true, true));
он работает хорошо, но не создается файл xml
я пытался добраться до https://github.com/angular/protractor/blob/master/spec/junitOutputConf.js , но дает 404
@spatchamatla В вашем примере используется странная комбинация синтаксиса [email protected] (упорядоченные аргументы) с тем, что выглядит как репортер [email protected] (jasmineReporters.JUnitXmlReporter vs jasmine.JUnitXmlReporter).
Попробуйте использовать правильный синтаксис для создания репортера и посмотрите, получится ли у вас дальше.
Изменено из примера в файле README jasmine-reporters:
var junitReporter = new jasmineReporters.JUnitXmlReporter({
savePath: '../TestReports/test'
});
jasmine.getEnv().addReporter(junitReporter);
Убедитесь, что папка «../TestReports/test» существует, так как я думаю, что это не удается
тоже молча.
В среду, 15 апреля 2015 г., в 16:33, Бен Лавридж, [email protected]
написал:
@spatchamatla https://github.com/spatchamatla В вашем примере используется
странная комбинация синтаксиса [email protected] (упорядоченные аргументы)
с тем, что выглядит как репортер [email protected]
(jasmineReporters.JUnitXmlReporter и jasmine.JUnitXmlReporter).Попробуйте использовать правильный синтаксис для создания генератора отчетов и посмотрите, получится ли
дальше.Изменено из примера в файле README jasmine-reporters:
var junitReporter = новый jasmineReporters.JUnitXmlReporter({
savePath: '../TestReports/тест'
});
jasmine.getEnv().addReporter(junitReporter);—
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/angular/protractor/issues/60#issuecomment-93451490 .
Никогда не будет плохой идеей, хотя jasmine-reporters будут использовать https://github.com/substack/node-mkdirp , чтобы попытаться создать каталог.
@bloveridge @spenoir , я перешел на [email protected] и использовал ниже
//For junit output reports
var reporters = require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then(function (caps) {
var browserName = caps.caps_.browserName.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = browserName + "-" + browserVersion + "-";
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('Protractor/TestReports', true, true, prePendStr));
});
он начал работать, единственным недостатком является создание папки в домашнем каталоге, а не в папке проекта. Когда я попытался использовать путь к папке проекта, он все еще говорит
Предупреждение: не удалось написать отчет junit для «../TestReports», «CHROME-41.0.2272.118-TestImpersonationPage.xml». Причины:
Попытка Rhino: java не определен
Попытка PhantomJs: окно не определено
Попытка NodeJS: EACCES, разрешение отклонено «/Users/TestReports»
я создал папку вручную и все еще показывает выше в консоли
Является ли «Protractor/TestReports» правильным путем и существует ли эта папка?
В среду, 15 апреля 2015 г., в 17:01, spatchamatla уведомления@github.com
написал:
@bloveridge https://github.com/bloveridge @spenoir
https://github.com/spenoir , я перешел на [email protected] и
использовал ниже//Для выходных отчетов junit
var reporters = require('jasmine-reporters');
var capsPromise = browser.getCapabilities();
capsPromise.then (функция (заглавные буквы) {
var имя_браузера = caps.caps_.имя_браузера.toUpperCase();
var browserVersion = caps.caps_.version;
var prePendStr = имя_браузера + "-" + версия_браузера + "-";
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('Protractor/TestReports', true, true, prePendStr));
});он начал работать, единственный недостаток - создание папки дома
каталог, а не в папку проекта. Когда я пытался использовать проект
путь к папке, он все еще говоритПопытка Rhino: java не определен
Попытка PhantomJs: окно не определено
Попытка NodeJS: аргументы path.resolve должны быть строкамия создал папку вручную и все еще показывает выше в консоли
—
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/angular/protractor/issues/60#issuecomment-93460326 .
«Protractor/TestReports» — это путь, который был создан в домашней папке, затем я использовал
jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter('../TestReports', true, true, prePendStr));
а я вручную создал
когда я запустил тест, он все еще дает
Предупреждение: не удалось написать отчет junit для «../TestReports», «CHROME-41.0.2272.118-TestImpersonationPage.xml». Причины:
Попытка Rhino: java не определен
Попытка PhantomJs: окно не определено
Попытка NodeJS: EACCES, разрешение отклонено «/Users/TestReports»
вы можете попробовать ослабить права доступа к папке TestReports, не уверен
после этого.
В среду, 15 апреля 2015 г., в 17:10, spatchamatla уведомления@github.com
написал:
«Protractor/TestReports» — это путь, созданный в домашней папке,
тогда я использовалjasmine.getEnv().addReporter(новый jasmine.JUnitXmlReporter('../TestReports', true, true, prePendStr));
а я вручную создал
[изображение: скриншот 15 апреля 2015 г., 12:07:09]
https://cloud.githubusercontent.com/assets/4671240/7163457/278cffa6-e368-11e4-9994-2c0b5d33f07c.pngкогда я запустил тест, он все еще дает
Предупреждение: не удалось написать отчет junit для «../TestReports»,
«CHROME-41.0.2272.118-TestImpersonationPage.xml». Причины:
Попытка Rhino: java не определен
Попытка PhantomJs: окно не определено
Попытка NodeJS: EACCES, разрешение отклонено «/Users/TestReports»—
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/angular/protractor/issues/60#issuecomment-93466365 .
Конечно, спасибо @spenoir за ваши предложения и вклад
отличная нить. очень помог.
думал, что у меня проблема - но нет. не могу найти как удалить :)
Продолжайте хорошую работу.
@jkmurthy @ksraja Кажется, что перечисленные jasmineReports на самом деле являются экспортом требуемой функции.
например,
var jasmineReporters = require('jasmine-reporters');
У меня работает пример в файле readme jasmine-reporters: https://github.com/larrymyers/jasmine-reporters#protractor
Если вам нужен только консольный вывод, меня порадовал https://github.com/bcaudan/jasmine-spec-reporter/blob/master/docs/protractor-configuration.md
@josephdpurcell ссылка, которую вы предоставили, также сработала для меня. Вот мой конфиг, надеюсь поможет!
Убедитесь, что вы установили пакет mkdirp, а также другие пакеты jasmine 2.x и jasmine-reporters 2.X.
Эта конфигурация создает папку, чтобы избежать тихого сбоя, если папка не существует.
var folderName = ('output_folder');
var mkdirp = require('mkdirp');
mkdirp(folderName, function(err) {
if (err) {
console.error(err);
} else {
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
consolidateAll: true,
savePath: folderName,
filePrefix: 'xmloutput-'
}));
}
});
Самый полезный комментарий
Как сделать это в вашем файле конфигурации лишь слегка хакерским способом - я проверил это с помощью собственного набора тестов Protractor:
npm install jasmine-reporters
Ваш файл конфигурации: