diff --git a/packages/playwright/src/reporters/json.ts b/packages/playwright/src/reporters/json.ts index b2fc664c15..ac33d25d9a 100644 --- a/packages/playwright/src/reporters/json.ts +++ b/packages/playwright/src/reporters/json.ts @@ -203,6 +203,7 @@ class JSONReporter implements ReporterV2 { const steps = result.steps.filter(s => s.category === 'test.step'); const jsonResult: JSONReportTestResult = { workerIndex: result.workerIndex, + parallelIndex: result.parallelIndex, status: result.status, duration: result.duration, error: result.error, diff --git a/packages/playwright/types/testReporter.d.ts b/packages/playwright/types/testReporter.d.ts index 9662faee73..2abfa9592e 100644 --- a/packages/playwright/types/testReporter.d.ts +++ b/packages/playwright/types/testReporter.d.ts @@ -291,6 +291,7 @@ export interface JSONReportError { export interface JSONReportTestResult { workerIndex: number; + parallelIndex: number; status: TestStatus | undefined; duration: number; error: TestError | undefined; diff --git a/tests/playwright-test/reporter-json.spec.ts b/tests/playwright-test/reporter-json.spec.ts index f8ec8b9b0b..89b995ff35 100644 --- a/tests/playwright-test/reporter-json.spec.ts +++ b/tests/playwright-test/reporter-json.spec.ts @@ -327,3 +327,31 @@ test.describe('report location', () => { expect(fs.existsSync(testInfo.outputPath('foo', 'bar', 'baz', 'my-report.json'))).toBe(true); }); }); + +test('should report parallelIndex', async ({ runInlineTest }, testInfo) => { + const result = await runInlineTest({ + 'tests/a.spec.js': ` + import { test, expect } from '@playwright/test'; + const fs = require('fs'); + test.describe.configure({ mode: 'parallel' }); + test('test 1 passes!', async ({}) => { + await new Promise(f => setTimeout(f, 1000)); + }); + test('test 2 fails!', async ({}) => { + expect(1 + 1).toBe(3); + await new Promise(f => setTimeout(f, 1000)); + }); + test('test 3 passes!', async ({}) => { + await new Promise(f => setTimeout(f, 1000)); + }); + ` + }, { 'workers': '2', 'reporter': 'json' }); + expect(result.passed).toBe(2); + expect(result.failed).toBe(1); + expect(result.report.suites[0].specs[0].tests[0].results[0].workerIndex).toBe(0); + expect(result.report.suites[0].specs[1].tests[0].results[0].workerIndex).toBe(1); + expect(result.report.suites[0].specs[2].tests[0].results[0].workerIndex).toBe(2); + expect(result.report.suites[0].specs[0].tests[0].results[0].parallelIndex).toBe(0); + expect(result.report.suites[0].specs[1].tests[0].results[0].parallelIndex).toBe(1); + expect(result.report.suites[0].specs[2].tests[0].results[0].parallelIndex).toBe(1); +}); diff --git a/utils/generate_types/overrides-testReporter.d.ts b/utils/generate_types/overrides-testReporter.d.ts index b2e8f0e9e6..70365a911e 100644 --- a/utils/generate_types/overrides-testReporter.d.ts +++ b/utils/generate_types/overrides-testReporter.d.ts @@ -109,6 +109,7 @@ export interface JSONReportError { export interface JSONReportTestResult { workerIndex: number; + parallelIndex: number; status: TestStatus | undefined; duration: number; error: TestError | undefined;