매번 터미널에서 -v, -s 같은 명령줄 옵션을 입력하는 것은 번거롭습니다. Pytest의 설정 파일인 pytest.ini를 사용하면 이러한 번거로움을 해결하고 테스트 실행 방식을 효율적으로 제어할 수 있습니다.
pytest.ini 기본 개념
pytest.ini는 Pytest의 메인 설정 파일로, 테스트 실행 방식을 변경하는 데 사용됩니다. 파일명은 반드시 pytest.ini여야 하며, 일반적으로 프로젝트 루트 디렉토리에 위치합니다. 터미널에서 pytest -h 명령어를 입력하면 pytest.ini에서 사용 가능한 다양한 설정 옵션을 확인할 수 있습니다. 설정 옵션의 수가 많아 처음에는 부담스러울 수 있지만, 실제 자주 사용하는 옵션은 몇 가지로 한정됩니다.
핵심 설정 옵션
addopts: 기본 명령줄 옵션 설정
addopts는 Pytest가 실행될 때 자동으로 포함시킬 명령줄 옵션을 지정합니다.
[pytest]
addopts = -v -s
위와 같이 설정하면 터미널에서 pytest만 입력해도 -v와 -s 옵션이 자동으로 적용됩니다. -v는 상세 출력, -s는 print 문 출력을 허용합니다.
testpaths: 테스트 디렉토리 지정
testpaths는 Pytest가 테스트를 탐색할 디렉토리를 지정합니다.
[pytest]
addopts = -v -s
testpaths = tests
예를 들어, 프로젝트 루트에 tests와 integration 디렉토리가 모두 있고, testpaths = tests로 설정하면 tests 디렉토리 내의 테스트만 실행됩니다.
python_files: 실행할 파일 이름 패턴
python_files는 실행할 테스트 파일의 이름 패턴을 지정합니다.
[pytest]
addopts = -v -s
testpaths = tests
python_files = test_*.py
이 설정은 tests 디렉토리에서 test_로 시작하는 .py 파일만 찾아서 실행합니다. test_login.py, test_api.py 등이 해당되며, helper.py 같은 파일은 무시됩니다.
python_classes: 실행할 클래스 이름 패턴
python_classes는 실행할 테스트 클래스의 이름 패턴을 지정합니다.
[pytest]
addopts = -v -s
testpaths = tests
python_files = test_*.py
python_classes = Test*
예를 들어, test_sample.py 파일에 TestUser 클래스와 ProfileTest 클래스가 있다면, 위 설정에서는 Test로 시작하는 TestUser 클래스만 실행되고 ProfileTest는 무시됩니다.
python_functions: 실행할 함수 이름 패턴
python_functions는 실행할 테스트 함수나 메소드의 이름 패턴을 지정합니다.
[pytest]
addopts = -v -s
testpaths = tests
python_files = test_*.py
python_classes = Test*
python_functions = test_*
이 설정은 test_로 시작하는 함수나 메소드만 실행합니다. 예를 들어, TestUser 클래스에 test_login과 check_profile 메소드가 있다면 test_login만 실행됩니다.
실제 적용 예시
# test_sample.py
import pytest
class TestUser:
def test_login_valid(self):
print("로그인 테스트 실행")
assert True
def test_login_invalid(self):
print("로그인 실패 테스트 실행")
assert True
def check_password(self):
print("비밀번호 확인")
assert True
class ProfileTest:
def test_profile_view(self):
print("프로필 보기 테스트")
assert True
위 설정을 적용하면 test_sample.py 파일의 TestUser 클래스 내 test_login_valid와 test_login_invalid 메소드만 실행되며, check_password 메소드와 ProfileTest 클래스의 test_profile_view는 실행되지 않습니다.