CI 환경에서 Pytest 사용하기

CI 환경에서 Pytest 사용하기

Python
CI 환경에서 Pytest 사용하기
Author

gabriel yang

Published

October 7, 2024


CI 환경에서 Pytest 사용하기: 자동화된 테스트 파이프라인 구축

CI(Continuous Integration, 지속적 통합)는 코드 변경 사항을 자동으로 테스트하고 빌드하는 중요한 개발 프로세스입니다. CI 환경에서 pytest를 사용하면, 코드 변경 시마다 자동으로 테스트를 실행하여 코드의 품질을 유지할 수 있습니다. 이 글에서는 pytest를 CI 환경에서 사용하는 방법을, 예제 코드와 함께 단계별로 설명하겠습니다.

1. CI(지속적 통합)의 필요성

CI는 개발자가 각자의 코드 변경 사항을 중앙 저장소에 통합할 때마다 자동으로 빌드와 테스트를 실행하는 개발 프로세스입니다. 이를 통해 코드 품질을 유지하고, 버그를 빠르게 발견하여 수정할 수 있습니다.

2. Pytest와 CI의 연동 개요

CI 툴(예: GitHub Actions, Travis CI, GitLab CI)과 pytest를 연동하면, 코드가 푸시될 때마다 자동으로 테스트가 실행됩니다. 이를 통해 팀은 코드의 통합 상태를 지속적으로 확인할 수 있고, 빌드가 깨지지 않도록 방지할 수 있습니다.

3. GitHub Actions에서 Pytest 사용하기

GitHub Actions는 GitHub에서 제공하는 CI/CD 도구입니다. 이를 사용하여 pytest 기반의 테스트를 자동화하는 방법을 살펴보겠습니다.

3.1 프로젝트 구조

my_project/

├── src/
   └── my_module.py
├── tests/
   └── test_my_module.py
└── .github/
    └── workflows/
        └── pytest.yml

3.2 예제 코드: src/my_module.py

# 간단한 예제 함수
def add(a, b):
    return a + b

3.3 테스트 코드: tests/test_my_module.py

from src.my_module import add

def test_add():
    assert add(1, 2) == 3
    assert add(-1, 1) == 0

3.4 GitHub Actions 설정 파일: .github/workflows/pytest.yml

name: Python package

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up Python 3.9
      uses: actions/setup-python@v2
      with:
        python-version: '3.9'

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install pytest

    - name: Run Pytest
      run: |
        pytest

3.5 GitHub Actions 파일 설명

  • name: 워크플로의 이름입니다.
  • on: 이 섹션은 CI 파이프라인이 트리거되는 조건을 정의합니다. 여기서는 main 브랜치에 푸시하거나 Pull Request를 열었을 때 실행됩니다.
  • jobs: 이 섹션은 CI 환경에서 수행할 작업을 정의합니다. 여기서는 test 작업이 포함되어 있습니다.
  • steps: 작업을 수행하는 단계입니다.
    • actions/checkout@v2: 리포지토리의 코드를 체크아웃합니다.
    • actions/setup-python@v2: CI 환경에 Python 3.9을 설치합니다.
    • pip install pytest: pytest 및 필요한 라이브러리를 설치합니다.
    • pytest: 실제로 테스트를 실행하는 명령어입니다.

4. Travis CI에서 Pytest 사용하기

Travis CI는 또 다른 인기 있는 CI 도구입니다. 여기서는 Travis CI를 사용해 pytest를 연동하는 방법을 살펴보겠습니다.

4.1 Travis CI 설정 파일: .travis.yml

language: python
python:
  - "3.9"

# 종속성 설치
install:
  - pip install pytest

# 테스트 실행
script:
  - pytest

4.2 Travis CI 설정 파일 설명

  • language: Travis CI가 사용할 언어를 정의합니다. 여기서는 Python을 사용합니다.
  • python: 테스트를 실행할 Python 버전을 지정합니다.
  • install: 종속성을 설치하는 단계입니다. 여기서는 pytest를 설치합니다.
  • script: 실제로 테스트를 실행하는 명령어입니다. pytest가 테스트를 자동으로 실행합니다.

5. GitLab CI에서 Pytest 사용하기

GitLab CI를 사용하는 경우, .gitlab-ci.yml 파일을 설정하여 pytest를 연동할 수 있습니다.

5.1 GitLab CI 설정 파일: .gitlab-ci.yml

image: python:3.9

stages:
  - test

test:
  stage: test
  script:
    - pip install pytest
    - pytest

5.2 GitLab CI 설정 파일 설명

  • image: Python 3.9이 설치된 Docker 이미지를 사용합니다.
  • stages: 빌드 파이프라인의 단계를 정의합니다. 여기서는 test 단계만 있습니다.
  • script: CI 파이프라인에서 실행할 명령어를 정의합니다. pytest를 설치하고 테스트를 실행합니다.

6. 테스트 결과 보고서

CI 도구들은 기본적으로 pytest의 출력 결과를 자동으로 보여주지만, pytest 플러그인을 사용하여 테스트 결과를 더욱 상세하게 보고할 수 있습니다. 예를 들어, pytest-cov를 사용하면 코드 커버리지 결과를 확인할 수 있습니다.

6.1 코드 커버리지 플러그인 설치

pip install pytest-cov

6.2 커버리지 결과를 출력하는 예제

pytest --cov=src

7. 결론

CI 환경에서 pytest를 사용하는 것은 프로젝트의 코드 품질을 유지하고, 팀 간 협업을 강화하는 중요한 방법입니다. GitHub Actions, Travis CI, GitLab CI 등의 도구와 pytest를 연동하여 자동화된 테스트 파이프라인을 구축할 수 있으며, 이를 통해 코드 변경이 있을 때마다 테스트가 자동으로 실행되어 안정성을 보장할 수 있습니다.