Playwright test.describe.configure — 테스트 격리 · 재시도 · 병렬 제어
그룹 단위로 모드(serial/parallel)·재시도·타임아웃을 제어. 결제 같은 의존적 흐름과 읽기 전용 병렬 테스트, 로그인 세션 재사용 패턴까지.
Playwright의 기본 동작은 "각 파일을 병렬로, 한 파일 내 테스트는 순차로" 실행합니다. 그러나 실제 프로젝트에서는 "이 그룹은 직렬로, 이 그룹은 더 많은 재시도, 이 그룹은 격리 안 함" 같은 세밀한 제어가 필요합니다. test.describe.configure가 이 모든 것을 그룹 단위로 설정합니다.
1. 기본 사용
1import { test, expect } from '@playwright/test'; 2 3test.describe.configure({ mode: 'serial' }); 4 5test.describe('결제 흐름', () => { 6 test('상품 추가', async ({ page }) => { /* ... */ }); 7 test('주소 입력', async ({ page }) => { /* ... */ }); 8 test('결제 완료', async ({ page }) => { /* ... */ }); 9});
mode: 'serial'은 한 테스트가 실패하면 그 그룹의 나머지 테스트를 스킵합니다. 결제 같은 의존적 흐름에 적합합니다.
2. 모드 종류
| mode | 동작 |
|---|---|
'default' | 병렬, 한 테스트 실패해도 다른 테스트는 계속 |
'serial' | 순차 실행, 하나 실패하면 이후 스킵 |
'parallel' | 같은 파일 안에서도 병렬 (기본은 파일 단위 병렬) |
1test.describe.configure({ mode: 'parallel' }); 2test.describe('읽기 전용 검증', () => { 3 // 서로 영향 없으면 같은 파일 안에서도 병렬 4});
읽기 전용 테스트가 많은 그룹은 parallel로 더 빠르게 돌립니다.
3. 재시도 설정
flaky한 그룹만 재시도를 늘립니다.
1test.describe.configure({ retries: 3 }); 2 3test.describe('네트워크 의존 테스트', () => { 4 test('외부 API 응답', async () => { /* ... */ }); 5});
전역 retries: 0이어도 이 그룹만 3회 재시도합니다.
4. 타임아웃 그룹별
1test.describe.configure({ timeout: 60_000 }); 2 3test.describe('느린 빌드 테스트', () => { 4 test('전체 페이지 빌드', async () => { /* 평소 30s 넘게 걸림 */ }); 5});
대부분 테스트는 짧게, 일부 느린 테스트만 길게 — 전체 timeout을 늘리지 않고 그룹만 조정합니다.
5. 격리 안 하기 — beforeAll에서 로그인
mode: 'serial'을 쓰면 beforeAll에서 한 번만 로그인하고 같은 컨텍스트를 그룹 전체가 공유할 수 있습니다.
1test.describe.configure({ mode: 'serial' }); 2 3test.describe('로그인 후 흐름', () => { 4 let page; 5 6 test.beforeAll(async ({ browser }) => { 7 page = await browser.newPage(); 8 await page.goto('/login'); 9 await page.fill('[name=email]', 'a@b.c'); 10 await page.fill('[name=password]', '...'); 11 await page.click('button[type=submit]'); 12 }); 13 14 test.afterAll(async () => { await page.close(); }); 15 16 test('대시보드 접근', async () => { 17 await page.goto('/dashboard'); 18 // ... 19 }); 20});
기본 동작에서는 각 테스트가 새 컨텍스트라 로그인을 매번 다시 해야 합니다. serial + beforeAll 조합으로 세션을 재사용합니다.
6. 주의할 점
mode: 'serial'은 디버깅 용도로 보일 수 있지만, 실제로 의존적 흐름(체크아웃, 회원가입 다단계)에는 정당한 패턴입니다.mode: 'parallel'을 잘못 적용하면 테스트가 같은 DB row를 동시에 만지면서 깨집니다. 격리된 데이터를 쓰는 테스트에만.- 재시도(
retries)는 flaky를 가리는 도구가 아닙니다. 진짜 원인 (네트워크, race) 해결이 우선이고, 안전망으로만 사용. test.describe.configure는 호출된describe블록과 그 안의 모든 자식에 적용됩니다.
7. 정리
| 옵션 | 사용 시점 |
|---|---|
mode: 'serial' | 의존적 흐름, 한 흐름 안의 단계들 |
mode: 'parallel' | 읽기 전용 테스트, 서로 무관 |
retries: N | flaky 그룹 일시 안전망 |
timeout: N | 느린 빌드/측정 테스트 |
전역 설정은 안전한 기본값으로 두고, 그룹별로 필요한 만큼만 조정하는 게 가장 깔끔합니다. 작은 한 줄로 테스트 안정성과 속도를 모두 잡을 수 있습니다.
참고: Playwright 공식 문서 — test.describe.configure / Test execution modes.