Skip to content

Latest commit

 

History

History
164 lines (119 loc) · 8.01 KB

File metadata and controls

164 lines (119 loc) · 8.01 KB
title Configuring cypress
description A guide for generating Trunk-compatible test reports for Cypress tests

Cypress

You can automatically detect and manage flaky tests in your Cypress projects by integrating with Trunk. This document explains how to configure Cypress to output JUnit XML reports that can be uploaded to Trunk for analysis.

Checklist

By the end of this guide, you should achieve the following before proceeding to the next steps to configure your CI provider.

  • Generate a compatible test report
  • Configure the report file path or glob
  • Disable retries for better detection accuracy
  • Test uploads locally

After correctly generating reports following the above steps, you'll be ready to move on to the next steps to configure uploads in CI.

Generating Reports

Cypress has a built-in Mocha JUnit reporter which outputs XML test reports. However, the built-in reporter does not include file paths in test case elements, which means Trunk cannot match tests to code owners or enable file-based filtering in the dashboard.

Recommended: Use cypress-junit-plugin for file paths

For full functionality including code owner detection and file-based search, use the cypress-junit-plugin reporter. It outputs test cases with the correct nested structure and file path attributes that Trunk expects.

Install the plugin:

npm install --save-dev @saucelabs/cypress-junit-plugin

Update your Cypress config:

{% code title="cypress.config.js" %}

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  reporter: '@saucelabs/cypress-junit-plugin',
  reporterOptions: {
    mochaFile: './junit.xml',
  },
})

{% endcode %}

Alternative: Built-in Mocha reporter

If you don't need file path matching or code owner detection, you can use the built-in reporter. Uploads will still work, but you will see warnings about missing file paths and won't be able to search by file in the dashboard.

{% code title="cypress.config.js" %}

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  reporter: 'junit',
  reporterOptions: {
    mochaFile: './junit.xml',
    toConsole: true,
  },
})

{% endcode %}

{% hint style="info" %} The built-in Mocha JUnit reporter places the file attribute on <testsuite> elements but not on individual <testcase> elements. Trunk requires file paths on test cases for code owner matching. If you see warnings like "report has test cases with missing file or filepath", switch to the cypress-junit-plugin above. {% endhint %}

Report File Path

The JUnit report location is specified by the mochaFile property in your Cypress config. In the above example, the file will be at ./junit.xml.

Disable Retries

You need to disable automatic retries if you previously enabled them. Retries compromise the accurate detection of flaky tests.

You can disable retries by setting retries: 0 in your Cypress config file.

{% code title="cypress.config.js" %}

module.exports = defineConfig({
  retries: 0,
})

{% endcode %}

Try It Locally

The Validate Command

{% tabs %} {% tab title="Linux (x64)" %}

SKU="trunk-analytics-cli-x86_64-unknown-linux.tar.gz"
curl -fL --retry 3 \
  "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
  | tar -xz

chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"

{% endtab %}

{% tab title="Linux (arm64)" %}

SKU="trunk-analytics-cli-aarch64-unknown-linux.tar.gz"
curl -fL --retry 3 \
  "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
  | tar -xz

chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"

{% endtab %}

{% tab title="macOS (arm64)" %}

SKU="trunk-analytics-cli-aarch64-apple-darwin.tar.gz"
curl -fL --retry 3 \
  "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
  | tar -xz

chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"

{% endtab %}

{% tab title="macOS (x64)" %}

SKU="trunk-analytics-cli-x86_64-apple-darwin.tar.gz"
curl -fL --retry 3 \
  "https://github.com/trunk-io/analytics-cli/releases/latest/download/${SKU}" \
  | tar -xz

chmod +x trunk-analytics-cli
./trunk-analytics-cli validate --junit-paths "./junit.xml"

{% endtab %} {% endtabs %}

Test Upload

Before modifying your CI jobs to automatically upload test results to Trunk, try uploading a single test run manually.

You make an upload to Trunk using the following command:

./trunk-analytics-cli upload --junit-paths "./junit.xml" \
    --org-url-slug <TRUNK_ORG_SLUG> \
    --token <TRUNK_ORG_TOKEN>

You can find your Trunk organization slug and token in the settings or by following these instructions. After your upload, you can verify that Trunk has received and processed it successfully in the Uploads tab. Warnings will be displayed if the report has issues.

Next Step

Configure your CI to upload test runs to Trunk. Find the guides for your CI framework below:

Azure DevOps Pipelinesazure-devops-pipelines.mdazure.png
BitBucket Pipelinesbitbucket-pipelines.mdbitbucket.png
BuildKitebuildkite.mdbuildkite.png
CircleCIcircleci.mdcircle-ci.png
Drone CIdroneci.mddrone.png
GitHub Actionsgithub-actions.mdgithub.png
GitLabgitlab.mdgitlab.png
Jenkinsjenkins.mdjenkins.png
Semaphoresemaphoreci.mdsemaphore.png
TeamCitybroken-referenceteamcity.png
Travis CItravisci.mdtravis.png
Other CI Providersotherci.mdother.png