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

@audc/reportportal-agent-js-cypress

v5.0.4

Published

This agent helps Cypress to communicate with Report Portal

Downloads

4

Readme

@reportportal/agent-js-cypress

agent-js-cypress is a runtime reporter for the Report Portal which provides information about collection run.

Install

$ npm install @reportportal/agent-js-cypress

Usage

Cypress.json

Add the following options to cypress.json


{
  "reporter": "@reportportal/agent-js-cypress",
  "reporterOptions": {
    "endpoint": "http://your-instance.com:8080/api/v1",
    "token": "00000000-0000-0000-0000-000000000000",
    "launch": "LAUNCH_NAME",
    "project": "PROJECT_NAME",
    "description": "LAUNCH_DESCRIPTION"
  }
}

Register ReportPortal plugin (cypress/plugins/index.js):


const registerReportPortalPlugin = require('@reportportal/agent-js-cypress/lib/plugin');

module.exports = (on, config) => registerReportPortalPlugin(on, config);

Setup ReportPortal custom commands

Add the following to your custom commands file (cypress/support/commands.js):


require('@reportportal/agent-js-cypress/lib/commands/reportPortalCommands');

See examples of usage here.

Options

Runs support following options:

| Parameter | Description | | --------------------- | ----------------------------------------------------------------------------------------------------------------- | | token | User's Report Portal token from which you want to send requests. It can be found on the profile page of this user.| | endpoint | URL of your server. For example 'https://server:8080/api/v1'. | | launch | Name of launch at creation. | | project | The name of the project in which the launches will be created. | | rerun | Enable rerun | | rerunOf | UUID of launch you want to rerun. If not specified, report portal will update the latest launch with the same name| | mode | Default: "default". Results will be submitting to Launches tab "debug" - Results will be submitting to Debug tab. | | debug | This flag allows seeing the logs of the client-javascript. Useful for debugging. Parameter could be equal boolean values. | | autoMerge | Enable automatical report test items of all runned spec into one launch. You should install plugin or setup additional settings in reporterOptions. See Automatically merge launch. | | reportHooks | Determines report before and after hooks or not. | | skippedIssue | ReportPortal provides feature to mark skipped tests as not 'To Investigate' items on WS side. Parameter could be equal boolean values: TRUE - skipped tests considered as issues and will be marked as 'To Investigate' on Report Portal (default value). FALSE - skipped tests will not be marked as 'To Investigate' on application.| | isLaunchMergeRequired | Allows to merge Cypress run's into one launch in the end of the run. Needs additional setup. See Manual merge launches. | | parallel | Indicates to the reporter that spec files will be executed in parallel. Parameter could be equal boolean values. See Parallel execution | | restClientConfig | Optional property. The object with agent property for configure http(s) client, may contain other client options eg. timeout. Visit client-javascript for more details. |

Overwrite options from config file

If you run Cypress tests programmatically, you can simply overwrite them:

const updatedConfig = {
  ...config,
  reporterOptions: {
    ...config.reporterOptions,
    token: process.env.RP_TOKEN,
  },
};

Overwrite by env variables:

| Parameter | Env variable | | ------------------ | ---------- | | token | RP_TOKEN |

ReportPortal custom commands

Logging

ReportPortal provides the following custom commands for reporting logs into the current test.

  • cy.log(message). Overrides standard Cypress cy.log(log). Reports message as an info log of the current test.

You can use the following methods to report logs and attachments with different log levels:

  • cy.trace (message , file). Reports message and optional file as a log of the current test with trace log level.
  • cy.logDebug (message , file). Reports message and optional file as a log of the current test with debug log level.
  • cy.info (message , file). Reports message and optional file as log of the current test with info log level.
  • cy.warn (message , file). Reports message and optional file as a log of the current test with warning log level.
  • cy.error (message , file). Reports message and optional file as a log of the current test with error log level.
  • cy.fatal (message , file). Reports message and optional file as a log of the current test with fatal log level.
  • cy.launchTrace (message , file). Reports message and optional file as a log of the launch with trace log level.
  • cy.launchDebug (message , file). Reports message and optional file as a log of the launch with debug log level.
  • cy.launchInfo (message , file). Reports message and optional file as log of the launch with info log level.
  • cy.launchWarn (message , file). Reports message and optional file as a log of the launch with warning log level.
  • cy.launchError (message , file). Reports message and optional file as a log of the launch with error log level.
  • cy.launchFatal (message , file). Reports message and optional file as a log of the launch with fatal log level.

file should be an object:

{
  name: "filename",
  type: "image/png",  // media type
  content: data,  // file content represented as 64base string
}

Note: The cy.debug RP command has been changed to cy.logDebug due to the command with the same name in Cypress 9.*.

Report attributes for tests

addTestAttributes (attributes). Add attributes(tags) to the current test. Should be called inside of corresponding test. attributes is array of pairs of key and value:

[{
  key: "attributeKey1",
  value: "attributeValue2",
}]

Key is optional field.

Integration with Sauce Labs

To integrate with Sauce Labs just add attributes:

[{
 "key": "SLID",
 "value": "# of the job in Sauce Labs"
}, {
 "key": "SLDC",
 "value": "EU (EU or US)"
}]

Report description for tests

setTestDescription (description). Set text description to the current test. Should be called inside of corresponding test.

Report test case Id for tests and suites

setTestCaseId (id, suite). Set test case id to the current test or suite. Should be called inside of corresponding test/suite. id is a string test case Id. suite (optional) is the title of the suite to which the specified test case id belongs. Should be provided just in case of reporting test case id for specified suite instead of current test.

Finish launch/test item with status

ReportPortal provides the following custom commands for setting status to the current suite/spec.

  • cy.setStatus(status, suite). Assign status to the current test or suite. Should be called inside of corresponding test/suite. status should be equal to one of the following values: passed, failed, stopped, skipped, interrupted, cancelled, info, warn. suite (optional) is the title of the suite to which you wish to set the status (all suite descriptions must be unique). Should be provided just in case of assign status for specified suite instead of current test.

You can use the shorthand forms of the cy.setStatus method:

  • cy.setStatusPassed(suite). Assign passed status to the current test or suite.
  • cy.setStatusFailed(suite). Assign failed status to the current test or suite.
  • cy.setStatusSkipped(suite). Assign skipped status to the current test or suite.
  • cy.setStatusStopped(suite). Assign stopped status to the current test or suite.
  • cy.setStatusInterrupted(suite). Assign interrupted status to the current test or suite.
  • cy.setStatusCancelled(suite). Assign cancelled status to the current test or suite.
  • cy.setStatusInfo(suite). Assign info status to the current test or suite.
  • cy.setStatusWarn(suite). Assign warn status to the current test or suite.

ReportPortal also provides the corresponding methods for setting status into the launch:

  • setLaunchStatus(status). Assign status to the launch. status should be equal to one of the following values: passed, failed, stopped, skipped, interrupted, cancelled, info, warn.
  • cy.setLaunchStatusPassed(). Assign passed status to the launch.
  • cy.setLaunchStatusFailed(). Assign failed status to the launch.
  • cy.setLaunchStatusSkipped(). Assign skipped status to the launch.
  • cy.setLaunchStatusStopped(). Assign stopped status to the launch.
  • cy.setLaunchStatusInterrupted(). Assign interrupted status to the launch.
  • cy.setLaunchStatusCancelled(). Assign cancelled status to the launch.
  • cy.setLaunchStatusInfo(). Assign info status to the launch.

Screenshots support

To use custom filename in cy.screenshot function you should setup ReportRortal custom commands. Default usage of Cypress screenshot function is supported without additional setup.

Automatically merge launches

By default Cypress create a separate run for each test file. This section describe how to report test items of different specs into the single launch. This feature needs information about Cypress configuration. To provide it to the reporter you need to install reportPortal plugin (see how to in this section) or to copy the following Cypress config options to the reporterOptions:

  • ignoreTestFiles
  • testFiles
  • integrationFolder
  • fixturesFolder
  • supportFile

Note: you need to specify only those options that are not the default.

Enable auto-merge in reporterOptions as shown below:


{
  ...
  "reporterOptions": {
    ...
    "autoMerge": true
  }
}

Manual merge launches

There is a possibility to merge all launches into a single launch in the end of the run. We advice to use autoMerge option to merge results in one launch but you can use this alternative option in case of you need to perform some additional actions before merge.

Set corresponding reporter options

Edit cypress.json file. Set isLaunchMergeRequired option to true as shown below:


{
  ...
  "reporterOptions": {
    ...
    "isLaunchMergeRequired": true
  }
}

Add file to run Cypress with custom behavior

Create folder "scripts" on project folder. Copy the following script into "cypress.js" file and put it to "scripts" folder.


const cypress = require('cypress');
const fs = require('fs');
const glob = require('glob');
const { mergeLaunches } = require('@reportportal/agent-js-cypress/lib/mergeLaunches');

const cypressConfigFile = 'cypress.json';

const getLaunchTempFiles = () => {
  return glob.sync('rplaunch-*.tmp');
};

const deleteTempFile = (filename) => {
  fs.unlinkSync(filename);
};

cypress.run().then(
  () => {
    fs.readFile(cypressConfigFile, 'utf8', (err, data) => {
      if (err) {
        throw err;
      }

      const config = JSON.parse(data);

      if (config.reporterOptions.isLaunchMergeRequired) {
        mergeLaunches(config.reporterOptions)
          .then(() => {
            const files = getLaunchTempFiles();
            files.forEach(deleteTempFile);
            console.log('Launches successfully merged!');
            process.exit(0);
          })
          .catch((err) => {
            console.error(error);
            process.exit(1);
          });
      } else {
        process.exit(0);
      }
    });
  },
  (error) => {
    console.error(error);
    const files = getLaunchTempFiles();
    files.forEach(deleteTempFile);
    process.exit(1);
  },
);

Update package.json "scripts" section


"scripts": {
  ...
  "cypress": "node scripts/cypress.js",
  ...
},

Parallel execution

Cypress can run recorded tests in parallel across multiple machines since version 3.1.0 (Cypress docs). By default Cypress create a separate run for each test file. To merge all runs into one launch in Report Portal you need to provide autoMerge option together with parallel flag. Since Cypress does not provide the ci_build_id to the reporter, you need to provide it manually using the CI_BUILD_ID environment variable (see Cypress docs for details).

Enable parallel in reporterOptions as shown below:


{
  ...
  "reporterOptions": {
    ...
    "parallel": true
  }
}

Here's an example of setting up parallel Cypress execution using GitHub Actions:


name: CI-pipeline

on:
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    container: cypress/browsers:node12.18.3-chrome87-ff82
    strategy:
      fail-fast: false
      matrix:
        containers: [1, 2, 3]
    env:
      CI_BUILD_ID: ${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: 'UI Tests - Chrome'
        uses: cypress-io/github-action@v2
        with:
          config-file: cypress.json
          group: 'UI Tests - Chrome'
          spec: cypress/integration/*
          record: true
          parallel: true
        env:
          CYPRESS_RECORD_KEY: ${{ secrets.RECORD_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          ACTIONS_RUNNER_DEBUG: true

Copyright Notice

Licensed under the Apache License v2.0