it-source

py.test 내부 사용 중지 경고를 억제하는 방법

criticalcode 2023. 6. 6. 00:01
반응형

py.test 내부 사용 중지 경고를 억제하는 방법

파이 테스트의 내부 권장 사항을 억제할 수 있는 방법이 있습니까?

: 하는 것의 어려움하려고 합니다.nosepytest스위트룸은 상당히 크고 사용 빈도가 높습니다.nose-스타일의yield기반 테스트 생성기.

먼저 기존 테스트를 파이테스트로 통과했는지 확인한 다음 테스트 생성기를 다음으로 변경하고 싶습니다.parameterized.

막달는중리를 실행하는 입니다.$ pytest path-to-test-folder 3 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

이러한 경고를 해제할 수 있는 방법이 있습니까?

모든 경고를 숨기는 것이 아니라 관련이 없는 경고만 숨기는 것이 좋다고 생각합니다.이 경우 가져온 파이썬 모듈에서 제거 경고가 발생합니다.

Warnings Capture에 대한 pytest 문서 읽기:

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

그래서 당신은 파이썬으로 경고를 필터링할 수 있습니다.-W옵션!

는 것 같습니다.pytest에서는 이러한 필터가 필터를 합니다. 모든 필터를 표시하기 때문입니다.DeprecationWarning를 실행할 때, 그리고 기본 경고 필터에 대한 Python의 문서는 다음과 같이 분명히 말합니다.

일반 릴리스 빌드에서 기본 경고 필터에는 다음 항목(우선 순위 순)이 있습니다.

default::DeprecationWarning:__main__
ignore::DeprecationWarning
ignore::PendingDeprecationWarning
ignore::ImportWarning
ignore::ResourceWarning

그래서 당신의 경우, 무시하고 싶은 경고 유형을 필터링하려면 다음과 같이 하십시오.DeprecationWarning를 "pytest"와 함께 실행하면 됩니다.-W 예를 들어 다음을 수행합니다.

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

EDIT: colini의 코멘트에서 모듈별 필터링이 가능합니다.모든 sqlalchemy에서 사용되지 않는 경고를 무시하는 예:

ignore::DeprecationWarning:sqlalchemy.*:

많은 시킬 수 .pytest

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

다음과 같은 필터를 pytest.ini 파일에 나열하는 것이 좋습니다.

[pytest]
filterwarnings =
    ignore::DeprecationWarning

pytest --help:

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

pytest -p no:warnings또는 다음을 파이테스트에 추가합니다.ini 또는 tox.ini:

[pytest]
addopts = -p no:warnings

결과는 경고 표시 없이 녹색으로 표시됩니다.https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary 의 설명서를 참조하십시오.

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

항상 모든 경고를 숨길 경우 중요한 경고를 놓칠 수 있습니다.특정 경고만 숨기려면 Cloc의 답변을 확인합니다.

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

[pytest]
addopts = -p no:warnings

또는 명령줄에서 줄 아래를 통과합니다.이 기능은 테스트 제품군이 외부 시스템을 사용하여 경고를 처리하는 경우 유용할 수 있습니다.

-p no:flash

또는 일부 사용되지 않는 특정 경고만 숨기려는 경우 아래 문장을 yypytest.ini 파일에 추가합니다.

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

이렇게 하면 메시지의 시작 부분이 정규식 " "과(와) 일치하는 DeprecationWarning 유형의 모든 경고가 무시됩니다.*U.*모드는 더 이상 사용되지 않습니다."

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

--disable-disable-discovery

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

는 모든 경고를 을 모든경고숨싶않지이넣다니었습걸아서기에 .pytest.ini

[pytest]
filterwarnings =
    ignore::DeprecationWarning

다음은 사용 중인 경우 경고를 억제하는 방법에 대한 링크입니다.pyproject.toml구성으로 파일을 작성합니다.

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

123해야 할 줄 입니다.

를 사용하는 경우setup.cfg 위치에 : " 일저위, 치장파:

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

필요합니다tool:pytest단순한 의대에 pytest하지만 그것은 당신에게 다음과 같이 말할 것입니다.

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

파이테스트 파일 자체의 모든 경고를 무시하려면 다음과 같이 하십시오.다음을 파이테스트 파일에 추가하기만 하면 됩니다.

import warnings; warnings.filterwarnings("ignore")

python 문서의 경고 섹션에 잘 설명된 구문 분석 메커니즘을 이해하여 경고를 세부적으로 필터링하는 것도 가능하다는 것을 추가하고 싶습니다.

됩니다.action:message:category:module:line

이를 통해 특정 모듈에 대해서만 특정 메시지와 함께 특정 경고를 비활성화할 수 있습니다.저에게, 그것은 피테스트 프리즈건을 사용했지만, 짜증나는 것을 보여주지 않았습니다.DeprecationWarningdistutils Version 클래스를 사용합니다.

아래에서 설명된 필터를 적용하지 않으면 파이테스트 러너의 관련 출력 부분은 다음과 같습니다.

.venv/lib/python3.11/site-packages/pytest_freezegun.py:17: 34 warnings
tests/test_folder1/test_1.py: 10 warnings
tests/test_folder1/test_2.py: 4 warnings
  /my/project/path/.venv/lib/python3.11/site-packages/pytest_freezegun.py:17: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    if LooseVersion(pytest.__version__) < LooseVersion('3.6.0'):

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

이 은 사여하용을정에 있습니다.pyproject.toml,DeprecationWarning를 하지 않은 경우packaging.version는 완전히 사라졌지만, 파이테스트 프리즈건에 대해서만 다음과 같습니다(전체 프로젝트에 대한 모든 사용 중지 경고를 비활성화하고 싶지 않기 때문입니다).

[tool.pytest.ini_options]
testpaths = ["./tests"]
filterwarnings = ["ignore:.*distutils Version classes.*packaging.version:DeprecationWarning:pytest_freezegun"]

상세:

ignore:.*distutils Version classes.*packaging.version:DeprecationWarning:pytest_freezegun
^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
action       message (regular expression)                  category           module                                                  

참고:가 수정되지 될 수 번호를 .DeprecationWarning.

(댓글에도 필터링 가능성이 언급되었지만, 조금 더 자세히 설명하고 싶었습니다.)

${PYTHON} -m pytest -W ignore::DeprecationWarning

언급URL : https://stackoverflow.com/questions/40710094/how-to-suppress-py-test-internal-deprecation-warnings

반응형