[python] pytest를 사용하여 테스트를 비활성화하려면 어떻게합니까?

여러 테스트가 있다고 가정 해 보겠습니다.

def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...

pytest해당 테스트 만 실행 하는 것을 방지하기 위해 함수에 추가 할 수있는 데코레이터 또는 이와 유사한 것이 있습니까? 결과는 다음과 같을 수 있습니다.

@pytest.disable()
def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...



답변

Pytest에는 여기 문서 에서 찾을 수있는 Python unittest 모듈 ( skip및 사용) 과 유사한 skip 및 skipif 데코레이터가 있습니다 .skipIf

링크의 예는 여기에서 찾을 수 있습니다.

@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
    ...

import sys
@pytest.mark.skipif(sys.version_info < (3,3),
                    reason="requires python3.3")
def test_function():
    ...

첫 번째 예는 항상 테스트를 건너 뛰고 두 번째 예에서는 조건부로 테스트를 건너 뛸 수 있습니다 (테스트가 플랫폼, 실행 가능 버전 또는 선택적 라이브러리에 따라 달라지는 경우 유용합니다.

예를 들어, 누군가가 테스트를 위해 pandas 라이브러리를 설치했는지 확인하고 싶다면.

import sys
try:
    import pandas as pd
except ImportError:
    pass

@pytest.mark.skipif('pandas' not in sys.modules,
                    reason="requires the Pandas library")
def test_pandas_function():
    ...


답변

skip장식은 일을 할 것입니다 :

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    # ...

( reason인수는 선택 사항이지만 항상 테스트를 건너 뛰는 이유를 지정하는 것이 좋습니다).

skipif()특정 조건이 충족되면 테스트를 비활성화 할 수도 있습니다.


이러한 데코레이터는 메서드, 함수 또는 클래스에 적용 할 수 있습니다.

모듈의 모든 테스트건너 뛰 려면 전역 pytestmark변수를 정의 하십시오.

# test_module.py
pytestmark = pytest.mark.skipif(...)


답변

더 이상 사용되지 않는지 확실하지 않지만 pytest.skip테스트 내 에서 함수 를 사용할 수도 있습니다 .

def test_valid_counting_number():
     number = random.randint(1,5)
     if number == 5:
         pytest.skip('Five is right out')
     assert number <= 3


답변

테스트가 실패 할 것으로 의심되는 경우에도 테스트를 실행할 수 있습니다. 이러한 시나리오의 경우 https://docs.pytest.org/en/latest/skipping.html@ pytest.mark.xfail 데코레이터를 사용하도록 제안합니다.

@pytest.mark.xfail
def test_function():
    ...

이 경우 Pytest는 여전히 테스트를 실행하고 통과 여부를 알려 주지만 불평하지 않고 빌드를 중단하지 않습니다.


답변

테스트를 건너 뛰고 마커를 하드 코딩하지 않으려면 키워드 표현식을 사용하여 이스케이프하는 것이 좋습니다.

pytest test/test_script.py -k 'not test_func_one'


답변

에서 테스트 를 건너 뛰고 싶을 때 skipskipif데코레이터 로 테스트를 표시 할 수 있습니다 pytest.

테스트 건너 뛰기

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    ...

테스트를 건너 뛰는 가장 간단한 방법 skip은 선택 사항을 전달할 수있는 데코레이터 로 표시하는 것입니다 reason.

pytest.skip(reason)함수 를 호출하여 테스트 실행 또는 설정 중에 명령 적으로 건너 뛸 수도 있습니다 . 가져 오는 동안 건너 뛰기 조건을 평가할 수없는 경우 유용합니다.

def test_func_one():
    if not valid_config():
        pytest.skip("unsupported configuration")

조건에 따라 테스트 건너 뛰기

@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher")
def test_func_one():
    ...

조건에 따라 건너 뛰려면 skipif대신 사용할 수 있습니다 . 이전 예제에서 Python3.6 이전의 인터프리터에서 실행할 때 테스트 함수를 건너 뜁니다.

마지막으로 테스트가 실패했다고 확신하여 건너 뛰려는 경우 xfail마커를 사용하여 테스트가 실패 할 것으로 예상한다는 것을 나타낼 수도 있습니다 .


답변