(1) 문제 상황
코드를 짜다 보면 "이 함수 잘 작동하나?" 를 확인하기 위해 직접 print()를 찍어보거나 손으로 실행해보는 일이 반복됩니다.
이를 해결하고자 함수가 잘 동작하는지 확인 하기 위해 테스트 코드를 작성하는 방법을 알아보겠습니다.
(2) 파일 구조 규칙
pytest는 파일을 자동으로 탐색할 때 두 가지 규칙을 따릅니다.
- 테스트 파일명은 반드시 test_로 시작해야 합니다. pytest가 이 패턴으로 테스트 파일을 자동 인식합니다.
- 테스트 함수명도 마찬가지로 test_로 시작해야 pytest가 실행 대상으로 인식합니다.
- 테스트 파일은 별도의 tests/ 폴더에 모아두는 게 일반적인 관례입니다.
my_project/
├── src/
│ └── parser.py # 실제 기능 코드
└── tests/
└── test_parser.py # 테스트 코드 (test_ 필수!)
parser_test.py 처럼 뒤에 붙이면 pytest가 인식하지 못합니다. 반드시 앞에 test_를 붙여야 합니다.
기능 코드 불러오기
테스트 파일에서 실제 기능 코드를 import해서 사용합니다.
# 기능 불러오기
from src.parser import parse_weather
테스트 코드 작성 패턴
테스트 코드는 보통 세 단계로 구성됩니다. 준비 → 실행 → 검증, 이 흐름을 기억해두면 어떤 함수든 테스트할 수 있습니다.
① 샘플 데이터 준비 (Arrange)
함수에 넘길 입력값을 직접 만듭니다. 실제 API를 호출하지 않고 가짜 데이터로 테스트하는 게 핵심입니다.
② 함수 실행 (Act)
테스트할 함수를 호출하고 결과를 변수에 저장합니다.
③ 결과 검증 (Assert)
assert 키워드로 결과가 기대한 값과 일치하는지 확인합니다. 조건이 False이면 테스트가 실패합니다.
def test_parse_weather():
# ① 샘플 데이터 준비
sample_data = {
"response": {
"body": {
"items": {
"item": [
{
"wf": "맑음",
"ta": "11",
"rnSt": 10
}
]
}
}
}
}
# ② 함수 실행
result = parse_weather(sample_data)
# ③ 결과 검증
assert isinstance(result, list)
assert result[0]["wf"] == "맑음"
assert result[0]["ta"] == "11"
실제 API 응답 구조를 그대로 샘플 데이터로 복사해서 쓰면 됩니다. 테스트는 외부 환경에 의존하지 않아야 빠르고 안정적으로 실행됩니다.
(2) 테스트 실행하기
터미널에서 아래 명령어로 테스트를 실행합니다. -v 플래그는 verbose의 약자로, 각 테스트 항목의 결과를 자세하게 출력합니다.
# 특정 파일만 테스트
pytest tests/test_parser.py -v
# tests 폴더 전체 테스트
pytest tests/ -v
성공 출력 예시
collected 1 item
tests/test_parser.py::test_parse_weather PASSED [ 100%]
====== 1 passed in 0.12s ======

실패 출력 예시
tests/test_parser.py::test_parse_weather FAILED
AssertionError: assert result[0]["wf"] == "맑음"
Left: "흐림"
Right: "맑음"

실패 시 pytest는 어떤 값이 기대와 달랐는지 정확히 알려줍니다. 이 출력만 봐도 어디를 고쳐야 할지 바로 알 수 있습니다.
(3) 마치며
pytest의 규칙은 단순합니다. test_로 시작하는 파일, test_로 시작하는 함수, 그리고 assert로 검증. 이 세 가지만 기억하면 됩니다.
처음에는 테스트 코드를 별도로 작성하는 게 번거롭게 느껴질 수 있습니다. 하지만 기능이 늘어날수록, 테스트가 있다는 사실 하나만으로 코드를 수정할 때의 불안감이 크게 줄어듭니다. 테스트는 결국 미래의 내가 과거의 나를 믿을 수 있게 해주는 장치입니다.
핵심 요약
항목 규칙
| 파일명 | test_기능.py |
| 함수명 | test_함수명() |
| 검증 | assert 조건 |
| 실행 | pytest tests/ -v |
'Python' 카테고리의 다른 글
| [Python] Selenium에서의 innerHTML, innerText, textContent 차이점 (0) | 2026.03.18 |
|---|---|
| [Python] 정규표현식 (0) | 2026.03.13 |
| [Python] json.dumps() 사용법, 사용이유 (1) | 2026.03.10 |
| [Python] API 요청 방법 (0) | 2026.03.09 |
| [Python] 라이브러리 관리하기 (0) | 2026.03.07 |