pytest는 Python 테스트를 간단한 함수와 assert 문으로 작성할 수 있게 해 주는 테스트 프레임워크다. unittest처럼 특정 클래스를 반드시 상속하지 않아도 되어 작은 테스트를 빠르게 만들기 좋다.
이 글은 pytest 실행, setup과 teardown 함수, assert 실패 시 디버깅, 출력 캡처 해제, verbose 실행 옵션을 메모한 오래된 py.test 사용 기록이다.
핵심 정리
pytest의 장점은 테스트 함수만 작성해도 바로 실행할 수 있다는 점이다. 원문 예시처럼 test로 시작하는 함수에서 assert를 사용하면 간단한 검증을 만들 수 있고, setup_function과 teardown_function을 두면 각 테스트 전후에 준비와 정리 작업을 넣을 수 있다. 실패한 지점에서 디버깅하고 싶을 때는 pdb 옵션을 사용할 수 있고, 출력이 캡처되어 보이지 않는 것이 불편하면 -s 옵션으로 출력 캡처를 끌 수 있다. -v 옵션은 어떤 테스트가 실행되는지 더 자세히 보고 싶을 때 도움이 된다. 원문은 py.test 표기를 쓰지만, 현재 문서에서는 pytest 명령 형태를 기준으로 보는 것이 자연스럽다.
- pytest는 테스트 함수를 만들고 assert로 조건을 확인하는 방식이 간단하다.
- unittest처럼 테스트 클래스 상속을 꼭 요구하지 않는다.
- setup_function은 각 테스트 함수 실행 전 준비 작업에 사용할 수 있다.
- teardown_function은 테스트 실행 후 정리 작업에 사용할 수 있다.
- 실패한 assert 지점에서 디버깅하려면 pdb 옵션을 활용할 수 있다.
- -s 옵션은 테스트 중 print 출력 캡처를 끌 때 사용한다.
- -v 옵션은 테스트 실행 정보를 더 자세히 보고 싶을 때 사용한다.
- 오래된 예제의 py.test 표기는 pytest 명령 기준으로 읽으면 된다.
원문은 pytest를 처음 써 보며 unittest보다 간결하다고 느낀 부분과 디버깅 옵션을 남긴 메모입니다. 보강문에서는 실행, 준비와 정리, assert, 디버깅, 출력 옵션을 분리했습니다. 예제 코드가 오래된 Python 문법을 포함하므로 현재 코드에 적용할 때는 사용하는 Python 버전에 맞춰 print 문법 등을 조정해야 합니다.
이어서 볼 글
- Python unittest 사용법: TestCase와 test_ 메서드 - pytest와 비교할 Python 표준 테스트 프레임워크 글이다.
- Python unittest setUp, tearDown 사용법과 assertion - pytest fixture와 unittest 준비/정리 흐름을 비교할 수 있다.
py.test
• https://pytest.org/latest/getting-started.html
• 음 unittest 쓰려고 했는데.. 이것도 참 괜찮아 보인다..
• 일단 특정한 클래스를 상속 받지 않아도 되고 assert 도 그대로 쓸 수 있어서 심플하다
• 기존 unittest 용으로 작성한 파일들도 막돌려주네.. 좋구마이~
• 아래는 샘플.. 아래처럼만 하면 잘~ 돌아간다.. py.test 파일명 으로 돌리면 된다.
def setup_function(function):
print 'setUp is called!!!', function
def teardown_function(function):
print 'tearDown is called!!!', function
def test_upper():
assert 'foo'.upper() == 'FOo'
def test_isupper():
assert 'FOo'.isupper()
def test_split():
s = 'hello world'
assert s.split() == ['hello', 'world']
• 아래 unittest 버전과 비교하면 완전 간결해서 맘에 든다 ㅎㅎ
• py.test --pdb 이렇게 하면 assert 걸렸을때 pdb 띄워준다. 좋네~ 단 pudb로 고쳐서 해봤는데 안되더라
• 근데 기존처럼 pudb 한줄 삽입해서 pudb로 들어가는 방법은 여전히 유효하다
• 오 아래처럼해서 디버깅정보를 들여다 볼수도 있구나..
>>> import sys
>>> sys.last_traceback.tb_lineno
42
>>> sys.last_value
AssertionError('assert result == "ok"',)
• 그냥하면은 print가 숨겨졌다가 에러날때 공개되는 기능이 있는데 -s 옵션을 주면 해당 기능을 끌 수 있다.
• 보통 -v -s는 주는게 좋은것 같다. -vs로 줘도 된다.
'Programming' 카테고리의 다른 글
| Python 터미널 컬러링: ANSI escape sequence와 decorator 패턴 (0) | 2026.05.18 |
|---|---|
| Python unittest setUp, tearDown 사용법과 assertion (0) | 2026.05.17 |
| Python mixin 패턴 정리 (0) | 2026.05.17 |
| Matrix Completion과 추천 시스템 정리 (0) | 2026.05.17 |
| Pandas tutorial: DataFrame 기본 사용법 정리 (0) | 2026.05.17 |
