Avi*_*hen 5 python linux logging command-line-interface pytest
我的团队和我正在使用Pytest + Jenkins使我们的产品测试自动化。我们一直使用python的标准Logging库在测试期间,每次测试之前和之后获取正确的日志消息等。我们具有多层日志记录,我们注销ERROR,WARNING,INFO和DEBUG。我们的记录器的默认值为INFO。我们在测试的主要设置中创建了记录器对象,并将其传递给创建的每个对象,因此我们的所有日志都转到同一记录器。
到目前为止,当我们开发新功能或测试时,我们在本地以DEBUG模式工作,并在将新代码提交给SVN时将其更改回INFO,但是我试图添加使用CLI更改日志记录级别的选项,但是我还没有发现容易实现的东西。我曾经考虑过使用夹具,但据我了解,这些夹具仅用于测试本身,而不是用于安装/拆卸阶段,并且创建日志时所涉及的测试较少。关于如何在CLI命令中添加Pytest选项以支持更改日志记录级别的任何技巧或想法?
小智 15
这现在内置在 pytest 中。运行测试时,只需在命令行中添加“--log-level=”即可。例如:
pytest --log-level=INFO
Run Code Online (Sandbox Code Playgroud)
文档更新可以在这里找到:https : //docs.pytest.org/en/latest/logging.html
Nil*_*ner 11
Pytest 3.5 引入了一个参数
pytest --log-cli-level=INFO
Run Code Online (Sandbox Code Playgroud)
对于 3.5 之前的版本,您可以结合pytest 命令行选项和命令行示例中的python日志级别来执行以下操作:
将以下内容添加到conftest.py:
import pytest
import logging
def pytest_addoption(parser):
parser.addoption(
"--log", action="store", default="WARNING", help="set logging level"
)
@pytest.fixture
def logger():
loglevel = pytest.config.getoption("--log")
logger = logging.getLogger(__name__)
numeric_level = getattr(
logging,
loglevel.upper(),
None
)
if not isinstance(numeric_level, int):
raise ValueError('Invalid log level: %s' % loglevel)
logger.setLevel(numeric_level)
return logger
Run Code Online (Sandbox Code Playgroud)
然后logger在您的测试中请求夹具
def test_bla(logger):
assert True
logger.info("True is True")
Run Code Online (Sandbox Code Playgroud)
然后像这样运行 pytest
py.test --log INFO
Run Code Online (Sandbox Code Playgroud)
将日志级别设置为INFO.
尝试 --log-cli-level=INFO
喜欢:
pytest -vv -s --log-cli-level=INFO --log-cli-format="%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)" --log-cli-date-format="%Y-%m-%d %H:%M:%S" ./test_file.py
Run Code Online (Sandbox Code Playgroud)