본문 바로가기
C.W.K.
Stream
Lesson 03 of 13 · published

다중 버전 테스트

~11 min · matrix, versions, compatibility

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

지원 버전 테스트

README에 'Python 3.10-3.12 지원'이라고 적었다면, CI가 모든 PR마다 이를 증명해야 해. 그렇지 않으면 그 지원 주장은 언젠가 들통날 거짓말일 뿐이야.

기본 패턴은 지원하는 각 차원에 대한 매트릭스를 만드는 거야. 차원의 예시는 이런 것들이 있어:

  • 언어 버전 (Python 3.10, 3.11, 3.12, 3.13).
  • 운영체제 (ubuntu-latest, macos-latest, windows-latest).
  • 데이터베이스 드라이버 (postgres 14, 15, 16).
  • 프레임워크 버전 (Django 4.2, 5.0).

매트릭스의 각 셀은 자기만의 작업을 가지고 병렬로 실행되며 각자 로그를 남겨. UI에서 작업 이름은 템플릿을 기반으로 만들어져 (예: test (python-3.12, ubuntu-latest)).

비용 통제

단순하게 4×3 매트릭스를 구성하면 PR 하나당 12번의 실행이 발생해. 비용이 급격히 늘어나지. 두 가지 타협안이 있어:

  • main 브랜치엔 전체 매트릭스, PR엔 스모크 매트릭스. PR에서는 리눅스의 최저 버전과 최고 버전만 테스트해. main 브랜치에서 전체 매트릭스를 돌리는 거지.
  • 리눅스 실패 시 느린 운영체제 취소. 작업 수준에서 fail-fast: true를 설정해 첫 번째 실패가 발생하면 전체 매트릭스를 중단하는 거야.

Code

Python × OS 매트릭스 + 스모크 vs full 전략·yaml
jobs:
  test:
    name: test (py${{ matrix.python }}, ${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: true
      matrix:
        python: ['3.10', '3.11', '3.12']
        os: [ubuntu-latest]
        include:
          # Add macOS only on push to main
          - python: '3.12'
            os: macos-latest
          - python: '3.12'
            os: windows-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '${{ matrix.python }}' }
      - run: pip install -e '.[dev]' && pytest -q

External links

Exercise

프로젝트가 실제로 지원한다고 주장하는 언어 버전 범위를 골라봐 (README와 pyproject/package.json을 확인해). 모든 버전을 테스트하는 매트릭스를 추가해. 셀 하나라도 실패하면 결정해야 해: 코드를 수정하거나 지원 주장을 업데이트하거나.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.