Skip to content

Commit 443bfc7

Browse files
[8.18] [scout] unique runId for reporting, disabled failed test reporter locally (#209507) (#210087)
# Backport This will backport the following commits from `main` to `8.18`: - [[scout] unique runId for reporting, disabled failed test reporter locally (#209507)](#209507) <!--- Backport version: 9.4.3 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Dzmitry Lemechko","email":"[email protected]"},"sourceCommit":{"committedDate":"2025-02-05T15:35:26Z","message":"[scout] unique runId for reporting, disabled failed test reporter locally (#209507)\n\n## Summary\r\n\r\nThis PR makes few changes to scout reporter:\r\n\r\nRecently I found out that Playwright load configuration file _multiple\r\ntimes_:\r\n- first time after you run `npx playwright test -c ...`\r\n- on every worker start\r\n\r\nlog before:\r\n\r\n```\r\n[main][~/github/kibana]$ npx playwright test --config x-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\r\n[createPlaywrightConfig] called with runId: 18f35f735a10155c\r\n\r\nRunning 1 test using 1 worker\r\n\r\n[createPlaywrightConfig] called with runId: 2633b4e4c20afa15\r\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps › Full screen mode @svlSecurity @svlOblt @svlSearch @ess\r\n```\r\n\r\nWith our current logic unique `runId` will be generated on each\r\nconfiguration load, meaning for parallel run we will report failures in\r\ndifferent directories instead of the same one.\r\n\r\nPlaywright doesn't expose any unique identifier for the run, so we have\r\ndo something similar described in\r\n\r\nhttps://github.com/microsoft/playwright/issues/28941#issuecomment-1888008102\r\n\r\nlog after fix:\r\n\r\n```\r\n[main][~/github/kibana]$ npx playwright test --config x-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\r\n[createPlaywrightConfig] called with runId: 310a576f32d3b8a5\r\n\r\nRunning 1 test using 1 worker\r\n\r\n[createPlaywrightConfig] called with runId: 310a576f32d3b8a5\r\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps › Full screen mode @svlSecurity @svlOblt @svlSearch @ess\r\n```\r\n\r\nWe also had a chat with @dolaru and agreed that Scout reporters to be\r\ndisabled for local test run. Few reasons:\r\n- Scout custom reporting targets CI execution: events-based reporter was\r\nalready disabled\r\n- Failed test reporter purpose is to provide html boilerplate to be\r\nannotated in pipeline build\r\n- When you run tests with IDE playwright plugin it provides its own\r\nreporter / history, should be enough.","sha":"6635fe501c307d567afa71a346fc91a7675e3cc5","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","v9.0.0","backport:prev-minor","backport:prev-major","test:scout","v9.1.0"],"title":"[scout] unique runId for reporting, disabled failed test reporter locally","number":209507,"url":"https://github.com/elastic/kibana/pull/209507","mergeCommit":{"message":"[scout] unique runId for reporting, disabled failed test reporter locally (#209507)\n\n## Summary\r\n\r\nThis PR makes few changes to scout reporter:\r\n\r\nRecently I found out that Playwright load configuration file _multiple\r\ntimes_:\r\n- first time after you run `npx playwright test -c ...`\r\n- on every worker start\r\n\r\nlog before:\r\n\r\n```\r\n[main][~/github/kibana]$ npx playwright test --config x-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\r\n[createPlaywrightConfig] called with runId: 18f35f735a10155c\r\n\r\nRunning 1 test using 1 worker\r\n\r\n[createPlaywrightConfig] called with runId: 2633b4e4c20afa15\r\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps › Full screen mode @svlSecurity @svlOblt @svlSearch @ess\r\n```\r\n\r\nWith our current logic unique `runId` will be generated on each\r\nconfiguration load, meaning for parallel run we will report failures in\r\ndifferent directories instead of the same one.\r\n\r\nPlaywright doesn't expose any unique identifier for the run, so we have\r\ndo something similar described in\r\n\r\nhttps://github.com/microsoft/playwright/issues/28941#issuecomment-1888008102\r\n\r\nlog after fix:\r\n\r\n```\r\n[main][~/github/kibana]$ npx playwright test --config x-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\r\n[createPlaywrightConfig] called with runId: 310a576f32d3b8a5\r\n\r\nRunning 1 test using 1 worker\r\n\r\n[createPlaywrightConfig] called with runId: 310a576f32d3b8a5\r\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps › Full screen mode @svlSecurity @svlOblt @svlSearch @ess\r\n```\r\n\r\nWe also had a chat with @dolaru and agreed that Scout reporters to be\r\ndisabled for local test run. Few reasons:\r\n- Scout custom reporting targets CI execution: events-based reporter was\r\nalready disabled\r\n- Failed test reporter purpose is to provide html boilerplate to be\r\nannotated in pipeline build\r\n- When you run tests with IDE playwright plugin it provides its own\r\nreporter / history, should be enough.","sha":"6635fe501c307d567afa71a346fc91a7675e3cc5"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"9.0","label":"v9.0.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/209808","number":209808,"state":"MERGED","mergeCommit":{"sha":"2c04505bd6ad9db59e0ea3aa617d649b41134294","message":"[9.0] [scout] unique runId for reporting, disabled failed test reporter locally (#209507) (#209808)\n\n# Backport\n\nThis will backport the following commits from `main` to `9.0`:\n- [[scout] unique runId for reporting, disabled failed test reporter\nlocally (#209507)](https://github.com/elastic/kibana/pull/209507)\n\n<!--- Backport version: 9.4.3 -->\n\n### Questions ?\nPlease refer to the [Backport tool\ndocumentation](https://github.com/sqren/backport)\n\n<!--BACKPORT [{\"author\":{\"name\":\"Dzmitry\nLemechko\",\"email\":\"[email protected]\"},\"sourceCommit\":{\"committedDate\":\"2025-02-05T15:35:26Z\",\"message\":\"[scout]\nunique runId for reporting, disabled failed test reporter locally\n(#209507)\\n\\n## Summary\\r\\n\\r\\nThis PR makes few changes to scout\nreporter:\\r\\n\\r\\nRecently I found out that Playwright load configuration\nfile _multiple\\r\\ntimes_:\\r\\n- first time after you run `npx playwright\ntest -c ...`\\r\\n- on every worker start\\r\\n\\r\\nlog\nbefore:\\r\\n\\r\\n```\\r\\n[main][~/github/kibana]$ npx playwright test\n--config\nx-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\\r\\n[createPlaywrightConfig]\ncalled with runId: 18f35f735a10155c\\r\\n\\r\\nRunning 1 test using 1\nworker\\r\\n\\r\\n[createPlaywrightConfig] called with runId:\n2633b4e4c20afa15\\r\\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps ›\nFull screen mode @svlSecurity @svlOblt @svlSearch\n@ess\\r\\n```\\r\\n\\r\\nWith our current logic unique `runId` will be\ngenerated on each\\r\\nconfiguration load, meaning for parallel run we\nwill report failures in\\r\\ndifferent directories instead of the same\none.\\r\\n\\r\\nPlaywright doesn't expose any unique identifier for the run,\nso we have\\r\\ndo something similar described\nin\\r\\n\\r\\nhttps://github.com/microsoft/playwright/issues/28941#issuecomment-1888008102\\r\\n\\r\\nlog\nafter fix:\\r\\n\\r\\n```\\r\\n[main][~/github/kibana]$ npx playwright test\n--config\nx-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\\r\\n[createPlaywrightConfig]\ncalled with runId: 310a576f32d3b8a5\\r\\n\\r\\nRunning 1 test using 1\nworker\\r\\n\\r\\n[createPlaywrightConfig] called with runId:\n310a576f32d3b8a5\\r\\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps ›\nFull screen mode @svlSecurity @svlOblt @svlSearch @ess\\r\\n```\\r\\n\\r\\nWe\nalso had a chat with @dolaru and agreed that Scout reporters to\nbe\\r\\ndisabled for local test run. Few reasons:\\r\\n- Scout custom\nreporting targets CI execution: events-based reporter was\\r\\nalready\ndisabled\\r\\n- Failed test reporter purpose is to provide html\nboilerplate to be\\r\\nannotated in pipeline build\\r\\n- When you run tests\nwith IDE playwright plugin it provides its own\\r\\nreporter / history,\nshould be\nenough.\",\"sha\":\"6635fe501c307d567afa71a346fc91a7675e3cc5\",\"branchLabelMapping\":{\"^v9.1.0$\":\"main\",\"^v8.19.0$\":\"8.x\",\"^v(\\\\d+).(\\\\d+).\\\\d+$\":\"$1.$2\"}},\"sourcePullRequest\":{\"labels\":[\"release_note:skip\",\"v9.0.0\",\"backport:prev-minor\",\"test:scout\",\"v9.1.0\"],\"title\":\"[scout]\nunique runId for reporting, disabled failed test reporter\nlocally\",\"number\":209507,\"url\":\"https://github.com/elastic/kibana/pull/209507\",\"mergeCommit\":{\"message\":\"[scout]\nunique runId for reporting, disabled failed test reporter locally\n(#209507)\\n\\n## Summary\\r\\n\\r\\nThis PR makes few changes to scout\nreporter:\\r\\n\\r\\nRecently I found out that Playwright load configuration\nfile _multiple\\r\\ntimes_:\\r\\n- first time after you run `npx playwright\ntest -c ...`\\r\\n- on every worker start\\r\\n\\r\\nlog\nbefore:\\r\\n\\r\\n```\\r\\n[main][~/github/kibana]$ npx playwright test\n--config\nx-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\\r\\n[createPlaywrightConfig]\ncalled with runId: 18f35f735a10155c\\r\\n\\r\\nRunning 1 test using 1\nworker\\r\\n\\r\\n[createPlaywrightConfig] called with runId:\n2633b4e4c20afa15\\r\\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps ›\nFull screen mode @svlSecurity @svlOblt @svlSearch\n@ess\\r\\n```\\r\\n\\r\\nWith our current logic unique `runId` will be\ngenerated on each\\r\\nconfiguration load, meaning for parallel run we\nwill report failures in\\r\\ndifferent directories instead of the same\none.\\r\\n\\r\\nPlaywright doesn't expose any unique identifier for the run,\nso we have\\r\\ndo something similar described\nin\\r\\n\\r\\nhttps://github.com/microsoft/playwright/issues/28941#issuecomment-1888008102\\r\\n\\r\\nlog\nafter fix:\\r\\n\\r\\n```\\r\\n[main][~/github/kibana]$ npx playwright test\n--config\nx-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\\r\\n[createPlaywrightConfig]\ncalled with runId: 310a576f32d3b8a5\\r\\n\\r\\nRunning 1 test using 1\nworker\\r\\n\\r\\n[createPlaywrightConfig] called with runId:\n310a576f32d3b8a5\\r\\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps ›\nFull screen mode @svlSecurity @svlOblt @svlSearch @ess\\r\\n```\\r\\n\\r\\nWe\nalso had a chat with @dolaru and agreed that Scout reporters to\nbe\\r\\ndisabled for local test run. Few reasons:\\r\\n- Scout custom\nreporting targets CI execution: events-based reporter was\\r\\nalready\ndisabled\\r\\n- Failed test reporter purpose is to provide html\nboilerplate to be\\r\\nannotated in pipeline build\\r\\n- When you run tests\nwith IDE playwright plugin it provides its own\\r\\nreporter / history,\nshould be\nenough.\",\"sha\":\"6635fe501c307d567afa71a346fc91a7675e3cc5\"}},\"sourceBranch\":\"main\",\"suggestedTargetBranches\":[\"9.0\"],\"targetPullRequestStates\":[{\"branch\":\"9.0\",\"label\":\"v9.0.0\",\"branchLabelMappingKey\":\"^v(\\\\d+).(\\\\d+).\\\\d+$\",\"isSourceBranch\":false,\"state\":\"NOT_CREATED\"},{\"branch\":\"main\",\"label\":\"v9.1.0\",\"branchLabelMappingKey\":\"^v9.1.0$\",\"isSourceBranch\":true,\"state\":\"MERGED\",\"url\":\"https://github.com/elastic/kibana/pull/209507\",\"number\":209507,\"mergeCommit\":{\"message\":\"[scout]\nunique runId for reporting, disabled failed test reporter locally\n(#209507)\\n\\n## Summary\\r\\n\\r\\nThis PR makes few changes to scout\nreporter:\\r\\n\\r\\nRecently I found out that Playwright load configuration\nfile _multiple\\r\\ntimes_:\\r\\n- first time after you run `npx playwright\ntest -c ...`\\r\\n- on every worker start\\r\\n\\r\\nlog\nbefore:\\r\\n\\r\\n```\\r\\n[main][~/github/kibana]$ npx playwright test\n--config\nx-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\\r\\n[createPlaywrightConfig]\ncalled with runId: 18f35f735a10155c\\r\\n\\r\\nRunning 1 test using 1\nworker\\r\\n\\r\\n[createPlaywrightConfig] called with runId:\n2633b4e4c20afa15\\r\\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps ›\nFull screen mode @svlSecurity @svlOblt @svlSearch\n@ess\\r\\n```\\r\\n\\r\\nWith our current logic unique `runId` will be\ngenerated on each\\r\\nconfiguration load, meaning for parallel run we\nwill report failures in\\r\\ndifferent directories instead of the same\none.\\r\\n\\r\\nPlaywright doesn't expose any unique identifier for the run,\nso we have\\r\\ndo something similar described\nin\\r\\n\\r\\nhttps://github.com/microsoft/playwright/issues/28941#issuecomment-1888008102\\r\\n\\r\\nlog\nafter fix:\\r\\n\\r\\n```\\r\\n[main][~/github/kibana]$ npx playwright test\n--config\nx-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\\r\\n[createPlaywrightConfig]\ncalled with runId: 310a576f32d3b8a5\\r\\n\\r\\nRunning 1 test using 1\nworker\\r\\n\\r\\n[createPlaywrightConfig] called with runId:\n310a576f32d3b8a5\\r\\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps ›\nFull screen mode @svlSecurity @svlOblt @svlSearch @ess\\r\\n```\\r\\n\\r\\nWe\nalso had a chat with @dolaru and agreed that Scout reporters to\nbe\\r\\ndisabled for local test run. Few reasons:\\r\\n- Scout custom\nreporting targets CI execution: events-based reporter was\\r\\nalready\ndisabled\\r\\n- Failed test reporter purpose is to provide html\nboilerplate to be\\r\\nannotated in pipeline build\\r\\n- When you run tests\nwith IDE playwright plugin it provides its own\\r\\nreporter / history,\nshould be enough.\",\"sha\":\"6635fe501c307d567afa71a346fc91a7675e3cc5\"}}]}]\nBACKPORT-->\n\nCo-authored-by: Dzmitry Lemechko <[email protected]>"}},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/209507","number":209507,"mergeCommit":{"message":"[scout] unique runId for reporting, disabled failed test reporter locally (#209507)\n\n## Summary\r\n\r\nThis PR makes few changes to scout reporter:\r\n\r\nRecently I found out that Playwright load configuration file _multiple\r\ntimes_:\r\n- first time after you run `npx playwright test -c ...`\r\n- on every worker start\r\n\r\nlog before:\r\n\r\n```\r\n[main][~/github/kibana]$ npx playwright test --config x-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\r\n[createPlaywrightConfig] called with runId: 18f35f735a10155c\r\n\r\nRunning 1 test using 1 worker\r\n\r\n[createPlaywrightConfig] called with runId: 2633b4e4c20afa15\r\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps › Full screen mode @svlSecurity @svlOblt @svlSearch @ess\r\n```\r\n\r\nWith our current logic unique `runId` will be generated on each\r\nconfiguration load, meaning for parallel run we will report failures in\r\ndifferent directories instead of the same one.\r\n\r\nPlaywright doesn't expose any unique identifier for the run, so we have\r\ndo something similar described in\r\n\r\nhttps://github.com/microsoft/playwright/issues/28941#issuecomment-1888008102\r\n\r\nlog after fix:\r\n\r\n```\r\n[main][~/github/kibana]$ npx playwright test --config x-pack/platform/plugins/shared/maps/ui_tests/playwright.config.ts\r\n[createPlaywrightConfig] called with runId: 310a576f32d3b8a5\r\n\r\nRunning 1 test using 1 worker\r\n\r\n[createPlaywrightConfig] called with runId: 310a576f32d3b8a5\r\n[chromium] › full_screen_mode.spec.ts:28:9 › Maps › Full screen mode @svlSecurity @svlOblt @svlSearch @ess\r\n```\r\n\r\nWe also had a chat with @dolaru and agreed that Scout reporters to be\r\ndisabled for local test run. Few reasons:\r\n- Scout custom reporting targets CI execution: events-based reporter was\r\nalready disabled\r\n- Failed test reporter purpose is to provide html boilerplate to be\r\nannotated in pipeline build\r\n- When you run tests with IDE playwright plugin it provides its own\r\nreporter / history, should be enough.","sha":"6635fe501c307d567afa71a346fc91a7675e3cc5"}}]}] BACKPORT--> Co-authored-by: Dzmitry Lemechko <[email protected]>
1 parent d07a9d6 commit 443bfc7

File tree

3 files changed

+69
-15
lines changed

3 files changed

+69
-15
lines changed

packages/kbn-scout-reporting/src/reporting/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,7 @@ export const scoutPlaywrightReporter = (
2626
export const scoutFailedTestsReporter = (
2727
options?: ScoutPlaywrightReporterOptions
2828
): ReporterDescription => {
29-
return ['@kbn/scout-reporting/src/reporting/playwright/failed_test', options];
29+
return SCOUT_REPORTER_ENABLED
30+
? ['@kbn/scout-reporting/src/reporting/playwright/failed_test', options]
31+
: ['null'];
3032
};

packages/kbn-scout/src/playwright/config/create_config.test.ts

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,35 @@
77
* License v3.0 only", or the "Server Side Public License, v 1".
88
*/
99

10-
import { SCOUT_REPORTER_ENABLED, SCOUT_SERVERS_ROOT } from '@kbn/scout-info';
10+
import { SCOUT_SERVERS_ROOT } from '@kbn/scout-info';
11+
import { scoutPlaywrightReporter, scoutFailedTestsReporter } from '@kbn/scout-reporting';
1112
import { createPlaywrightConfig } from './create_config';
1213
import { VALID_CONFIG_MARKER } from '../types';
1314
import { generateTestRunId } from '@kbn/scout-reporting';
1415

1516
jest.mock('@kbn/scout-reporting', () => ({
1617
...jest.requireActual('@kbn/scout-reporting'),
1718
generateTestRunId: jest.fn(),
19+
scoutPlaywrightReporter: jest.fn(),
20+
scoutFailedTestsReporter: jest.fn(),
1821
}));
1922

2023
describe('createPlaywrightConfig', () => {
24+
const mockedRunId = 'mocked-run-id';
2125
const mockGenerateTestRunId = generateTestRunId as jest.Mock;
26+
const mockedScoutPlaywrightReporter = scoutPlaywrightReporter as jest.Mock;
27+
const mockedScoutFailedTestsReporter = scoutFailedTestsReporter as jest.Mock;
2228

2329
beforeEach(() => {
2430
jest.clearAllMocks();
31+
delete process.env.TEST_RUN_ID;
2532
});
2633

2734
it('should return a valid default Playwright configuration', () => {
28-
const testRunId = 'test-run-id';
29-
mockGenerateTestRunId.mockImplementationOnce(() => testRunId);
35+
mockGenerateTestRunId.mockImplementationOnce(() => mockedRunId);
36+
// Scout reporters are disabled by default
37+
mockedScoutPlaywrightReporter.mockReturnValueOnce(['null']);
38+
mockedScoutFailedTestsReporter.mockReturnValueOnce(['null']);
3039

3140
const testDir = './my_tests';
3241
const config = createPlaywrightConfig({ testDir });
@@ -48,28 +57,63 @@ describe('createPlaywrightConfig', () => {
4857
expect(config.reporter).toEqual([
4958
['html', { open: 'never', outputFolder: './output/reports' }],
5059
['json', { outputFile: './output/reports/test-results.json' }],
51-
SCOUT_REPORTER_ENABLED
52-
? [
53-
'@kbn/scout-reporting/src/reporting/playwright/events',
54-
{ name: 'scout-playwright', runId: testRunId },
55-
]
56-
: ['null'],
57-
[
58-
'@kbn/scout-reporting/src/reporting/playwright/failed_test',
59-
{ name: 'scout-playwright-failed-tests', runId: testRunId },
60-
],
60+
['null'],
61+
['null'],
6162
]);
6263
expect(config.timeout).toBe(60000);
6364
expect(config.expect?.timeout).toBe(10000);
6465
expect(config.outputDir).toBe('./output/test-artifacts');
6566
expect(config.projects![0].name).toEqual('chromium');
6667
});
6768

69+
it('should return a Playwright configuration with Scout reporters', () => {
70+
mockGenerateTestRunId.mockImplementationOnce(() => mockedRunId);
71+
mockedScoutPlaywrightReporter.mockReturnValueOnce([
72+
'@kbn/scout-reporting/src/reporting/playwright/events',
73+
{ name: 'scout-playwright', runId: mockedRunId },
74+
]);
75+
mockedScoutFailedTestsReporter.mockReturnValueOnce([
76+
'@kbn/scout-reporting/src/reporting/playwright/failed_test',
77+
{ name: 'scout-playwright-failed-tests', runId: mockedRunId },
78+
]);
79+
80+
const testDir = './my_tests';
81+
const config = createPlaywrightConfig({ testDir });
82+
83+
expect(mockGenerateTestRunId).toHaveBeenCalledTimes(1);
84+
expect(config.reporter).toEqual([
85+
['html', { open: 'never', outputFolder: './output/reports' }],
86+
['json', { outputFile: './output/reports/test-results.json' }],
87+
[
88+
'@kbn/scout-reporting/src/reporting/playwright/events',
89+
{ name: 'scout-playwright', runId: mockedRunId },
90+
],
91+
[
92+
'@kbn/scout-reporting/src/reporting/playwright/failed_test',
93+
{ name: 'scout-playwright-failed-tests', runId: mockedRunId },
94+
],
95+
]);
96+
});
97+
6898
it(`should override 'workers' count in Playwright configuration`, () => {
6999
const testDir = './my_tests';
70100
const workers = 2;
71101

72102
const config = createPlaywrightConfig({ testDir, workers });
73103
expect(config.workers).toBe(workers);
74104
});
105+
106+
it('should generate and cache runId in process.env.TEST_RUN_ID', () => {
107+
mockGenerateTestRunId.mockReturnValue(mockedRunId);
108+
109+
// First call to create config
110+
createPlaywrightConfig({ testDir: 'tests' });
111+
expect(process.env.TEST_RUN_ID).toBe(mockedRunId);
112+
113+
// Second call (should use the cached value)
114+
createPlaywrightConfig({ testDir: 'tests' });
115+
116+
expect(generateTestRunId).toHaveBeenCalledTimes(1);
117+
expect(process.env.TEST_RUN_ID).toBe(mockedRunId);
118+
});
75119
});

packages/kbn-scout/src/playwright/config/create_config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,15 @@ import { SCOUT_SERVERS_ROOT } from '@kbn/scout-info';
1717
import { ScoutPlaywrightOptions, ScoutTestOptions, VALID_CONFIG_MARKER } from '../types';
1818

1919
export function createPlaywrightConfig(options: ScoutPlaywrightOptions): PlaywrightTestConfig {
20-
const runId = generateTestRunId();
20+
/**
21+
* Playwright loads the config file multiple times, so we need to generate a unique run id
22+
* and store it in the environment to be used across all config function calls.
23+
*/
24+
let runId = process.env.TEST_RUN_ID;
25+
if (!runId) {
26+
runId = generateTestRunId();
27+
process.env.TEST_RUN_ID = runId;
28+
}
2129

2230
return defineConfig<ScoutTestOptions>({
2331
testDir: options.testDir,

0 commit comments

Comments
 (0)