Тест не пройден с использованием регистратора Winston в транспортире - PullRequest
0 голосов
/ 12 сентября 2018

Справочная информация: Я использую Jasmine2 в качестве моей тестовой среды для Protractor и пытаюсь внедрить механизм логгера в среду, используя пакет winston для лучшей регистрации.

Проблема: Сбой теста с ошибкой ниже нуля в cmd, которая работала нормально до включения winston в скрипт. Не могли бы вы помочь мне в этом правильно?

Нулевая ошибка:

Report destination:   target\e2e\screenshots\my-report.html
[20:28:52] I/launcher - Running 1 instances of WebDriver
[20:28:52] I/hosted - Using the selenium server at http://127.0.0.1:4444/wd/hub

[20:28:56] I/launcher - 0 instance(s) of WebDriver still running
[20:28:56] I/launcher - chrome #01 failed 1 test(s)
[20:28:56] I/launcher - overall: 1 failed spec(s)
[20:28:56] E/launcher - Process exited with error code 1

Ниже приведены соответствующие файлы для справки:

Scenario_01.js:

describe('Scenario_01', function() {

 var Logging = require('./scripts/LoggingMech.js');
 var common = require('./scripts/CloseBrowsers.js');    
 var Login = require('./scripts/Login.js'); 


 it('Login', function() {
         browser.waitForAngularEnabled(false); 
         Login.login('admin','Adminpwd')
          .catch(error => Logging.Logger.log(error));
     });

afterAll(function(){
    common.closeBrowsers();
});
});

Login.js:

var Login = function() {

     this.login = async function(username, passwordKey){
     await browser.get('http://testwebsite.com/showCust');
     await element(by.name('USER')).sendKeys(username);
     await element(by.name('PASSWORD')).sendKeys(passwordKey);
     await element(by.xpath('/html/body/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[3]/td/form/input[9]')).click();
     await element(by.name('YES')).click();
     //browser.sleep(10000);

};
}
module.exports = new Login();

LoggingMech.js

const winston = require('winston');
var Logging = function() {

     this.Logger = function(){
      const logger = winston.createLogger({

           level: 'info',
           format: format.simple(),
            transports: [
                new winston.transports.Console(),
                new winston.transports.File({ filename: 'TodaysLog.log' })
                        ]
});

};
}
module.exports = new Logging();

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

@ sylvanBregy: Ниже приведены файлы с рекомендуемыми изменениями для справки.

Я мог быть свидетелем завершения теста при успешном входе в систему, но не уверен, почему в консоли произошла ошибка.

Кроме того, в logFile также ничего не было записано: (

Scenario_01

describe('Scenario_01', function() {
console.log("Into Scenario1");

 var Logging = require('./scripts/LoggingMech.js');
 var common = require('./scripts/CloseBrowsers.js');    
 var Login = require('./scripts/Login.js'); 


 it('Login', function() {
         browser.waitForAngularEnabled(false); 
         Login.login('admin','Adminpwd')
           Logging.info("foo"); //Neither this worked nor the below
           Logging.info();
     });

afterAll(function(){
    common.closeBrowsers();
});
});

Login.js

var Login = function() {
  console.log("Into Login Function");

     this.login = async function(username, passwordKey){
     await browser.get('http://testwebsite.com/showCust');
     await element(by.name('USER')).sendKeys(username);
     await element(by.name('PASSWORD')).sendKeys(passwordKey);
     await element(by.xpath('/html/body/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[3]/td/form/input[9]')).click();
     await element(by.name('YES')).click();
     //browser.sleep(10000);

};
}
module.exports = new Login();

LoggingMech.js

const winston = require('C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\winston\\lib\\winston');
//const winston = require('winston');

module.exports = winston.createLogger({
                     level: 'info',
                     format: 'simple',
                     transports: [
                            new winston.transports.Console(),
                            new winston.transports.File({filename:'./logs/TodaysLog.log',level: 'info'})
                            ],
});

Журнал консоли

Report destination:   target\e2e\screenshots\my-report.html
[20:22:58] I/launcher - Running 1 instances of WebDriver
[20:22:58] I/hosted - Using the selenium server at http://127.0.0.1:4444/wd/hub
Into Scenario1
Into Login Function

[20:23:03] I/launcher - 0 instance(s) of WebDriver still running
[20:23:03] I/launcher - chrome #01 failed 1 test(s)
[20:23:03] I/launcher - overall: 1 failed spec(s)
[20:23:03] E/launcher - Process exited with error code 1
0 голосов
/ 13 сентября 2018

Проблема

const logger = winston.createLogger... Вы создаете ссылку на Winston, но она нигде не передается.Вы просто храните это в константе.Вам нужно сделать его атрибутом Logger, а затем создать новый экземпляр Logging.Logger и вызвать для него log().

Fix

У вас будетсделать его свойством атрибута Logger.

В LoggingMech.js вы делаете this.logger = winston.createLogger вместо const logger = winston.createLogger

, а затем создаете новый экземпляр Logging.Logger и call log () на нем.

var Logging = require('./scripts/LoggingMech.js');
// logs foo
(new Logging.Logger()).log('foo');

Но я думаю, что вы делаете это более сложным по мере необходимости.Для реализации регистратора вы можете просто изменить файл LoggingMech.js на следующий:

const winston = require('winston');
module.exports = winston.createLogger({
    level: 'info',
    format: format.simple(),
    transports: [
        new winston.transports.Console(),
        new winston.transports.File({
            filename: 'TodaysLog.log'
        })
    ]
});

и назвать его следующим образом:

var Logging = require('./scripts/LoggingMech.js');
Logging.log('foo');

Конфигурация регистратора по-прежнему заключена в LoggingMech.js и звонить проще.Код также проще поддерживать.

Обновление 1: ведение журнала с помощью winston

Метод winston.log() принимает только объект журнала, а не строку.

// logs "I am a log message."
winston.log({
  level: 'info',
  message: 'I am a log message.'
}

Для записи простых строк вы можете использовать logger.info().

Обновление 2: Пример полной регистрации Winston

Пример рабочего журнала.Следующий код работает на моем компьютере:

winston.js

var winston = require('winston');
module.exports = winston.createLogger({
    level: 'info',
    transports: [
        new winston.transports.Console(),
        new winston.transports.File({
            filename: 'TodaysLog.log'
        })
    ]
});

index.js

var Logging = require('./winston');
var message = {
    level: 'info',
    message: 'Hello distributed log files!'
  };

  Logging.log(message);
  Logging.info('sdf');
  Logging.error(message);
  Logging.warn(message);

зарегистрированный контент в TodaysLog.log

{"level":"info","message":"Hello distributed log files!"}
{"message":"sdf","level":"info"}
{"level":"error","message":"Hello distributed log files!"}
{"level":"warn","message":"Hello distributed log files!"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...