7.2 Parallel, retry, sharding
Playwright Test는 worker process로 test file을 병렬 실행합니다. 한 file 안의 test는 기본적으로 같은 worker에서 선언 순서로 실행되지만 다른 file 간 순서는 보장되지 않습니다.
npx playwright test --workers=4
npx playwright test --shard=2/3
Worker는 독립 browser를 시작하고 서로 memory를 공유하지 않습니다. Failure 뒤 worker는 깨끗한 환경을 위해 종료되고 새 worker가 이어받습니다.
병렬 안전성
testInfo.testId또는 worker index로 data를 분리합니다.- 같은 file, account, download path를 공유하지 않습니다.
- Test order에 의존하지 않습니다.
- 외부 API rate limit과 database connection을 고려합니다.
- CI CPU, memory에 맞게 worker 수를 정합니다.
workers: process.env.CI ? 2 : undefined,
retries: process.env.CI ? 2 : 0,
Serial mode는 연속된 journey가 꼭 필요한 소수 scenario에만 사용합니다. 앞 test 실패가 뒤 test를 skip하게 해 진단 범위를 넓힙니다.
Sharding은 여러 machine에 suite를 나눕니다. Artifact와 report를 shard별로 수집한 뒤 merge하는 CI 절차를 준비합니다.
참고: Parallelism, Sharding
Worker model
Test file은 기본적으로 parallel worker process에 분배되고 한 file 안의 test는 기본적으로 순차 실행됩니다. Failure 뒤 worker는 pristine environment를 위해 재시작될 수 있습니다. Process global variable과 beforeAll state를 다음 test가 계속 쓴다고 가정하지 않습니다.
Fully parallel
test.describe.configure({ mode: 'parallel' });
같은 file 안 test까지 parallel로 만들면 각 test가 hook을 독립 실행합니다. Shared mutable data가 없는지 먼저 확인합니다.
Retry index 활용 주의
Retry마다 새 data를 만들지, 같은 idempotency key를 재사용할지 명시합니다. 무조건 retry를 ID에 넣으면 최초 실패의 server state를 남길 수 있습니다.
Shard와 report
npx playwright test --shard=1/3 --reporter=blob
npx playwright merge-reports --reporter=html ./all-blob-reports
실습
- Worker 1과 8에서 실행 시간을 비교합니다.
- Shared account collision을 만든 뒤 worker fixture로 해결합니다.
- Shard별 artifact name 충돌을 막습니다.
maxFailures로 대형 실패 시 낭비를 줄이는 기준을 정합니다.