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
이러한 경고를 해제하는 방법이 있습니까?
답변
에서 pytest --help
:
--disable-pytest-warnings
disable warnings summary, overrides -r w flag
답변
pytest -p no:warnings
, 또는 pytest.ini 또는 tox.ini에 다음을 추가하십시오.
[pytest]
addopts = -p no:warnings
결과는 경고 표시없이 녹색으로 표시됩니다. https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary의 문서를 참조하십시오 .
이것은 깨끗한 출력을 원하는 테스트 스위트의 유효한 사용 사례가 될 수 있습니다.
항상 모든 경고를 숨기면 중요한 경고를 놓칠 수 있습니다. 특정 경고 만 숨기려면 Cloc의 답변을 참조하십시오 .
답변
모든 경고를 숨기는 것이 아니라 관련없는 경고 만 숨기고 싶지 않다고 생각합니다. 그리고이 경우 가져온 파이썬 모듈의 사용 중단 경고입니다.
경고 캡처 에 대한 pytest 문서를 읽었습니다 .
-W 명령 줄 옵션과 filterwarnings 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
편집 : colini 의 의견에서 모듈별로 필터링이 가능합니다. 모든 sqlalchemy의 지원 중단 경고를 무시하는 예 :
ignore::DeprecationWarning:sqlalchemy.*:
그런 다음 출력에 너무 많은 노이즈를 생성하는 설치된 모듈을 나열 할 수 있습니다. pytest
명령 줄이 아닌 파일과 함께 사용 :
pytest.ini 파일에 이러한 필터를 나열하는 것이 좋습니다.
[pytest]
filterwarnings =
ignore::DeprecationWarning
답변
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-warnings
테스트 실행 출력에서 경고 요약을 완전히 억제하는 명령 줄 옵션입니다.
답변
모든 경고를 숨기고 싶지 않아서 pytest.ini
[pytest]
filterwarnings =
ignore::DeprecationWarning