Global setup hook
Use a global setup hook to run code once before any tests start (even with multiple workers). This is most useful for parallel suites, where you want shared data/setup to exist before workers begin. It is also supported by non-parallel test suites.
Global setup is most valuable when:
- Running parallel suites: shared data must exist before workers start
- Heavy one-time ingestion: data that takes significant time to load
- Shared, immutable data: data that all suites read but none modify
Keep in beforeAll/afterAll instead when:
- Cleanup is required:
kbnClient.importExport.load()creates saved objects that should be removed with.unload()after tests. Since there's no global teardown, these operations belong in hooks. - Data isolation matters: suites that create/modify data should manage their own setup and cleanup.
esArchiver.loadIfNeeded() is idempotent: only the first call ingests data; subsequent calls do a fast index-exists check and skip. For sequential runs, keeping it in beforeAll is fine (no benefit from global setup). For parallel runs, move it to global setup so ES isn't handling ingestion while workers are running (ingestion can affect Kibana performance).
Scout doesn’t currently have a global teardown hook. Most environments are ephemeral and are shut down after the run.
-
Turn it on in your config
Set
runGlobalSetup: truein your Playwright config:import { createPlaywrightConfig } from '@kbn/scout'; export default createPlaywrightConfig({ testDir: './parallel_tests', workers: 2, runGlobalSetup: true, }); -
Create
global.setup.tsAdd
global.setup.tsinside thetestDirfolder. Scout will discover and run it automatically.test/scout/ui/ └── parallel_tests/ ├── global.setup.ts └── some_suite.spec.ts -
Write setup code
Example: load an ES archive once:
import { globalSetupHook } from '@kbn/scout'; globalSetupHook('Load test data', async ({ esArchiver, log }) => { log.info('[setup] loading ES archive (only if needed)...'); await esArchiver.loadIfNeeded('x-pack/platform/test/fixtures/es_archives/ml/farequote'); });WarningThe global setup hook only has access to worker-scoped fixtures. It cannot use test-scoped fixtures like
page,browserAuth, orpageObjects. -
Run tests
Run tests as usual via Run Scout tests. The global setup hook will execute first—check console logs to verify it ran successfully.