본문 바로가기
Web 개발/FAST API (인프런 강의 내용)

3 테스트 코드 PyTest

by yororing 2024. 6. 1.

00 개요

  • 앞서 <섹션 1: REST API 실습><섹션 2: ORM을 사용하여 데이터베이스에 연결>에서 우리는 API를 개발한 후 Swagger UI를 통해 실제 API를 호출해봄
  • 현재 검증해야 하는 API는 소량 (5개)이지만, API 수가 많아지면 일일이 Swagger UI를 통해 잘 작동하는지 검증하는 것은 시간 비효율적
  • API 수정 시 테스트 코드를 이용하면 시간 줄일 수 있음 → 테스트 코드에 의해 API를 대신 동작시키고 과정 및 결과 검증 가능
  • 섹션 3: 테스트 코드 학습ToDo 프로젝트에 테스트 코드 적용 실습

01 테스트 코드란

1. 정의

  • 시스템의 품질과 신뢰성을 검증하기 위한 코드
  • 안정적인 프로젝트를 운영하기 위해 반드시 필요한 기술

2. 장점

  • '코드 변경 -> 기능 점검' 과정을 자동화 → 반복적인 과정을 줄여주어 생산성 향상
  • 개발자가 시스템에 대한 안정성 확신 유연한 코드 변경 및 자유로운 refactoring 가능
    • 반대로, 테스트 코드가 없는 프로젝트는 개발자가 어떤 기능을 수정할 때마다 직접 API를 호출 및 데이터 검증해야 하며 최악의 경우에는 이런 검증 과정 없이 코드를 배포하게 됨
    • 그럴 경우 개발자는 본인이 만든 시스템을 신뢰할 수 없어 side effect가 두려워 코드 변경을 점점 망설이게 될 수 있음
    • 그러므로 테스트 코드는 안정적인 프로젝트를 운영하기 위해 반드시 필요한 기술로서 웹 개발자가 되기 위해 반드시 알아야 

3. 심화

  • 다양한 테스트 종류와 방법론 존재 - 검증하는 목적에 따라 분류됨
  • 테스트 종류: Unit Test, Integration Test, Regression Test 등 
  • 방법론 종류: TDD, BDD 등과 같은 구체적인 테스트 방법론도 존재

02 PyTest란

1. 정의

  • 테스트 코드 작성을 위한 Python 라이브러리
  • Python에서 웹 프로젝트의 테스트 코드를 작성할 때 주로 PyTest 이용

2. Unit Test와 비교

  • Unit Test = Python 표준 테스트 프레임워크
  • PyTest는 Unit Test에 비해 간결한 문법 지원
    • Unit Test에는 다양한 assert 문이 존재해 상황에 맞는 적절한 assert문을 이용해야 하나 PyTest는 하나의 assert문을 통해 모든 것 표현 가능
    • Unit Test는 class 형태의 테스트만 지원하나 PyTest는 함수 단위 테스트 지원하여 훨씬 가볍게 사용 가능
  • PyTest는 fixture 기능 지원
    • 테스트 데이터 관리 쉽게 가능
    • fixture 활용하여 테스트를 위해 반복적으로 데이터를 세팅하는 부분을 재사용 가능 테스트 코드의 양 감소

03 결론

  • 앞으로 섹션 3에서는 PyTest를 이용하여 프로젝트에 테스트 코드를 적용하는 실습 진행할 것