n8n/packages/testing
n8n-assistant[bot] ed9fa260fa
chore: Resolve master→3.x sync conflict (#34758)
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
Co-authored-by: Stephen Wright <sjw948@gmail.com>
Co-authored-by: n8n-assistant[bot] <100856346+n8n-assistant[bot]@users.noreply.github.com>
Co-authored-by: Charlie Kolb <charlie@n8n.io>
Co-authored-by: Guillaume Jacquart <jacquart.guillaume@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Bernhard Wittmann <bernhard.wittmann@n8n.io>
Co-authored-by: Nikhil Kuriakose <nikhil.kuriakose@n8n.io>
Co-authored-by: Albert Alises <albert.alises@gmail.com>
Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com>
Co-authored-by: Andreas Fitzek <andreas.fitzek@n8n.io>
Co-authored-by: Elias Meire <elias@meire.dev>
Co-authored-by: Robin Braumann <50590409+bjorger@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: yehorkardash <yehor.kardash@n8n.io>
Co-authored-by: Mike Repeć <mike.repec@n8n.io>
Co-authored-by: Yuliia Pominchuk <31064937+yuliia-pominchuk@users.noreply.github.com>
Co-authored-by: RomanDavydchuk <roman.davydchuk@n8n.io>
Co-authored-by: Kai <kai.hartlage@n8n.io>
Co-authored-by: José Braulio González Valido <jose.gonzalez@n8n.io>
Co-authored-by: Michael Drury <me@michaeldrury.co.uk>
Co-authored-by: Alex Grozav <alex@grozav.com>
Co-authored-by: Lorent Lempereur <looorent@users.noreply.github.com>
Co-authored-by: Rodrigo Santos da Silva <rodrigo.silva@n8n.io>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
Co-authored-by: Dmitrii <dmitrii.kulikov@n8n.io>
Co-authored-by: Savelii <savelii.sychov@n8n.io>
Co-authored-by: Arvin A <51036481+DeveloperTheExplorer@users.noreply.github.com>
Co-authored-by: Raúl Gómez Morales <raul00gm@gmail.com>
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: Yen Su <49794855+yens1@users.noreply.github.com>
Co-authored-by: Nour Alhadi Mahmoud <nour.mahmoud@n8n.io>
Co-authored-by: Eugene <eugene@n8n.io>
Co-authored-by: LevSky22 <56281588+LevSky22@users.noreply.github.com>
Co-authored-by: Riqwan Thamir <rmthamir@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Sam Wooler <swooler592@gmail.com>
Co-authored-by: Soham Ingle <sohamingle@gmail.com>
Co-authored-by: Vishesh Gupta <vishesh.gupta12@outlook.com>
Co-authored-by: Declan Carroll <declan@n8n.io>
Co-authored-by: Jan Kalkan <jan.kalkan@n8n.io>
Co-authored-by: n8n-assistant[bot] <n8n-assistant[bot]@users.noreply.github.com>
2026-07-23 10:05:19 +02:00
..
code-health chore: Migrate all base packages to TypeScript 7 (#34338) 2026-07-17 12:56:29 +03:00
containers ci: Default e2e tests to the vm expression engine (no-changelog) (#34471) 2026-07-21 13:18:49 +00:00
janitor chore: Migrate all base packages to TypeScript 7 (#34338) 2026-07-17 12:56:29 +03:00
performance chore: Migrate all base packages to TypeScript 7 (#34338) 2026-07-17 12:56:29 +03:00
playwright chore: Resolve master→3.x sync conflict (#34758) 2026-07-23 10:05:19 +02:00
rules-engine chore: Migrate all base packages to TypeScript 7 (#34338) 2026-07-17 12:56:29 +03:00
test-impact chore: Migrate all base packages to TypeScript 7 (#34338) 2026-07-17 12:56:29 +03:00
README.md refactor: Extract @n8n/test-impact (TIA) package (no-changelog) (#31868) 2026-06-08 10:20:25 +00:00

packages/testing

n8n's test platform — the infrastructure that decides what to test, runs it, and measures it. Each package is one concern; they compose rather than overlap.

Packages

Package Name Purpose Entry point Consumed by
rules-engine @n8n/rules-engine Generic, typed rules engine for static-analysis tools (register → run → report). The shared substrate. library janitor, code-health
test-impact @n8n/test-impact Test Impact Analysis: build the coverage→impact map, select impacted specs, distribute them across shards. Framework-agnostic. library janitor (CLI), playwright
janitor @n8n/playwright-janitor Static analysis + architecture enforcement for the Playwright suite; also hosts the impact/orchestrate CLI used by CI. janitor CLI playwright, CI
code-health @n8n/code-health Static analysis for monorepo dependency hygiene. code-health CLI CI
containers n8n-containers Composable Docker stack for tests (sqlite / postgres / queue / multi-main / observability / kafka …). stack:* scripts playwright, local dev
playwright n8n-playwright The E2E harness — page objects, composables, fixtures, and the shard distributor that drives CI. test:* scripts CI, local dev
performance @n8n/performance Microbenchmarks for critical code paths (bench, baseline, compare). bench:* scripts CI (nightly), local

How they fit together

graph TD
  rules[rules-engine<br/>rules substrate] --> janitor[janitor<br/>PW lint + impact CLI]
  rules --> codehealth[code-health<br/>monorepo deps]
  impact[test-impact<br/>select + distribute] --> janitor
  impact --> playwright[playwright<br/>E2E harness]
  janitor --> playwright
  containers[containers<br/>Docker stacks] --> playwright
  performance[performance<br/>benchmarks]

  classDef substrate fill:#eef,stroke:#88a;
  class rules,impact substrate;
  • Static-analysis lane: rules-engine (substrate) → janitor (Playwright architecture) and code-health (monorepo deps).
  • Selection lane: test-impact (coverage map → select → distribute) feeds the janitor CLI and the playwright shard distributor.
  • Execution lane: playwright runs E2E against containers-provided stacks.
  • Performance lane: performance is standalone (benchmarks).

Where to look (quick nav for humans + agents)

I want to… Go to
change which E2E specs a PR runs (impact map, selection, sharding) test-impact/ (+ janitor CLI select / distribute)
add/modify an architecture-lint rule for tests janitor/src/rules/ (engine: rules-engine/)
write or fix an E2E test, page object, or fixture playwright/ (see its AGENTS.md)
spin a DB/queue/multi-main stack for a test containers/ (stack:*)
add a microbenchmark performance/
enforce a monorepo dependency rule code-health/

Per-package detail lives in each package's own README.md (and playwright/AGENTS.md).