我正在尝试实现一个名为@pytest.mark.must_pass
的新的pytest
标记,用于指示如果标记的测试失败,pytest应该跳过所有后续测试并终止。
我已经使用pytest_runtest_call
钩子使pytest在标记的测试失败时终止,但我使用的是pytest.exit
,它不会打印回溯,也不会显示有关问题测试的失败指示。
我需要这个失败出现像任何其他测试失败一样,除了pytest在打印出它需要打印的内容以详细说明失败后停止测试。
到目前为止我的代码如下:
# Copied this implementation from _pytest.runner
def pytest_runtest_call(item):
_update_current_test_var(item, "call")
try:
del sys.last_type
del sys.last_value
del sys.last_traceback
except AttributeError:
pass
try:
item.runtest()
except Exception:
# Store trace info to allow postmortem debugging
type, value, tb = sys.exc_info()
assert tb is not None
tb = tb.tb_next # Skip *this* frame
sys.last_type = type
sys.last_value = value
sys.last_traceback = tb
del type, value, tb # Get rid of these in this frame
# If test is marked as must pass, stop testing here
if item.iter_markers(name = "must_pass"):
pytest.exit('Test marked as "must_pass" failed, terminating.')
raise
pytest中是否已经有用于完成此操作的机制?
非常感谢您的任何帮助。
谢谢。
must_pass
标记后总是退出。 - gold_cy