반응형
이전 게시글에서 parametrize 데코레이터를 사용했었는데, 이번에는 conftest 라는 파일과 함꼐 사용해볼 예정이다.
2024.04.30 - [🎪 놀고있네/Python] - [Python] PyTest - parametrize 사용해보기
conftest 가 뭐냐??
- conftest.py 파일은 pytest에서 사용되는 특별한 파일
- 이 파일은 pytest가 테스트를 수행할 때 특정 디렉토리에 있는 테스트 모듈들에 대한 공통 설정 및 리소스를 제공하는 데 사용
- 일반적으로 conftest.py 파일에 fixtures 를 정의해서 테스트간 공통으로 리소스 공유
한번 사용해 보자!
아래와 같은 코드가 있다.
import pytest
# 테스트할 함수
def add(a, b):
return a + b
# Parameterizing을 사용하여 여러 입력 값에 대한 테스트 작성
@pytest.mark.parametrize("a, b, result", [
(3, 2, 3), # a=3, b=2일 때는 5이 나와야 함
(30, 5, 8), # a=30, b=5일 때는 35이 나와야 함
(-2, -83, -5), # a=-2, b=-83일 때는 -85가 나와야 함
(0, 0.1, 0), # a=0, b=0.1일 때는 0.1이 나와야 함
])
def test_add(a, b, result):
assert add(a, b) == result
여기서 공통으로 사용될 함수와 리소스를 conftest 로 넣고, test_example 파일에는 테스트 케이스만 넣는다
공통으로 사용되는 함수는 test_add 이고 request 객체를 사용해서 conftest 파일로 처리한다.
request 를 사용하는 이유는 파라미터화된 테스트에서 다양한 값을 처리할 수 있고, request.param 을 사용해서 동적으로 파라미터 값을 가져올 수 있기때문에 사용했다.
# conftest.py
import pytest
# 기존 parametrize 에서 사용했던 "a, b, result" 의 파라미터 값
@pytest.fixture(params=[
(3, 2, 3), # a=3, b=2일 때는 5이 나와야 함
(30, 5, 8), # a=30, b=5일 때는 35이 나와야 함
(-2, -83, -5), # a=-2, b=-83일 때는 -85가 나와야 함
(0, 0.1, 0), # a=0, b=0.1일 때는 0.1이 나와야 함
])
def test_add(request):
return request.param
이전에는 parametrize 를 사용했다면 이번에는 fixture(param) 을 사용했는데, 둘의 차이점은 아래와 같으니 참고
- @pytest.mark.parametrize:
- @pytest.mark.parametrize는 특정 테스트 함수에 대한 파라미터화된 값을 지정합니다.
- 해당 테스트 함수에 대해 다양한 입력 값들을 제공하여 여러 번 실행될 수 있도록 합니다.
- 파라미터화된 값은 테스트 함수의 매개변수로 전달됩니다.
- @pytest.fixture(params=...):
- @pytest.fixture(params=...)는 fixture를 파라미터화하여 여러 개의 테스트 케이스에 대해 동적으로 값을 생성하거나 조작할 수 있도록 합니다.
- 각 테스트 함수에서 해당 fixture를 사용할 때마다 파라미터화된 값 중 하나가 선택됩니다.
- 선택된 파라미터 값은 해당 fixture 함수 내에서 사용됩니다.
그럼 이를 테스트할 테스트 파일은 아래와 같고
conftest 에서 사용한 fixture 의 test_add를 직접 매개변수로 사용했다.
#test_example.py
import pytest
# 테스트할 함수
def add(a, b):
return a + b
def test_case(test_add): # test_add fixture를 직접 매개변수로 사용
a, b, expected = test_add
assert add(a, b) == expected
conftest.py 로 공통으로 사용할 메서드를 분리하면 편리하게 중복코드를 사용할 수 있다
반응형
'🎪 놀고있네 > Python' 카테고리의 다른 글
[Python] PyTest - API 에 header 넣기 (0) | 2024.05.08 |
---|---|
[Python] PyTest - API 테스트 해보기 (0) | 2024.05.08 |
[Python] PyTest - parametrize 사용해보기 (0) | 2024.05.04 |
[Python] Pytest 사용해보기(Conftest) (0) | 2024.05.03 |
[Python] pytest.raises 사용해보기 (0) | 2024.05.02 |
댓글