pytest에서는 command line에서 option을 줌에 따라서 실행할 테스트 함수를 결정해 테스트를 진행할 수 있는 기능을 제공한다.
command line option은 원하는 값으로 커스텀이 가능하며, decoration을 이용해서 특정 함수에만 적용하거나 전체 test 파일에 적용할 수도 있다.
custom option을 사용하기 위해서는 설치 파일에 custion option을 사용할 것을 명시해주어야 한다.
pytest.ini에 작성해주어도 되고, setup.cfg에 적어주거나 poetry를 사용한다면 poetry.toml에 작성해주면 된다.
pytest.ini 👇
[pytest]
# single usage
markers =
integration: mark a test as a integration test
# multiple usage
markers =
integration: mark a test as a integration test
dbconnect: mark a test as a db connection test
poetry.toml 👇
[tool.pytest.ini_options]
# single usage
markers = [
"integration: mark a test as a integration test"
]
# multiple usage
markers = [
"integration: mark a test as a integration test"
"dbconnect: mark a test as a db connection test"
]
설치 파일의 custom option 사용 여부를 알렸다면 이제 pytest의 최상단 conftest.py에 option의 추가와 option 여부에 따른 동작을 작성해준다.
conftest.py 👇
# option 사용을 위한 설정
def pytest_addoption(parser):
parser.addoption(
"--dbconnect", action="store_true", help="run test connected with db"
)
# test 수행될 때의 동작 설정
def pytest_runtest_setup(item):
# dbconnect option을 받지 않은 경우 test skip 설정
if "dbconnect" in item.keywords and not item.config.getvalue("dbconnect"):
pytest.skip("need --dbconnect option to run the test")
사용할 option을 지정해주면 pytest --help
를 실행시켰을 때, 설정한 옵션이 help에 추가된 것을 확인할 수 있다.
특정 함수에만 적용을 하고 싶다면 해당 옵션을 decorator로 사용해주면 된다.
import pytest
@pytest.mark.dbconnect
def test_create():
print("create test")
전체 파일에 적용하고 싶다면 pytestmark라는 이름의 변수에 사용할 option을 지정해준다.
import pytest
pytestmark = pytest.mark.dbconnect
# use multiple
pytestmark = [
pytest.mark.dbconntest,
pytest.mark.integration
]