Wires Currents.dev cross-run test analytics into a Playwright suite: installs `@currents/playwright`, authors `currents.config.ts` (env-sourced `recordKey` + `projectId`), registers `currentsReporter()`, enables trace/video/screenshot artifacts, and runs via `npx pwc` so per-test traces stream to the Currents dashboard with over-time flakiness, slowest-test, and pass-rate trends. Use when a Playwright suite needs hosted cross-run suite-health analytics; for a static per-run report use extentreports or allure-reports, and to sync results into Jira test management use zephyr-integration or xray-integration.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Per currents-docs:
"Playwright reports explain a single run. Currents explains your test suite over time, and more."
Currents.dev is a SaaS test analytics platform that ingests per-run results via runner-specific reporters and provides longitudinal views (flake rate over time, slowest-test trends, PR-level deltas). It's commonly paired with Playwright and Cypress.
This skill covers the Playwright integration; the Cypress
integration follows the same shape with @currents/cypress (see
references/ci-and-cypress-integration.md).
@currents/cypress with the same
shape).If the suite is small (<50 tests) and the team only needs the per-run report, Playwright's built-in HTML reporter is enough - no SaaS dependency.
@currents/playwright.currents.config.ts (recordKey from env, projectId
inline) and register currentsReporter() in playwright.config.ts.trace / video / screenshot artifacts so Currents has
per-test data to analyze.npx pwc; open the dashboard URL it prints.npm i -D @currents/playwright
# Equivalent for pnpm / yarn / bun.currents.config.tsPlace next to playwright.config.ts. Per currents-pw-quickstart:
import { CurrentsConfig } from "@currents/playwright";
const config: CurrentsConfig = {
recordKey: process.env.CURRENTS_RECORD_KEY!,
projectId: "your project id goes here",
};
export default config;The recordKey is the project's record-write secret - never check
it into the repo. The projectId is non-secret (visible in the
Currents dashboard URL); it's safe to inline.
In playwright.config.ts, per currents-pw-quickstart:
import { defineConfig } from "@playwright/test";
import { currentsReporter } from "@currents/playwright";
export default defineConfig({
reporter: [currentsReporter()],
// ... other config ...
});The reporter forwards every test event (start, finish, attachments) to the Currents API.
Per currents-pw-quickstart, the use section should enable
the three artifact types Currents consumes:
use: {
trace: "on",
video: "on",
screenshot: "on",
}The defaults Playwright ships with (trace: "on-first-retry") cap
the artifact volume; Currents wants every test's trace to drive
its analytics. For a high-volume suite, consider trace: "retain-on-failure"
as a middle ground.
# Reads recordKey from env, projectId from config:
npx pwc
# Or pass on the CLI:
npx pwc --key XXX --project-id YYYpwc is the Currents-aware Playwright wrapper. It runs Playwright
with the Currents reporter active and streams results in real-time;
on completion, it prints a dashboard URL.
A 120-test Playwright suite, first Currents run:
npm i -D @currents/playwright.currents.config.ts alongside playwright.config.ts:import { CurrentsConfig } from "@currents/playwright";
const config: CurrentsConfig = {
recordKey: process.env.CURRENTS_RECORD_KEY!,
projectId: "abc123def",
};
export default config;playwright.config.ts, add the reporter and turn artifacts on:reporter: [currentsReporter()],
use: { trace: "on", video: "on", screenshot: "on" },export CURRENTS_RECORD_KEY=... # from the Currents dashboard
npx pwcpwc streams each test event to Currents and prints a dashboard URL
on completion. After the second run on main, the dashboard's trend
graphs start showing flake rate and slowest-test movement across runs.
Run npx pwc from the CI job with CURRENTS_RECORD_KEY supplied as a
secret, and trigger on both push to main and pull_request so the
dashboard has a baseline (main) to compare each PR run against. Keep
Playwright's HTML report as an if: always() artifact fallback for
when the dashboard is unreachable. The full GitHub Actions workflow,
the per-PR-vs-main baseline rationale, and the Cypress sister
integration are in
references/ci-and-cypress-integration.md.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
Hardcoding recordKey in currents.config.ts | Secret leaks into git; bad actors can pollute the dashboard. | Read from env (see Configure currents.config.ts). |
Running both Playwright's default HTML reporter and currentsReporter without artifact handling | Doubled artifact size; CI runner disk pressure. | Keep both reporters; rely on the if: always() upload (see Operating in CI). |
| Sending production / staging real-user CI runs to Currents | Mixes test signal with monitoring signal; analytics pollute. | Send only test runs; production observability lives elsewhere. |
Disabling trace: "on" to "save space" | Currents's value is per-test trace inspection; disabled traces gut the analytics. | Use retain-on-failure as a middle ground (see Enable artifacts). |
| Recording PR runs without recording main runs | No baseline; per-PR diff is meaningless. | Record main on every push too (see Operating in CI). |
Treating pwc's exit code as gate-only | The dashboard surfaces flake / regression context the CI exit code hides. | Read both: pass/fail from CI; flake / regression from the dashboard or its API. |
currents.config.ts shape (recordKey + projectId),
reporter registration, artifact config (trace / video /
screenshot), npx pwc run command.junit-xml-analysis - pair
with Currents to keep CI gating self-hosted (JUnit) while
Currents handles longitudinal analytics.testrail-integration,
xray-integration,
zephyr-integration - sibling
test-management integrations (different role: test management
vs analytics).