본문으로 건너뛰기
SDETRole
SDETRole

용어집 · UI 자동화

테스트 샤딩

영어: Test sharding

다른 이름: sharding, 샤딩, 테스트 샤드, shards

정의

테스트 스위트를 샤드(shard)라는 조각으로 나눠 여러 머신에서 동시에 실행해, 긴 스위트를 훨씬 짧은 시간에 끝내는 기법입니다.

샤딩은 스위트를 대략 같은 크기의 N개 부분으로 나누고, 각 부분을 별도 잡(job)으로, 보통은 별도 CI 머신에서 실행하는 방식입니다. 병렬 워커보다 한 단계 위의 개념입니다. 워커는 한 머신 안에서 테스트를 동시에 실행하고, 샤드는 스위트를 여러 머신에 분산합니다. 대규모 UI 스위트가 적당한 파이프라인 시간 안에 끝나려면 두 방식을 함께 써야 합니다.

예시 (Playwright와 GitHub Actions)

Playwright는 플래그 하나로 샤딩을 지원합니다.

npx playwright test --shard=1/4
npx playwright test --shard=2/4

CI에서는 매트릭스가 샤드마다 잡을 하나씩 시작합니다. 각 샤드는 blob 리포트를 쓰고, 마지막 잡이 이를 하나의 HTML 리포트로 병합합니다.

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        shard: [1, 2, 3, 4]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npx playwright test --shard=${{ matrix.shard }}/4 --reporter=blob
      - uses: actions/upload-artifact@v4
        with:
          name: blob-report-${{ matrix.shard }}
          path: blob-report

병합 잡은 모든 blob-report-* 아티팩트를 한 폴더에 내려받은 뒤 npx playwright merge-reports --reporter html ./all-blob-reports를 실행합니다.

테스트가 분배되는 방식

Playwright는 fullyParallel: true가 설정되지 않은 한 테스트 파일 단위로 나눕니다. 설정된 경우에는 개별 테스트 단위로 샤드 간 균형을 맞춥니다. 파일 단위로 나눌 때는 거대한 spec 파일 하나 때문에 특정 샤드만 훨씬 느려질 수 있으므로, 파일 크기를 적당히 작게 유지하십시오.

흔한 실수

  • 격리되지 않은 스위트를 샤딩하는 것. 데이터를 공유하거나 실행 순서에 의존하는 테스트는 한 머신에서는 통과하지만 나누면 실패합니다. 테스트 격리부터 해결하십시오.
  • 전체 결과를 잃어버리는 것. 병합 단계가 없으면 실패 내역이 N개의 잡 로그와 N개의 리포트에 흩어집니다.
  • 샤드가 너무 많은 것. 샤드마다 체크아웃, 설치, 브라우저 다운로드라는 고정 비용이 듭니다. 일정 수준을 넘으면 샤드를 늘려도 시간은 줄지 않고 비용만 늘어납니다.
  • fail-fast를 켜 둔 것. 샤드 하나가 실패하면 나머지가 취소되어 남은 결과를 얻지 못합니다.

SDETRole 전체에서 검색할 내용을 입력하세요.

Pagefind 전문 검색 · 브라우저에서 실행됩니다 검색 페이지 열기 →