[파이썬] pytest 조건부 테스트 실행하기

테스트는 소프트웨어 개발 과정에서 필수적인 요소입니다. 하지만 특정 조건에 따라 테스트를 실행하거나 제외하는 상황이 발생할 수 있습니다. 이러한 상황을 처리하기 위해 pytest는 다양한 조건부 테스트 실행 기능을 제공합니다. 이 블로그 포스트에서는 pytest를 사용하여 조건부 테스트를 실행하는 방법에 대해 알아보겠습니다.

@pytest.mark 조건부 테스트

pytest에서는 특정 테스트를 실행 또는 제외하기 위해 @pytest.mark 어노테이션을 사용할 수 있습니다. 이 어노테이션을 사용하여 테스트에 태그를 지정하고, 테스트를 실행할 때 해당 태그를 기준으로 테스트를 선택하는 것이 가능합니다.

import pytest

@pytest.mark.slow
def test_function1():
    # Slow test case code

@pytest.mark.fast
def test_function2():
    # Fast test case code

@pytest.mark.slow
def test_function3():
    # Another slow test case code

위의 예제 코드에서는 @pytest.mark.slow@pytest.mark.fast 어노테이션을 사용하여 각각 test_function1, test_function2, test_function3 함수에 태그를 지정했습니다.

특정 태그를 가진 테스트 실행하기

pytest에서는 -m 옵션을 사용하여 특정 태그를 가진 테스트만 실행할 수 있습니다. 예를 들어, @pytest.mark.slow 태그를 가진 테스트만 실행하고 싶다면 아래와 같이 명령어를 실행합니다.

pytest -m slow

이 명령어를 실행하면 @pytest.mark.slow 어노테이션이 부여된 test_function1test_function3이 실행됩니다. @pytest.mark.slow 어노테이션이 부여된 테스트만 실행되고, 나머지 테스트는 실행되지 않습니다.

특정 태그를 가진 테스트 제외하기

pytest에서는 -m 옵션에 not 키워드를 사용하여 특정 태그를 가진 테스트를 제외할 수도 있습니다. 예를 들어, @pytest.mark.slow 태그를 가진 테스트를 제외하고 싶다면 아래와 같이 명령어를 실행합니다.

pytest -m "not slow"

이 명령어를 실행하면 @pytest.mark.slow 어노테이션이 부여된 test_function1test_function3이 실행되지 않습니다. @pytest.mark.slow 어노테이션이 부여되지 않은 테스트만 실행됩니다.

조건부 테스트 실행하기

pytest에서는 추가적으로 --runxfail 옵션을 사용하여 실패한 테스트를 실행하게 할 수 있습니다. 실패한 테스트에 @pytest.mark.xfail 어노테이션이 부여되어 있다면, 해당 테스트는 실패한 상태로 실행되고, 나머지 테스트는 정상적으로 실행됩니다.

pytest --runxfail

위의 명령어는 @pytest.mark.xfail 어노테이션이 부여된 실패한 테스트만 실행합니다. 실패한 테스트는 프로그램에 영향을 끼치지 않고 실행되므로, 다른 테스트를 진행하는 동안 실패한 테스트를 분석하고 수정하는 데 유용합니다.

이렇게 pytest에서는 @pytest.mark 어노테이션을 사용하여 조건부 테스트를 실행하거나 제외하는 다양한 방법을 제공합니다. 이를 통해 프로젝트에서 특정 조건에 따라 테스트를 유연하게 관리할 수 있습니다.