복붙노트

[PYTHON] pytest에서 테스트 케이스 실행 순서

PYTHON

pytest에서 테스트 케이스 실행 순서

나는 pytest를 사용하고있다. 디렉토리에 두 개의 파일이 있습니다. 파일 중 하나에서 일부 출력을 생성하는 장기 실행 테스트 케이스가 있습니다. 다른 파일에는 그 출력을 읽는 테스트 케이스가 있습니다. 두 테스트 케이스의 적절한 실행 순서를 어떻게 보장 할 수 있습니까? 테스트 케이스를 동일한 파일에 적절한 순서로 넣는 것 외에 다른 대안이 있습니까?

해결법

  1. ==============================

    1.일반적으로 잘 정의 된 후크를 사용하여 기본적으로 pytest의 모든 부분의 동작을 구성 할 수 있습니다.

    일반적으로 잘 정의 된 후크를 사용하여 기본적으로 pytest의 모든 부분의 동작을 구성 할 수 있습니다.

    귀하의 경우, "pytest_collection_modifyitems"후크가 필요하므로 수집 된 테스트를 다시 주문할 수 있습니다.

    즉, 테스트가 더 쉬워 지도록 명령하는 것처럼 보입니다. 이것은 결국 Python입니다! 그래서 테스트 주문을위한 플러그인을 작성했습니다 : "pytest-ordering". 문서를 확인하거나 pypi에서 설치하십시오. 지금은 @ pytest.mark.first와 @ pytest.mark.second 또는 @ pytest.mark.order # 마커 중 하나를 사용하는 것이 좋습니다. 그러나 더 유용한 API에 대한 아이디어가 있습니다. 제안 환영 :)

  2. ==============================

    2.또한 요구 사항을 충족하는 것으로 보이는 pytest-ordering 플러그인이 있습니다.

    또한 요구 사항을 충족하는 것으로 보이는 pytest-ordering 플러그인이 있습니다.

  3. ==============================

    3.pytest가 알파벳 순으로 테스트를 실행하는 것처럼 보입니다. 이렇게하면 다음과 같은 방법으로 시도 할 수 있습니다.

    pytest가 알파벳 순으로 테스트를 실행하는 것처럼 보입니다. 이렇게하면 다음과 같은 방법으로 시도 할 수 있습니다.

    def test_a_first_test():
        pass
    
    def test_b_second_test():
        pass
    
    def test_o_middle_test():
        pass
    
  4. ==============================

    4.어쩌면 당신은 의존성 pytest 플러그인을 사용하는 것을 고려해 볼 수 있습니다. 테스트 종속성을 쉽게 설정할 수 있습니다 :

    어쩌면 당신은 의존성 pytest 플러그인을 사용하는 것을 고려해 볼 수 있습니다. 테스트 종속성을 쉽게 설정할 수 있습니다 :

    @pytest.mark.dependency()
    def test_long():
        pass
    
    @pytest.mark.dependency(depends=['test_long'])
    def test_short():
        pass
    

    이렇게하면 test_long이 성공한 경우에만 test_short가 실행되고 실행 순서도 강제 실행됩니다.

  5. ==============================

    5.이 시도:

    이 시도:

    @pytest.fixture(xxx)
    def test_A():
        pass
        yield
        pass
    
    @pytest.mark.usefixtures('test_A')
    def test_B():
        pass
    
  6. ==============================

    6.main.py:

    main.py:

    import functools
    import pytest
    from demo import test_foo,test_hi
    
    def check_depends(depends):
        try:
            for dep in depends:
                dep()
        except Exception as e:
            return dep
        else:
            return True
    
    def pytest_depend(depends):
        def pytest_depend_decorator(func):
            stat = check_depends(depends)
            if stat is True:
                return func
            else:
                return pytest.mark.skip(True, reason="%s[skip] --> %s[Failed]" % (func.__name__, stat.__name__))(func)
        return pytest_depend_decorator
    
    
    @pytest_depend([test_foo,test_hi])
    def test_bar():
        pass
    
    @pytest_depend([test_foo,test_hi])
    def test_bar2():
        pass
    

    demo.py:

    def test_hi():
        pass
    def test_foo():
        assert False
    

    플랫폼 linux - Python 3.5.2, pytest-3.8.2, py-1.6.0, pluggy-0.7.1 - / usr / bin / python3

  7. from https://stackoverflow.com/questions/17571438/test-case-execution-order-in-pytest by cc-by-sa and MIT license