如何在pytest中禁用Appium的调用日志与初始化日志?
解决pytest捕获Appium日志的问题
我完全懂你的困扰——用pytest跑Appium iOS自动化测试时,只要用例失败,就会冒出一堆"Captured log call"和"Captured log setup"的Appium日志,加了-s参数也没效果对吧?其实-s只是禁用标准输入输出的捕获,对Python日志模块的输出不生效,这才导致这些日志还是会被打印出来。
给你几个实用的解决办法:
方法一:通过配置文件全局禁用
在项目根目录创建pytest.ini文件,添加以下配置:
[pytest] log_cli = false log_level = CRITICAL
这样设置后,pytest只会捕获CRITICAL级别的日志,而Appium的日志大多是INFO或DEBUG级别的,自然就不会被打印出来了。如果不想用pytest.ini,也可以在conftest.py里加钩子函数实现同样效果:
def pytest_configure(config): config.option.log_cli = False config.option.log_level = "CRITICAL"
方法二:命令行直接指定参数
不用改配置文件,直接在运行命令里追加日志相关参数:
pytest -v iOS_Sanity --no-log-cli --log-level CRITICAL
--no-log-cli会关闭命令行的日志输出,--log-level CRITICAL把日志阈值拉到最高,只有严重错误才会被捕获。
方法三:单独屏蔽Appium日志
如果还想保留其他模块的日志,只是屏蔽Appium的,可以在测试脚本里调整Appium日志器的级别:
import logging # 获取Appium对应的日志器(通常日志名为'appium') appium_logger = logging.getLogger('appium') # 将日志级别设为CRITICAL,只保留严重错误日志 appium_logger.setLevel(logging.CRITICAL)
你可以先试试方法二,直接在命令行加参数,最快见效;如果需要长期生效,方法一的配置文件会更省心。
内容的提问来源于stack exchange,提问作者Ron Serruya




