테스트 코드 작성을 위한 Python 라이브러리
vs. Unittest
- 간결한 문법
- assert 문
- 함수 단위 테스트 지원
- fixture 지원
- 테스트 데이터 관리
라이브러리 설치
pip install pytest
테스트를 하는 라이브러리
pip install httpx
FastAPI에서 테스트 client라는 기능을 사용하기 위해 내부적으로 사용하는 라이브러리
Python Package 만들기

- 이전까지는 기존 directory를 추가했었는데 지금은 반드시 python package를 추가를 해야된다.
- 둘의 차이로는 python package는 기본적으로 __init__.py가 생성된다.
- 새로운 python package 폴더 아래에 반드시 있어야 정상적으로 탐색할 수 있게 된다.
- 이 python package는 python이 경로를 찾을 때 반드시 이 python 모듈인 경우에만 경로를 찾을 수 있어서 새로 생성하는 tests 패키지 아래에 테스트 파일들을 테스트로 인지하고 테스트 코드를 실행하게 된다.
- 둘의 차이로는 python package는 기본적으로 __init__.py가 생성된다.

- 사진과 같이 test_main.py로 짓는다.
- 테스트하는 파일들의 이름도 test_ 이렇게 네이밍 컨벤션을 맞춰줘야 pytest가 이 파일을 찾아서 정상적으로 테스트를 동작시킬 수 있다.
test_main.py
# main.py
...
app = FastAPI()
...
# test_main.py
# testclient import
from fastapi.testclient import TestClient
# main.py에서 app import
from main import app
# 이 client 객체를 이용해서 여기에 어떤 API 요청을 보내보는 형태
client = TestClient(app=app)
def test_health_check():
# get 요청의 응답을 response라는 변수로 할당
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"ping" : "pong"}
assert란?
한 문장으로 표현하면:
"이 조건이 True가 아니면 테스트 실패로 처리해줘" 라고 pytest한테 말하는 것
assert가 뭔지
assert 기본 문법
assert 조건식
# 조건식이 True → 통과, 아무 일도 안 일어남
# 조건식이 False → AssertionError 발생, 테스트 실패
지금 코드 분해하기
assert 코드 완전 분해
response = client.get("/")
# "/" 엔드포인트에 GET 요청을 보내고 응답을 받음
assert response.status_code == 200
# ↑ ↑
# 응답의 상태코드가 200이어야 한다
# (HTTP 상태코드) (성공 코드)
assert response.json() == {"ping": "pong"}
# ↑ ↑
# 응답의 JSON 바디가 이 값이어야 한다
어떻게 동작하는지
assert 동작 흐름
client.get("/") 요청
↓
응답 받음
↓
assert response.status_code == 200
↓
200 맞음?
↙ ↘
True False
↓ ↓
통과 테스트 실패
AssertionError
성공 vs 실패 예시
assert 성공 vs 실패 케이스
# 성공 케이스
# 실제 응답: status_code=200, json={"ping": "pong"}
assert response.status_code == 200 # True → 통과
assert response.json() == {"ping": "pong"} # True → 통과
# 실패 케이스
# 실제 응답: status_code=404
assert response.status_code == 200
# False → AssertionError!
# FAILED tests/test_main.py::test_health_check
assert를 왜 2번 쓰냐면
각 assert가 검증하는 것
| assert | 검증 내용 | 의미 |
| assert response.status_code == 200 | HTTP 상태코드 | 요청이 성공했는지 |
| assert response.json() == {"ping": "pong"} | 응답 바디 | 올바른 데이터가 왔는지 |
둘 다 통과해야 테스트가 성공. 하나라도 실패하면 테스트 전체가 실패
💡 핵심 요약:
assert 조건 = "이 조건이 True가 아니면 테스트 실패"
테스트 코드에서 "내가 기대하는 값" 과 "실제 응답값" 을 비교하는 용도
pytest 실행
pytest
- 터미널에 pytest라고 입력 후 실행
- pytest가 src 안에서 테스트 코드를 쭉 검색을 하게 된다.
- 여기서 test_main.py가 테스트 코드라는 걸 알게 되고 그 안에서 테스트로 시작한 함수를 테스트 코드로 해서 동작을 시키게 된다.

- 그럼 위의 사진과 같이 test_main.py가 실행됐다는 걸 알 수 있다.
- 하나의 테스트 코드가 정상적으로 통과했다는 것을 알 수 있게 된다.

굳이 터미널에 입력하지 않고 왼쪽의 화살표를 눌러 Run 버튼을 눌러도 된다.
'FastAPI > 테스트 코드' 카테고리의 다른 글
| GET 단일 조회 API (0) | 2026.07.07 |
|---|---|
| PyTest Fixture (0) | 2026.07.07 |
| PyTest Mocking (0) | 2026.07.07 |
| GET 전체 조회 API (0) | 2026.07.06 |
| 테스트 코드란? (0) | 2026.07.01 |