Mat*_*rše 4 logging automated-tests pytest python-3.x teardown
我有一个 Pytest + Selenium 项目,我想使用日志记录模块。
conftest.py但是,当我像这样设置登录时
@pytest.fixture(params=["chrome"], scope="class")
def init_driver(request):
start = datetime.now()
logging.basicConfig(filename='.\\test.log', level=logging.INFO)
if request.param == "chrome":
options = ChromeOptions()
options.add_argument("--start-maximized")
web_driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
if request.param == "firefox":
web_driver = webdriver.Firefox(GeckoDriverManager().install())
request.cls.driver = web_driver
yield
end = datetime.now()
logging.info(f"{end}: --- DURATION: {end - start}")
web_driver.close()
Run Code Online (Sandbox Code Playgroud)
看起来test.log根本没有创建,并且没有错误消息或其他指示出现问题。
我怎样才能做到这一点?
首先两个事实:
logging.basicConfig()仅当在调用它之前未完成日志记录配置时才有效(目标记录器没有注册处理程序)。
pytest将自定义处理程序注册到根记录器,以便能够捕获代码中发出的日志记录,以便您可以测试程序日志记录行为是否正确。
这意味着调用logging.basicConfig(filename='.\\test.log', level=logging.INFO)固定装置不会执行任何操作,因为测试运行已经开始,并且根记录器已附加了pytest. 因此你有两个选择:
完全禁用内置logging插件。这将停止日志记录捕获 - 如果您有正在分析发出的日志的测试(例如使用夹具caplog),那么这些测试将停止工作。调用:
$ pytest -p no:logging ...
Run Code Online (Sandbox Code Playgroud)
您可以保留该标志,pyproject.toml以便自动应用它:
[tool.pytest.ini_options]
addopts = "-p no:logging"
Run Code Online (Sandbox Code Playgroud)
或者在pytest.ini:
[pytest]
addopts = -p no:logging
Run Code Online (Sandbox Code Playgroud)
配置和使用实时日志记录。中的配置pyproject.toml,相当于您的logging.basicConfig()调用:
[tool.pytest.ini_options]
log_file = "test.log"
log_file_level = "INFO"
Run Code Online (Sandbox Code Playgroud)
在pytest.ini:
[pytest]
log_file = test.log
log_file_level = INFO
Run Code Online (Sandbox Code Playgroud)
当然,在这种情况下logging.basicConfig(),可以将线从夹具上移除init_driver。
| 归档时间: |
|
| 查看次数: |
5370 次 |
| 最近记录: |