Я нахожу проблемы с использованием log4js-protractor-appender
Мой код файла log4js.js
'use strict';
var log4js = require('log4js');
var log4jsGen = {
getLogger: function getLogger() {
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('./ApplicationLogs.log'), 'logs');
var logger = log4js.getLogger('logs');
return logger;
}
};
module.exports = log4jsGen;
Мой файл conf.js (только для раздела appender)
"appenders": [{
"type": "log4js-protractor-appender",
"append": 'false',
"maxLogSize": 20480,
"backups": 3,
"category": "relative-logger"
}],
Проблема:
1) Есть ли способ, что журналы будут перезаписываться при каждом запуске. 2) Почему log4js-protractor-appender не работает, вместо этого работает log4js, заслуга предыдущего состоит в том, что он разрешает обещания, которые передаются в качестве аргумента.
2 ответа
Это отличный вопрос. Да log4js-транспортир-аппендер - это круто. Он построен специально для сред на базе Protractor и помещает все команды регистратора в поток управления Protractor и разрешает обещания Protractor перед регистрацией.
Вы использовали это неправильно. Параметры appender не являются частью параметров конфигурации Protractor, но могут быть интегрированы. Подход у вас немного старый, и я обновил пост в блоге
Это шаги как ответ на ваш вопрос-2
Шаг 1: Установите модуль log4js npm
Шаг 2. Установите модуль log4js-protractor-appender.
Шаг 3: Добавьте логику создания объекта регистратора в транспортир beforeLaunch()
и назначить его на глобальный объект браузера транспортир
'use strict';
var log4js = require('log4js');
beforeLaunch:function(){
if (fs.existsSync('./logs/ExecutionLog.log')) {
fs.unlink('./logs/ExecutionLog.log')
}
log4js.configure({
appenders: [
{ type: 'log4js-protractor-appender', category: 'protractorLog4js' },
{
type: "file",
filename: './logs/ExecutionLog.log',
category: 'protractorLog4js'
}
]
});
},
onPrepare: function() {
browser.logger = log4js.getLogger('protractorLog4js');
},
Шаг 4. Использование объекта logger в ваших тестах путем доступа через browser.logger
describe('sample test', function(){
it('Sample Check', function(){
browser.get("http://www.protractortest.org/#/");
browser.logger.info("Testing Log4js");
browser.sleep(5000);
browser.logger.info('Displayed text is:', browser.getCurrentUrl());
var elm = element(by.css('.lead'))
browser.logger.info('Displayed text is:', elm.getText());
});
});
Но одна вещь, на которую следует обратить внимание, - это приложение, которое является консольным приложением и не сможет записывать в файл. Файл все еще будет содержать неразрешенные обещания
Пример вывода:
[21:54:23] I/local - Starting selenium standalone server...
[21:54:23] I/launcher - Running 1 instances of WebDriver
[21:54:25] I/local - Selenium standalone server started at http://192.168.1.5:60454/wd/hub
Started
[2017-02-03 21:54:30.905] [INFO] protractorLog4js - Testing Log4js
[2017-02-03 21:54:35.991] [INFO] protractorLog4js - Displayed text is: http://www.protractortest.org/#/
[2017-02-03 21:54:36.143] [INFO] protractorLog4js - Displayed text is: Protractor is an end-to-end test framework for Angular and AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would.
.
Ответьте на свой вопрос 1: Как перезаписывать журналы при каждом запуске. Я добавил простую логику в beforeLaunch()
удалить старые журналы, если они существуют, и его фрагмент кода, который я вставил выше
Я проверил эту проблему и выполнил шаги, упомянутые в ответе 1, и это работает для меня.
Ранее я получал вывод журнала только в консоли, но теперь я получаю журнал в консоли и файл также.
Я исправил передачу пути к файлу и установил тип: "file" в log4js в файле конфигурации.
Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.
Спасибо