Pytest 有 @pytest.mark.filterwarnings
使用:
@pytest.mark.filterwarnings("ignore::DeprecationWarning")
就像一个魅力,但我不想忽略所有 DeprecationWarning 我想忽略一个特定的:
warnings.warn("Please use new_module.", DeprecationWarning)
我尝试这样做:
@pytest.mark.filterwarnings("ignore::DeprecationWarning: Please use new_module.")
但这不起作用。我找不到过滤特定消息的正确语法。
如何做到这一点?
https://docs.python.org/3/library/warnings.html#describing-warning-filters
各个警告过滤器被指定为一系列用冒号分隔的字段: 操作:消息:类别:模块:行
所以,假设我收到以下警告:
tests/test_something.py::test_create_something
/home/.venv/lib/python3.10/site-packages/httpx/_client.py:1426: DeprecationWarning: The 'app' shortcut is now deprecated. Use the explicit style 'transport=ASGITransport(app=...)' instead.
warnings.warn(message, DeprecationWarning)
如果我只想过滤掉该警告,那么我必须在 pyproject.toml:
中写入[tool.pytest.ini_options]
filterwarnings = [
"ignore:.*the 'app' shortcut is now deprecated.*:DeprecationWarning:httpx",,
]