docs/extend/scout/global-setup-hook.md
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:
esArchiverapiServiceskbnClient::::::{note} Scout doesn’t currently have a global teardown hook. Most environments are ephemeral and are shut down after the run. ::::::
:::::::::::{stepper}
::::::::::{step} Turn it on in your config
Set runGlobalSetup: true in your Playwright config:
import { createPlaywrightConfig } from '@kbn/scout';
export default createPlaywrightConfig({
testDir: './parallel_tests',
workers: 2,
runGlobalSetup: true,
});
::::::::::
::::::::::{step} Create global.setup.ts
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
::::::::::
::::::::::{step} 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');
});
::::::{warning}
The global setup hook only has access to worker-scoped fixtures. It cannot use test-scoped fixtures like page, browserAuth, or pageObjects.
::::::
::::::::::
::::::::::{step} 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.
::::::::::::