gpt4 book ai didi

python - 在 pytest 中执行teardown_method后测试失败

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:05 27 4
gpt4 key购买 nike

我试图弄清楚如何编写一个 pytest 插件,该插件可用于在运行后使测试失败(对于任何想要更多上下文的人,这与 astropy/pytest-openfiles#28 相关)。让我们考虑以下简单的测试文件:

class TestClass:

def setup_method(self, method):
print("In setup_method")

def teardown_method(self, method):
print("In teardown_method")

def test_simple(self):
print("In test")

我现在可以定义一个 conftest.py 文件,其中包含:

def pytest_runtest_teardown(item, nextitem):
print("In pytest_runtest_teardown")

在这个钩子(Hook)中,我可以执行检查 - 例如,在我感兴趣的情况下,我们正在检查未关闭的文件句柄。然而,问题是这个钩子(Hook)在 setup_method 之后和测试本身 (test_simple) 之后但在 teardown_method 之前运行:

% pytest test.py -vs
...
collected 1 item

test.py::TestClass::test_simple In setup_method
In test
PASSEDIn pytest_runtest_teardown
In teardown_method

我考虑过使用:

def pytest_runtest_makereport(item, call):

if call.when != 'teardown':
return

print("In pytest_runtest_makereport")

它确实在 teardown_method 之后执行,但此时如果我引发异常,pytest 将输出 INTERNALERROR 并且仍会认为测试成功。

调用 teardown_method 后是否有办法使测试失败/出错?

最佳答案

test_simple 结束后,Pytest 认为它已完成,从现在开始的所有内容都将超出测试范围。您可以向函数添加 @pytest.fixture 注释,这将为您提供 pytest 设置和拆卸功能。测试本身将被视为通过,但不是所有套件。 TestClass 将被标记为失败,并引发 teardown_method

异常
class TestClass:

@pytest.fixture
def run_for_test(self):
self.setup_method()
yield
self.teardown_method()

def setup_method(self, method):
print("In setup_method")

def teardown_method(self, method):
print("In teardown_method")
# just for the example
if not method:
raise AssertionError

def test_simple(self):
print("In test")

输出

In setup_method
.In test
In teardown_method
> raise AssertionError
E AssertionError

关于python - 在 pytest 中执行teardown_method后测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com