如何在没有详细测试进度的情况下显示详细的 py.test 差异?
How can I show verbose py.test diffs without verbose test progress?
py.test
的 --verbose
选项需要显示断言失败的完整差异,但这也会在执行期间显示每个测试的全名(这是嘈杂的)。
我希望在断言失败时显示完整差异,但我只希望在测试 运行 时显示单个 .
。有办法吗?
不幸的是,似乎没有针对它的配置或命令行标志,因为它是硬编码的 deep inside pytest:当您定义 --verbose
时,您会得到整个包。但是,我设法想出了这个 hackish hack。将以下函数放入您的 conftest.py
:
def pytest_configure(config):
terminal = config.pluginmanager.getplugin('terminal')
BaseReporter = terminal.TerminalReporter
class QuietReporter(BaseReporter):
def __init__(self, *args, **kwargs):
BaseReporter.__init__(self, *args, **kwargs)
self.verbosity = 0
self.showlongtestinfo = self.showfspath = False
terminal.TerminalReporter = QuietReporter
这本质上是一个猴子补丁,依赖于 pytest 内部结构,不保证与未来的版本兼容并且丑陋如罪。您还可以根据命令行参数的一些其他自定义配置使此补丁有条件。
基于@bereal 的回答
(这很好,但应该跟进一些 pytest 更改)
def pytest_configure(config):
terminal = config.pluginmanager.getplugin('terminal')
class QuietReporter(terminal.TerminalReporter):
@property
def verbosity(self):
return 0
@property
def showlongtestinfo(self):
return False
@property
def showfspath(self):
return False
terminal.TerminalReporter = QuietReporter
py.test
的 --verbose
选项需要显示断言失败的完整差异,但这也会在执行期间显示每个测试的全名(这是嘈杂的)。
我希望在断言失败时显示完整差异,但我只希望在测试 运行 时显示单个 .
。有办法吗?
不幸的是,似乎没有针对它的配置或命令行标志,因为它是硬编码的 deep inside pytest:当您定义 --verbose
时,您会得到整个包。但是,我设法想出了这个 hackish hack。将以下函数放入您的 conftest.py
:
def pytest_configure(config):
terminal = config.pluginmanager.getplugin('terminal')
BaseReporter = terminal.TerminalReporter
class QuietReporter(BaseReporter):
def __init__(self, *args, **kwargs):
BaseReporter.__init__(self, *args, **kwargs)
self.verbosity = 0
self.showlongtestinfo = self.showfspath = False
terminal.TerminalReporter = QuietReporter
这本质上是一个猴子补丁,依赖于 pytest 内部结构,不保证与未来的版本兼容并且丑陋如罪。您还可以根据命令行参数的一些其他自定义配置使此补丁有条件。
基于@bereal 的回答
(这很好,但应该跟进一些 pytest 更改)
def pytest_configure(config):
terminal = config.pluginmanager.getplugin('terminal')
class QuietReporter(terminal.TerminalReporter):
@property
def verbosity(self):
return 0
@property
def showlongtestinfo(self):
return False
@property
def showfspath(self):
return False
terminal.TerminalReporter = QuietReporter