CI 환경에서 Pytest 사용하기
CI 환경에서 Pytest 사용하기
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
를 연동하여 자동화된 테스트 파이프라인을 구축할 수 있으며, 이를 통해 코드 변경이 있을 때마다 테스트가 자동으로 실행되어 안정성을 보장할 수 있습니다.