Cypress generates test results, but sharing them with your team means either paying for Cypress Cloud or pasting terminal output into Slack. If you want hosted results with shareable links, analytics, and notifications without Cypress Cloud pricing, there’s a simpler path.
The Cypress Reporting Problem
Cypress runs tests and prints results to the console. The built-in dashboard experience requires Cypress Cloud (formerly Cypress Dashboard), which is a paid service for teams that need parallelization and analytics.
What Teams Do Instead
1. Cypress Cloud
- Good feature set: parallelization, analytics, flaky test management
- Pricing scales with recorded test runs — can get expensive for active teams
- Tightly coupled to Cypress — doesn’t help if you also run Jest, Playwright, or pytest
2. CI artifacts
- Cypress screenshots and videos upload as artifacts
- Recipients need CI access to download zips
- Artifacts expire (90 days max on GitHub Actions)
- No analytics, no historical trends
3. Mochawesome reports
- Generates HTML reports locally, but hosting them is your problem
- No built-in sharing, analytics, or notification support
- Another reporter to configure and maintain
4. Terminal output in Slack
- Loses all context for screenshots and videos
- Truncated for large suites
- No way to filter or drill into failures
Better: CTRF + Hosted Reports
Cypress doesn’t produce a report format that Gaffer parses natively (like Playwright HTML or JUnit XML). Instead, the integration uses CTRF (Common Test Report Format) — a standardized JSON format with reporters for 20+ test frameworks including Cypress.
The setup:
- Add the
cypress-ctrf-json-reporterto your project - Cypress generates a CTRF JSON file after tests run
- Upload the CTRF file to Gaffer in CI
- Get a shareable URL, Slack notification, and analytics
What This Looks Like
After CI runs:
- Your team gets a Slack notification with pass/fail summary
- Anyone can click through to the full hosted report
- Test analytics accumulate over time: pass rates, flaky tests, slow tests
- No Cypress Cloud subscription required
Setting Up Cypress Reporting with Gaffer
Step 1: Install the CTRF Reporter
npm install cypress-ctrf-json-reporter --save-devStep 2: Configure Cypress
Add the reporter to your cypress.config.ts via the setupNodeEvents hook:
import { defineConfig } from 'cypress';
import { GenerateCtrfReport } from 'cypress-ctrf-json-reporter';
export default defineConfig({
e2e: {
setupNodeEvents(on) {
new GenerateCtrfReport({ on });
},
},
});This generates a ctrf/ctrf-report.json file after each test run. You can customize the output:
new GenerateCtrfReport({
on,
outputFile: 'ctrf-report.json',
outputDir: '.',
});Step 3: Add the Upload Step to CI
GitHub Actions:
- name: Run Cypress tests
run: npx cypress run
- name: Upload to Gaffer
if: always()
uses: gaffer-sh/gaffer-uploader@v2
with:
api-key: ${{ secrets.GAFFER_UPLOAD_TOKEN }}
report-path: ./ctrf/ctrf-report.jsonGitLab CI:
test:
script:
- npx cypress run
after_script:
- |
curl -X POST https://app.gaffer.sh/api/upload \
-H "X-API-Key: $GAFFER_UPLOAD_TOKEN" \
-F "files=@ctrf/ctrf-report.json" \
-F 'tags={"commitSha":"'"$CI_COMMIT_SHA"'","branch":"'"$CI_COMMIT_REF_NAME"'"}'Step 4: Share the Link
After upload, share the report URL in Slack, GitHub PRs, or Jira. Recipients see structured test results in their browser — no CI access needed.
Slack Notifications
Once you’re uploading results, connect Slack in project settings for automatic notifications:
- Pass/fail summary with test counts
- Direct link to the full report
- Filter by branch — only notify on
main, skip feature branches - Choose triggers: all runs, failures only, or consecutive failures
Comparing Cypress Reporting Options
| Feature | Cypress Cloud | Mochawesome | CI Artifacts | Gaffer (via CTRF) |
|---|---|---|---|---|
| Hosted reports | Yes | Self-host | Download zips | Yes |
| Shareable links | Yes | Manual | With CI access | Yes |
| Analytics/trends | Yes | No | No | Yes |
| Flaky test detection | Yes | No | No | Yes |
| Slack notifications | Yes | No | No | Yes |
| Works with other frameworks | No | No | N/A | Yes |
| Parallelization | Yes | No | No | No |
| Video recording | Yes | No | Via artifacts | No |
| Pricing | Paid (usage-based) | Free | Free | Free tier available |
When Cypress Cloud Makes Sense
Cypress Cloud is worth it if you need test parallelization (splitting tests across machines), video recording with cloud storage, or you’re all-in on Cypress with no other frameworks.
When Gaffer Makes Sense
Gaffer is a better fit if you want a unified view across multiple frameworks (Cypress + Jest + Playwright), want test analytics without per-seat pricing, or need Slack/webhook notifications with more flexible triggers.
Beyond Cypress: Multi-Framework Support
Since Gaffer works with CTRF, you can upload results from any framework that has a CTRF reporter. One dashboard for:
- Cypress (via
cypress-ctrf-json-reporter) - Playwright (native HTML reports)
- Jest (via
jest-ctrf-json-reporter) - Vitest (native HTML reports)
- pytest (via JUnit XML or CTRF)
All results appear in the same project dashboard with unified analytics.
Get Started
Gaffer’s free tier includes 500 MB of storage with 7-day retention. Enough to evaluate the CTRF workflow with your Cypress suite.