[TDD] pytest - command line에서 option을 사용해 test 진행하기

강버섯·2022년 4월 12일
0

👉 pytest option

pytest에서는 command line에서 option을 줌에 따라서 실행할 테스트 함수를 결정해 테스트를 진행할 수 있는 기능을 제공한다.
command line option은 원하는 값으로 커스텀이 가능하며, decoration을 이용해서 특정 함수에만 적용하거나 전체 test 파일에 적용할 수도 있다.

👉 option custom

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에 추가된 것을 확인할 수 있다.

👉 option 적용하기

✏️ 특정 함수에만 적용하기

특정 함수에만 적용을 하고 싶다면 해당 옵션을 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
]
profile
무럭무럭 버섯농장

0개의 댓글