Loading

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.

Common uses:

  • Load Elasticsearch archives with esArchiver
  • Run one-time API setup with apiServices
  • Apply shared Kibana settings via kbnClient
Note

Scout doesn’t currently have a global teardown hook. Most environments are ephemeral and are shut down after the run.

Set runGlobalSetup: true in your Playwright config:

import { createPlaywrightConfig } from '@kbn/scout';

export default createPlaywrightConfig({
  testDir: './parallel_tests',
  workers: 2,
  runGlobalSetup: true,
});
		

Add global.setup.ts inside the testDir folder. Scout will discover and run it automatically.

test/scout/ui/
└── parallel_tests/
    ├── global.setup.ts
    └── some_suite.spec.ts
		

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');
});
		
Warning

The global setup hook only has access to worker-scoped fixtures. It cannot use test-scoped fixtures like page, browserAuth, or pageObjects.

Run tests as usual via Run Scout tests. The global setup hook will execute first—check console logs to verify it ran successfully.