jeudi 4 juin 2020

'protractor-html-reporter-2' module generates report only for the last executed tests when 'shardTestFiles' property is set in conf file

I have a UI test suite that I want to run parallelly in protractor. I'm using a module called 'protractor-html-reporter-2' for report generation. It generates beautiful reports with pie-chart and graphs.

To my understanding, it uses an xml file with all the test data to generate the report. Now this works fine when I run non-parallelly, but for parallel executions, the xml file that is generated is only for the last run and hence the report generated is also for the last suite run.

I've been trying to figure out how to use this module for my use case.

Here's the code snippet.

for XML generation

onPrepare: function () {
var jasmineReporters = require('jasmine-reporters');
jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
    consolidateAll: true,
    savePath: './',
    filePrefix: 'xmlresults'
}));
},

For Screenshot generation:

var fs = require('fs-extra');

fs.emptyDir('screenshots/', function (err) {
        console.log(err);
    });

    jasmine.getEnv().addReporter({
        specDone: function(result) {
            if (result.status == 'failed') {
                browser.getCapabilities().then(function (caps) {
                    var browserName = caps.get('browserName');

                    browser.takeScreenshot().then(function (png) {
                        var stream = fs.createWriteStream('screenshots/' + browserName + '-' + result.fullName+ '.png');
                        stream.write(new Buffer(png, 'base64'));
                        stream.end();
                    });
                });
            }
        }
    });

Converting the XML to HTML:

onComplete: function() {
     var browserName, browserVersion;
     var capsPromise = browser.getCapabilities();

     capsPromise.then(function (caps) {
        browserName = caps.get('browserName');
        browserVersion = caps.get('version');
        platform = caps.get('platform');

        var HTMLReport = require('protractor-html-reporter-2');

        testConfig = {
            reportTitle: 'Protractor Test Execution Report',
            outputPath: './',
            outputFilename: 'ProtractorTestReport',
            screenshotPath: './screenshots',
            testBrowser: browserName,
            browserVersion: browserVersion,
            modifiedSuiteName: false,
            screenshotsOnlyOnFailure: true,
            testPlatform: platform
        };
        new HTMLReport().from('xmlresults.xml', testConfig);
    });
 }

Appreciate any help.

Aucun commentaire:

Enregistrer un commentaire