npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

simple-cucumber-html-reporter

v2.0.3

Published

Generates simple cucumberjs automation reports for browsers and devices

Downloads

702

Readme

Simple Cucumber HTML Reporter

NPM

Simple Cucumber HTML Reporter is a reporting module for Cucumber to parse the JSON output to a beautiful report. The difference between all the other reporting modules on the market is that this module has:

  • a quick overview of all tested features and scenarios
  • a features overview that can hold simple runs of the same feature / runs of the same feature on different browsers / devices
  • a features overview that can be searched / filtered / sorted
  • a feature(s) overview with metadata of the used browser(s) / devices

Install

Install this module locally with the following command:

npm install simple-cucumber-html-reporter

Save to dependencies or dev-dependencies:

npm install simple-cucumber-html-reporter --save
npm install simple-cucumber-html-reporter --save-dev

Compatibility

simple Cucumber HTML Reporter **now works with latest CucumberJS.

Usage

It provides simple-cucumber-html-reporter and some nice integration features that will make using Protractor + CucumberJS nicely integrate with only a few lines of code.

cucumber-js 2.x and lower

simple Cucumber HTML Reporter transforms the Cucumber JSON output to a beautiful report. In order to let this happen add the piece of code that is placed below to CucumberJS AfterFeatures-hook.

const report = require("simple-cucumber-html-reporter");

report.generate({
  jsonDir: "./path-to-your-json-output/",
  reportPath: "./path-where-the-report-needs-to-be/",
  metadata: {
    browser: {
      name: "chrome",
      version: "60",
    },
    device: "Local test machine",
    platform: {
      name: "ubuntu",
      version: "16.04",
    },
  },
  customData: {
    title: "Automation Run",
    data: [
      { label: "Project", value: "Simple project" },
      { label: "Release", value: "1.0.0" },
      { label: "Sprint", value: "5" },
    ],
  },
});

cucumber-js 3.x and hihger

Since cucumber-js 3.x the AfterFeatures hook is not supported anymore. To use simple Cucumber HTML Reporter it must be run in a separate node executable after the cucumber-js process finishes.

IMPORTANT:

Make sure that, when you generate the JSON files with Cucumber, each file will have a UNIQUE name. If you don't provide a unique name Cucumber will override the JSON files.

Advice is to use for example the name of the feature, the name of the browser / device it is running on AND a unix timestamp with for example this (new Date).getTime();. This will result in something like this name_of_feature.chrome.1495298685509.json

Options

jsonDir

  • Type: String
  • Mandatory: Yes

The directory that will hold all the generated JSON files, relative from where the script is started.

N.B.: If you use a npm script from the command line, like for example npm run generate-report the jsonDir will be relative from the path where the script is executed. Executing it from the root of your project will also search for the jsonDir from the root of you project.

reportPath

  • Type: String
  • Mandatory: Yes

The directory in which the report needs to be saved, relative from where the script is started.

N.B.: If you use a npm script from the command line, like for example npm run generate-report the reportPath will be relative from the path where the script is executed. Executing it from the root of your project will also save the report in the reportPath in the root of you project.

openReportInBrowser

  • Type: boolean
  • Mandatory: No

If true the report will automatically be opened in the default browser of the operating system.

saveCollectedJSON

  • Type: boolean
  • Mandatory: No

This module will first merge all the JSON-files to 1 file and then enrich it with data that is used for the report. If saveCollectedJSON :true the merged JSON AND the enriched JSON will be saved in the reportPath. They will be saved as:

  • merged-output.json
  • enriched-output.json

disableLog

  • Type: boolean
  • Mandatory: No
  • Default: false

This will disable the log so will NOT see this.

=====================================================================================
    simple Cucumber HTML report generated in:

    /Users/rahul/simple-cucumber-html-reporter/.tmp/index.html
========================================================================

reportName

  • Type: string
  • Mandatory: No

You can change the report name to a name you want

displayDuration

  • Type: boolean
  • Mandatory: No

If set to true the duration of steps, scenarios and features is displayed on the Feature page in an easily readable format. This expects the durations in the report to be in milliseconds, which might result in incorrect durations when using a version of Cucumber that does not report in milliseconds (like v.1).

metadata

  • Type: JSON
  • Mandatory: No

Print more data to your report, such as browser name + version, platform name + version and your environment. The values need to meet some predefined data, see Metadata for more info. Data can be passed like below.

If you provide the metadata when instantiating multi-cucumber-html-reporter the metadata will be added to each feature. If you already have metadata in your JSON then the metadata in the JSON will take precedence

metadata:{
    browser: {
        name: 'chrome',
        version: '60'
    },
    device: 'Local test machine',
    platform: {
        name: 'ubuntu',
        version: '16.04'
    }
}

See metadata for more info

customMetadata

  • Type: boolean
  • Mandatory: No

It is possible to provide custom metadata by setting this variable to true. Custom metadata will override the regular metadata completely and potentially have strange formatting bugs if too many (10+) variables are used. The columns will be in the order defined by the order of the list.

Adding the metadata is done in the same way as with normal metadata. The metadata is formed as a list of key-value pairs to preserve order:

metadata: [
  { name: "Environment v.", value: "12.3" },
  { name: "Plugin v.", value: "32.1" },
  { name: "Variable set", value: "Foo" },
];

IMPORTANT: This does not work correctly if features have different sets of metadata. Try to avoid this situation.

customData

  • Type: object
  • Mandatory: No

You can add a custom data block to the report like this

customData: {
    title: 'Run info',
    data: [
        {label: 'Project', value: 'Custom project'},
        {label: 'Release', value: '1.2.3'},
        {label: 'Cycle', value: 'B11221.34321'},
        {label: 'Execution Start Time', value: 'Jul 22nd 2020, 02:31 PM IST'},
        {label: 'Execution End Time', value: 'Jul 22nd 2020, 02:31 PM IST'}
    ]
}

customData.title

  • Type: string
  • Mandatory: No
  • Default: Custom data title

Select a title for the custom data block. If not provided it will be defaulted.

customData.data

  • Type: array
  • Mandatory: yes

The data you want to add. This needs to be in the format

data: [{ label: "your label", value: "the represented value" }];

Metadata

The report can also show on which browser / device a feature has been executed. It is shown on the featurs overview in the table as well as on the feature overview in a container.

Adding metadata to the Cucumber JSON

To be able to see this you will need to add the following to the Cucumber JSON before you save it.

// This represents the Cucumber JSON file that has be retrieved
const cucumberJSON;

const metadata = "metadata": {
	"browser": {
		"name": "chrome",
		"version": "58"
	},
	"device": "string",
	"platform": {
		"name": "osx",
		"version": "10.12"
	}
}

// Add it with for example
cucumberJSON[0].metadata = metadata;

// Now save the file to the disk

metadata.app.name

  • Type: string

e.g.: The name of the app.

metadata.app.version

  • Type: string

e.g.: The version of the app.

metadata.browser.name

  • Type: string
  • Possible values: internet explorer | edge | chrome | firefox | safari

If no correct value is provided the ?-icon with the text not known is shown

metadata.browser.version

  • Type: string

e.g.: The version of the browser, this can be added manual or retrieved during the execution of the tests to get the exact version number.

If no correct value is provided the ?-icon with the text not known is shown

metadata.device

  • Type: string

e.g.: A name that represents the type of device. For example, if you run it on a virtual machine, you can place it here Virtual Machine, or the name of the mobile, like for example iPhone 7 Plus.

If no correct value is provided the ?-icon with the text not known is shown

metadata.platform.name

  • Type: string
  • Possible values: windows | osx | linux | ubuntu | android | ios

If no correct value is provided the ?-icon with the text not known is shown

metadata.platform.version

  • Type: string

e.g.: The version of the platform

If no correct value is provided the ?-icon with the text not known is shown

FAQ

Only 1 report is shown in the features overview table

It could be that the name of the Cucumber JSON file that has been saved is not unique (enough).

My advice is to use for example:

  • the name of the feature
  • the name of the browser / device it is running on
  • a unix timestamp with for example this (new Date).getTime();

This will result in something like this name_of_feature.chrome.1495298685509.json.

The advantage of this is that when you look at the folder where the Cucumber JSON-files are saved you can see:

  • the features that have been executed
  • on which browser
  • a timestamp to see which feature has been executed the last (if featurename and browser are the same)

Metdata shows not known or not the correct icons

There could be 2 causes:

  1. The metadata has not (correctly) been added to the Cucumber JSON.
  2. The metadata.browser.name or metadata.platform.name can't be mapped to the right icon

To fix this see the part about Metadata and check the possible values.

How to attach Screenshots to HTML report

You can attach screenshots at any time to a Cucumber JSON file. Just create a Cucumber scenario-hook that will handle this. You can add them during running or when a scenario failed.

Depending on the framework you are using, you can add a screenshot to the report like this

return driver.takeScreenshot()
	.then(function (buffer) {
    	const decodedImage = new Buffer(screenshot.replace(/^data:image\/png;base64,/, ''), 'base64');
        scenario.attach(decodedImage, 'image/png');
  }

How to attach Plain Text to HTML report

You can attach plain-text / data at any time to a Cucumber JSON file to help debug / review the results. You can add them during running or when a scenario failed.

scenario.attach("place here what you want to show in the report");

How to attach pretty JSON to HTML report

You can attach JSON at any time to a Cucumber JSON file. You can add them during running or when a scenario failed.

scenario.attach(JSON.stringify(yourJsonObject));