개발/Python

[파이썬] py.test 내부 사용 중단 경고를 억제하는 방법

MinorMan 2022. 10. 12. 07:19
반응형

<질문>

pytest의 내부 사용 중단 경고를 억제하는 방법이 있습니까?

컨텍스트: 테스트 스위트를 이식하는 것의 어려움을 평가하려고 합니다.nose 에게pytest. 제품군은 상당히 크고 많이 사용합니다.nose-스타일yield 기반 테스트 생성기.

먼저 확인하고 싶습니다.기존 테스트는 pytest로 통과한 다음 테스트 생성기를 다음으로 변경할 수 있습니다.parameterized.

그냥 실행$ pytest path-to-test-folder pytest 3.0.4에서는 다음의 페이지와 페이지가 완전히 지배합니다.

WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0

이 경고를 끄는 방법이 있습니까?


<답변1>

에서pytest --help:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag

<답변2>

모든 경고를 숨기는 것이 아니라 관련이 없는 경고만 숨기고 싶다고 생각합니다. 그리고 이 경우 가져온 파이썬 모듈에서 폐기 경고가 표시됩니다.

에 대한 pytest 문서 읽기Warnings Capture:

-W 명령줄 옵션과 filterwarnings ini 옵션은 모두 Python 고유의 -W 옵션과 warnings.simplefilter를 기반으로 하므로 다른 예제 및 고급 사용법은 Python 설명서의 해당 섹션을 참조하십시오.

따라서 파이썬으로 경고를 필터링할 수 있습니다.-W 옵션!

그것은 것 같다pytest 모든 필터를 보여주기 때문에 필터를 완전히 제거합니다.DeprecationWarning 실행할 때 및 Python 문서에 대한Default Warning Filters 분명히 말한다 :

일반 릴리스 빌드에서 기본 경고 필터에는 다음 항목(우선순위에 따라): default::DeprecationWarning:__main__ 무시::DeprecationWarning 무시::PendingDeprecationWarning 무시::가져오기 경고 무시::ResourceWarning

따라서 귀하의 경우 다음과 같이 무시하고 싶은 경고 유형을 필터링하도록 하려면DeprecationWarning, pytest 명령을 다음과 같이 실행하십시오.-W 옵션 :

$ pytest path-to-test-folder -W ignore::DeprecationWarning

편집: 에서colini님의 댓글에 모듈별로 필터링이 가능합니다. 모든 sqlalchemy의 사용 중단 경고를 무시하는 예:

ignore::DeprecationWarning:sqlalchemy.*:

그런 다음 출력에 너무 많은 노이즈를 생성하는 설치된 모듈을 나열할 수 있습니다.pytest

명령줄이 아닌 파일과 함께 사용:

pytest.ini 파일에 해당 필터를 나열하는 것이 좋습니다.

[pytest]
filterwarnings =
    ignore::DeprecationWarning

<답변3>

pytest -p no:warnings, 또는 다음을 pytest.ini 또는 tox.ini에 추가하십시오.

[pytest]
addopts = -p no:warnings

결과는 경고 표시 없이 녹색이 됩니다. 문서 참조https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary.

이것은 깨끗한 출력을 원하는 테스트 스위트의 유효한 사용 사례가 될 수 있습니다.

항상 모든 경고를 숨기면 중요한 경고를 놓칠 수 있습니다.If you want to hide only specific warnings, look at Cloc's answer.


<답변4>

pytest.ini 파일에서 다음을 추가할 수 있습니다.

[pytest]
addopts = -p no:warnings

또는 명령줄에서 줄 아래로 전달합니다. 테스트 스위트가 외부 시스템을 사용하여 경고를 처리하는 경우 유용할 수 있습니다.

-p no:경고

또는 사용되지 않는 특정 경고만 숨기려면 pytest.ini 파일에 아래 명령문을 추가하십시오.

[pytest]
filterwarnings =
    ignore:.*U.*mode is deprecated:DeprecationWarning

이렇게 하면 메시지 시작이 ".*U.*mode is deprecated"라는 정규식과 일치하는 DeprecationWarning 유형의 모든 경고가 무시됩니다.

또는 권장되지는 않지만 다음을 사용할 수 있습니다.

--disable-경고

테스트 실행 출력에서 경고 요약을 완전히 표시하지 않는 명령줄 옵션입니다.


<답변5>

모든 경고를 숨기고 싶지 않으므로 이것을 넣습니다.pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning

<답변6>

여기link 사용하는 경우 경고를 표시하지 않는 방법pyproject.toml 파일을 구성으로.

[tool.pytest.ini_options]
testpaths = ["./tests/unit"]
filterwarnings = ["ignore:::.*third_party_package.module:123", "ignore:::.*another_module*"]

123 이 경우 억제할 줄 번호입니다.


<답변7>

사용하는 경우setup.cfg 파일에 다음을 입력합니다.

[tool:pytest]
addopts = -p no:warnings

당신은 필요tool:pytest 그냥 대신pytest하지만 다음과 같이 알려줍니다.

실패: setup.cfg 파일의 [pytest] 섹션이 더 이상 지원되지 않습니다. 대신 [tool:pytest]로 변경하십시오.

반응형