여러 테스트가 있다고 가정 해 보겠습니다.
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'
답변
에서 테스트 를 건너 뛰고 싶을 때 skip
및 skipif
데코레이터 로 테스트를 표시 할 수 있습니다 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
마커를 사용하여 테스트가 실패 할 것으로 예상한다는 것을 나타낼 수도 있습니다 .