希望在pytest输出中查看取消选择的测试及其节点ID的列表



是否有一个选项可以在cli输出中列出取消选择的测试以及触发取消选择的标记?

我知道在有很多测试的套件中,这不是一个好的默认选项,但在像api测试这样的测试可能更有限的情况下,这将是一个有用的选项。

数字摘要

collected 21 items / 16 deselected / 5 selected 

当试图组织标记并查看ci构建中发生了什么时,这是有帮助的,但还不够。

pytest有一个用于访问取消选择的测试的hookspecpytest_deselected。示例:将此代码添加到测试根目录中的conftest.py

def pytest_deselected(items):
if not items:
return
config = items[0].session.config
reporter = config.pluginmanager.getplugin("terminalreporter")
reporter.ensure_newline()
for item in items:
reporter.line(f"deselected: {item.nodeid}", yellow=True, bold=True)

现在运行测试会给你一个类似的输出:

$ pytest -vv
...
plugins: cov-2.8.1, asyncio-0.10.0
collecting ...
deselected: test_spam.py::test_spam
deselected: test_spam.py::test_bacon
deselected: test_spam.py::test_ham
collected 4 items / 3 deselected / 1 selected
...

如果您想要另一种格式的报告,只需将取消选择的项目存储在配置中,并将它们用于其他地方所需的输出,例如pytest_terminal_summary:

# conftest.py
import os
def pytest_deselected(items):
if not items:
return
config = items[0].session.config
config.deselected = items

def pytest_terminal_summary(terminalreporter, exitstatus, config):
reports = terminalreporter.getreports('')
content = os.linesep.join(text for report in reports for secname, text in report.sections)
deselected = getattr(config, "deselected", [])
if deselected:
terminalreporter.ensure_newline()
terminalreporter.section('Deselected tests', sep='-', yellow=True, bold=True)
content = os.linesep.join(item.nodeid for item in deselected)
terminalreporter.line(content)

给出输出:

$ pytest -vv
...
plugins: cov-2.8.1, asyncio-0.10.0
collected 4 items / 3 deselected / 1 selected                                                     
...
---------------------------------------- Deselected tests -----------------------------------------
test_spam.py::test_spam
test_spam.py::test_bacon
test_spam.py::test_ham
================================= 1 passed, 3 deselected in 0.01s =================================

最新更新