Cucumber-js: Relatório - saída para arquivo

Criado em 2 out. 2012  ·  29Comentários  ·  Fonte: cucumber/cucumber-js

Atualmente não é possível especificar um arquivo de "saída" como um argumento CLI para salvar relatórios. O formatador JSON parece escrever diretamente para STDOUT, o que pode ser um problema durante a depuração (usando console.log) ou se o programa falhar, produzindo JSON inválido.

Seria desejável se isso funcionasse como pepino em rubi, permitindo vários formatos salvos em arquivos de saída separados.

Comentários muito úteis

@cedriclombardot

Existe uma maneira de selecionar um diretório para a saída json do transferidor de 1.5.0, embora eu não o tenha usado.
Atualmente, adicionei um gancho para poder usar o formatador pretty e json juntos:

module.exports = function JsonOutputHook() {
  var Cucumber = require('cucumber');
  var JsonFormatter = Cucumber.Listener.JsonFormatter();
  var fs = require('fs');

  JsonFormatter.log = function (json) {
    fs.writeFile('test/e2e/output/cucumberReport.json', json, function (err) {
      if (err) throw err;
      console.log('json file location: test/e2e/output/cucumberReport.json');
    });
  };

  this.registerListener(JsonFormatter);
};

Todos 29 comentários

Na verdade, existem dois problemas separados aqui:

  1. redirecionar o formatador (não apenas JSON, mas também _pretty_, _progress_, _html_, etc.) para outro arquivo diferente de STDOUT;
  2. permitir vários formatadores em uma única execução.

Eu criei um problema separado com relação aos vários formatadores.

Julien, há alguma notícia de quando poderíamos especificar um arquivo de saída HTML?

+1

+1

HI Tenho copiado e colado manualmente o conteúdo dos resultados JSON no arquivo cucumber.json no diretório de dados de cucumber-json2report-master, o que me permite obter bons resultados da execução, mas seria ótimo se O cucumber.js poderia colocar o arquivo nesse diretório, eliminando assim a etapa manual.

Eu realmente não quero hackear a versão ou criar um fork. Sugestões?

alguma atualização disso?

@letshaveyer, este parece um recurso útil para você. Por que você não envia uma solicitação de pull?

Até que isso funcione, você pode modificar json_formatter.js. Isso é hack, mas muito mais fácil do que copiar e colar sempre. Também estamos adicionando um carimbo de hora ao nome do arquivo.

Altere o objeto formatterIo para também gravar em um arquivo

var formatterIo = {
escrever: função (string) {
self.log (string);
fs.writeFileSync ('path \ test_results.json', string); // adicionado
}
};

Isso é uma coisa simples de fazer com redirecionamentos de pipe simples em unix e bash

cucumber-js --format=json | tee wow.json

+1 para fechar

Não podemos canalizá-lo. Estamos usando o arquivo de configuração do transferidor para definir o cucumberjs
opções

CucumberOpts: {
Formato: 'JSON',
Tags: ' @testRun '
}

Temos um arquivo bat que usa o nó para iniciar o transferidor.

Brad
Em 5 de agosto de 2014, às 9h54, "Sam Saccone" [email protected] escreveu:

Isso é uma coisa simples de fazer com redirecionamentos de pipe simples no Unix

cucumber-js --format = json | tee wow.json

+1 para fechar

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/cucumber/cucumber-js/issues/90#issuecomment -51199997.

Interessante @ brad8118, parece que seria uma característica do transferidor e não do pepino.

O transferidor está invocando o pepino e o que ele faz com a saída é responsabilidade do transferidor e não do pepino.

Essas são apenas minhas reflexões iniciais, abertas a ideias ainda. Estou apenas tentando evitar o recurso creep do pepino lib.

@ brad8118 Estou usando um transferidor. Eu realmente não quero confundir o código-fonte. Existe uma maneira de adicionar um gancho ou arquivo de suporte para fazer isso?

var formatterIo = {
write: function(string){
self.log(string);
fs.writeFileSync('path\test_results.json', string); // added
}
};

O uso de relatórios nativos do transferidor

@ jlin412 , não sei como passar / obter o json que está sendo gerado sem alterar o cucumber.js.
Também pensei sobre a função de limpeza em nosso arquivo de configuração json do transferidor. Mas só passa 1 ou 0.

// ----- The cleanup step -----
//
// A callback function called once the tests have finished running and
// the webdriver instance has been shut down. It is passed the exit code
// (0 if the tests passed or 1 if not).
onCleanUp: function () {}

Parece que isso já foi feito em outro fork. nicolassenechal @ b337b18

@ jlin412 quando você fofa e cola o json. O que você está fazendo com isso? Você está convertendo em html?

@ brad8118 Eu uso o redirecionamento para enviar a saída json para um arquivo do transferidor e, em seguida, tenho a função de tarefa grunt para filtrar o formato json usando correspondência regex:

  grunt.registerTask('jsonOutput', function () {
    var testOutput = grunt.file.read('test/e2e/tmp/cucumberOutput.json');
    var json = testOutput.match(/(\[\s+\{[\s\S]*\}\s+\]\s+\}\s+\]\s+\}\s+\])/)[1];
    grunt.file.write('test/e2e/output/cucumberReport.json', json);
  });

Então eu uso o sanduíche de pepino para converter para html (um projeto java).
http://www.farooqyousuf.net/2013/12/generating-reports-with-cucumber-sandwich/

Fiz uma ligeira modificação na base de código do Pepino Sandwich para poder chamá-lo sob demanda, em vez de depender do ouvinte de evento de arquivo.

Olá pessoal, só estou tentando entender quando isso será devolvido ao pepino-js Mestre? Preciso dessa funcionalidade agora, mas tenho medo de depender de um branch bifurcado. Você poderia me dar uma ideia de quando ele estará disponível no cucumber-js master e apenas uma ideia rápida se é sensato confiar em um dos ramos bifurcados enquanto isso? Obrigado, Fraser.

+1 - Eu sei que não estou sozinho em passar por algumas contorções loucas para usar pepino com transferidor quando um sinalizador para gravar em arquivo seria muuuito útil. Não entendo por que escrever em um arquivo é considerado um recurso lento. O pepino destina-se apenas a permitir que os desenvolvedores inspecionem visualmente a qualidade de seu trabalho? Não devemos usar pepino no escopo de um ambiente de teste maior? Não pode ser assim ...

Oi,

Alguém pode me ajudar, eu não encontrei como configurar a saída json corretamente em arquivo.
Eu uso gulp + transferidor + pepinojs

desde já, obrigado

@cedriclombardot

Existe uma maneira de selecionar um diretório para a saída json do transferidor de 1.5.0, embora eu não o tenha usado.
Atualmente, adicionei um gancho para poder usar o formatador pretty e json juntos:

module.exports = function JsonOutputHook() {
  var Cucumber = require('cucumber');
  var JsonFormatter = Cucumber.Listener.JsonFormatter();
  var fs = require('fs');

  JsonFormatter.log = function (json) {
    fs.writeFile('test/e2e/output/cucumberReport.json', json, function (err) {
      if (err) throw err;
      console.log('json file location: test/e2e/output/cucumberReport.json');
    });
  };

  this.registerListener(JsonFormatter);
};

Eu não vi que resultJsonOutputFile parece funcionar magicamente e pronto
para ir em xml com: https://www.npmjs.com/package/protractor-cucumber-junit

Cédric

02-01-2015 18:34 GMT + 01: 00 Jason Lin [email protected] :

@cedriclombardot https://github.com/cedriclombardot

Existe uma maneira de selecionar um diretório para a saída json do transferidor de
1.5.0 embora eu não tenha usado.
Atualmente, adicionei um gancho para poder usar o formatador pretty e json juntos:

module.exports = function JsonOutputHook () {
var Pepino = requer ('pepino');
var JsonFormatter = Cucumber.Listener.JsonFormatter ();
var fs = requer ('fs');

JsonFormatter.log = function (json) {
fs.writeFile ('test / e2e / output / cucumberReport.json', json, function (err) {
if (err) jogue err;
console.log ('localização do arquivo json: test / e2e / output / cucumberReport.json');
});
};

this.registerListener (JsonFormatter);
};

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/cucumber/cucumber-js/issues/90#issuecomment -68544890.

+1

Então, poderíamos obter uma atualização sobre quando isso será enviado ao master? No momento, estou usando o cucumberjs menos transferidor (ou qualquer outra estrutura de teste da web estilo selênio), então preciso do cucumberjs para produzir um relatório formatado.

alguma atualização disso? Isso nos causou problemas suficientes para pensarmos em como corrigir este módulo ou olhar para o parallel-cucumber (que trata desse caso).

cucumberjs -> webdriverio

+1

Eu sigo esta descrição para salvar o formato json do cucumberjs.

https://github.com/mrooding/gulp-protractor-cucumber-html-report#saving -cucumberjs-json-to-disk-when-using-transferidor

  1. Adicione um ouvinte ao formatador JSON CucumberJS e salve-o em um arquivo
  2. protractor.conf.js adiciona uma referência ao ouvinte de gancho

Isso funciona

se alguém está perdendo o happy hour devido aos relatórios de pepino js, ​​estamos usando cucumber-html-reports

  1. atualize seus hooks.js
support.registerHandler('AfterFeatures', () => {
    ///* creates report
    var options = {
        theme: 'bootstrap',
        jsonFile: 'cucumberReports/report.json',
        output: 'cucumberReports/report.html',
        reportSuiteAsScenarios: true,
        launchReport: true,
        metadata: {
            "App Version":"0.3.2",
            "Test Environment": "POC",
            //"Browser": "Chrome  54.0.2840.98",
            //"Platform": "Windows 10",
            //"Parallel": "Scenarios",
            //"Executed": "Remote"
        }
      };

    reporter.generate(options);
  });

atualize seu protractor.conf.cucumberOpts
format: 'json:cucumberReports/report.json',

Este tópico foi bloqueado automaticamente, pois não houve nenhuma atividade recente depois que ele foi fechado. Abra um novo problema para bugs relacionados.

Esta página foi útil?
0 / 5 - 0 avaliações