我有兴趣将我的测试套件从使用nose迁移到使用py.test。我不喜欢测试失败摘要中py.test打印的测试名称,因为它们不包含测试的文件名。我非常喜欢py.test用于以详细模式打印进度的测试名称。
例如:
[dbw tests]$ py.test -sv r_group/test_meta_analysis/test_meta_analysis.py::_TestPanel::testDisplaySummary
==================================== test session starts ===============================
collected 3 items
r_group/test_meta_analysis/test_meta_analysis.py::_TestPanel::testDisplaySummary FAILED
========================================= FAILURES =====================================
_______________________________ _TestPanel.testDisplaySummary __________________________
这对我来说非常重要,因为我有~40K测试,短名称“_TestPanel.testDisplaySummary”对我快速找到我想要的测试没有帮助。我假设有一个内置的py.test钩子可以做到这一点,但我还没有找到它。
答案 0 :(得分:2)
summary_failures()
的方法_pytest.terminal.TerminalReporter
是打印该行的方法(我通过搜索字符串" FAILURES"找到它)。它使用_getfailureheadline()
来获取测试名称(并丢弃文件名和行号)。
我建议继承<a href="http://www.youtube.com/embed/M7lc1UVf-VE" target="_help">Help</a>
<iframe name="_help"></iframe>
并覆盖TerminalReporter
。
例如:
_getfailureheadline()
产生以下输出:
def _getfailureheadline(self, rep):
if hasattr(rep, 'location'):
fspath, lineno, domain = rep.location
return '::'.join((fspath, domain))
else:
return super()._getfailureheadline(rep)
您可以使用您自己的writing a new plugin覆盖默认报告者,其中包含以下内容:
test.py::test_x FAILED
================ FAILURES ================
____________ test.py::test_x _____________