6. 도커(Docker)와 함께하는 FastAPI CRUD 구축: FastAPI 테스트 코드 관리하기

data_jeong·2023년 11월 13일
0
post-thumbnail

테스트 코드의 작성과 유지는 소프트웨어 개발 과정에서 매우 중요한 부분입니다. 테스트 코드는 다음과 같은 여러 가지 중요한 이점을 제공합니다:

  1. 버그 조기 발견: 테스트 코드는 개발 과정에서 버그를 조기에 발견하고 수정하는 데 도움을 줍니다. 이는 장기적으로 시간과 비용을 절약할 수 있게 해줍니다.

  2. 코드 품질 향상: 정기적인 테스트를 통해 코드의 품질을 높이고, 이로 인해 더 안정적이고 신뢰할 수 있는 소프트웨어를 개발할 수 있습니다.

  3. 리팩토링의 용이성: 테스트 코드가 있으면 코드를 리팩토링하거나 기능을 추가하는 과정에서 기존 기능이 예상대로 작동하는지 쉽게 확인할 수 있습니다.

  4. 문서화의 역할: 테스트 코드는 어떻게 코드가 사용되어야 하는지에 대한 예시이자 문서의 역할을 합니다. 새로운 개발자가 프로젝트에 참여할 때 테스트 코드를 통해 빠르게 시스템을 이해할 수 있습니다

  5. 지속적인 통합 및 배포(CI/CD) 지원: 자동화된 테스트는 지속적인 통합 및 배포 파이프라인의 핵심 요소입니다. 테스트가 자동화되어 있으면 코드 변경 사항이 기존 시스템과 잘 통합되는지 즉시 확인할 수 있습니다.

  6. 테스트 코드 작성: FastAPI 애플리케이션에 대한 테스트를 작성합니다.

  7. GitHub Actions 설정: 푸시(push) 또는 풀 리퀘스트(pull request)가 발생할 때마다 테스트를 실행하고, 테스트가 통과하면 자동으로 배포하는 GitHub Actions 워크플로우를 설정합니다.

테스트 코드 작성

FastAPI 애플리케이션에 대한 간단한 테스트를 작성합니다. 예를 들어, test_main.py 파일을 만들고 다음과 같이 작성할 수 있습니다:

pythonCopy code
from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

def test_read_main():
    response = client.get("/items/1")
    assert response.status_code == 200
    assert response.json() == {"detail": "Item not found"}

이 코드는 FastAPI 애플리케이션의 /items/1 엔드포인트에 대한 테스트를 포함합니다.

GitHub Actions 워크플로우 설정

GitHub 리포지토리의 .github/workflows 디렉토리에 워크플로우 파일을 생성합니다. 예를 들어, ci.yml 파일을 다음과 같이 작성할 수 있습니다:

name: Python application

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.8
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Test with pytest
      run: |
        pytest

이 워크플로우는 메인(main) 브랜치에 푸시하거나 풀 리퀘스트를 생성할 때마다 다음 작업을 수행합니다:

  1. 가장 최신의 Ubuntu 환경에서 실행됩니다.
  2. GitHub 리포지토리를 체크아웃합니다.
  3. Python 3.8을 설정합니다.
  4. 필요한 의존성을 설치합니다 (requirements.txt 참조).
  5. pytest를 사용하여 테스트를 실행합니다.
profile
데이터를 주력으로 하는 잡부입니다!

0개의 댓글