How to suppress py.test internal deprecation warnings
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Hypnotic Puzzle2
--
Chapters
00:00 How To Suppress Py.Test Internal Deprecation Warnings
00:44 Accepted Answer Score 181
00:55 Answer 2 Score 139
01:27 Answer 3 Score 234
03:11 Answer 4 Score 17
03:21 Thank you
--
Full question
https://stackoverflow.com/questions/4071...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #pytest
#avk47
ANSWER 1
Score 234
I think you do not want to hide all warnings, but just the ones that are not relevant. And in this case, deprectation warnings from imported python modules.
Having a read on pytest documentation about Warnings Capture:
Both -W command-line option and filterwarnings ini option are based on Python’s own -W option and warnings.simplefilter, so please refer to those sections in the Python documentation for other examples and advanced usage.
So you can filter warnings with python's -W option!
It seems that pytest completely removes filters, because it shows all those DeprecationWarning when running, and Python's documentation about Default Warning Filters clearly says:
In regular release builds, the default warning filter has the following entries (in order of precedence):
default::DeprecationWarning:__main__ ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarning
So in your case, if you want let say to filter types of warning you want to ignore, such as those DeprecationWarning, just run the pytest command with -W option :
$ pytest path-to-test-folder -W ignore::DeprecationWarning
EDIT: From colini's comment, it is possible to filter by module. Example to ignore deprecation warnings from all sqlalchemy :
ignore::DeprecationWarning:sqlalchemy.*:
You can then list your installed modules that creates too much noise in the output of pytest
EDIT2: For more precise control, the Python documentation about Describing Warning Filters states that the general way to write such warning filters is:
action:message:category:module:line
Use with file rather than in command line:
You may prefer list those filters in pytest.ini file :
[pytest]
filterwarnings =
ignore::DeprecationWarning
ACCEPTED ANSWER
Score 181
From pytest --help:
--disable-pytest-warnings
disable warnings summary, overrides -r w flag
ANSWER 3
Score 139
pytest -p no:warnings, or add the following to your pytest.ini or tox.ini:
[pytest]
addopts = -p no:warnings
The result will be green without any indication of warnings. See documentation at https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary.
This can be a valid use case for a test suite where you want clean output.
Be aware that always hiding all warnings may cause you to miss important warnings. If you want to hide only specific warnings, look at Cloc's answer.
ANSWER 4
Score 17
I don't want to hide all warning, so I put this in pytest.ini
[pytest]
filterwarnings =
ignore::DeprecationWarning