在测试类中,为什么setup和tear down不会执行?求帮忙解释一下🤔
给用例写个fixture
增加用例的前置和后置操作,conftest.py
如下:
import pytest
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
print('------------------------------------')
# 获取钩子方法的调用结果
out = yield
print('用例执行结果', out)
# 3\. 从钩子方法的调用结果中获取测试报告
report = out.get_result()
print('测试报告:%s' % report)
print('步骤:%s' % report.when)
print('nodeid:%s' % report.nodeid)
print('description:%s' % str(item.function.__doc__))
print(('运行结果: %s' % report.outcome))
@pytest.fixture(scope="session", autouse=True)
def fix_a():
print("setup 前置操作")
yield
print("teardown 后置操作")
运行结果:
当setup
执行失败了,setup
执行结果的failed
,后面的call
用例和teardown
都不会执行。
此时用例的状态是error
,也就是用例call
还没开始执行就异常了。
如果setup
正常执行,但测试用例call
失败了。
@pytest.fixture(scope="session", autouse=True)
def fix_a():
print("setup 前置操作")
yield
print("teardown 后置操作")
test_a.py
用例:
def test_a():
'''用例描述:test_a'''
print("123")
assert 1==0
那么此时运行结果就是failed
。
如果setup
正常执行,测试用例call
正常执行,teardown
失败了:
@pytest.fixture(scope="session", autouse=True)
def fix_a():
print("setup 前置操作")
yield
print("teardown 后置操作")
raise Exception("teardown 失败了")
teat_a.py
用例:
def test_a():
'''用例描述:test_a'''
print("123")
最终结果:1 passed, 1 error in 0.16 seconds 。
setup和teardown 是执行类里面的用例函数.
def setup(self):
print("===== 类里面每个用例执行前都会执行 setup =====")
def teardown(self):
print("===== 类里面每个用例结束后都会执行 teardown =====")
整体全部的顺序:
setup_module->setup_function->test_one->teardown_function->setup_function->test_two->teardown_function->setup_class->setup_method->setup->test_three->teardown->teardown_method->setup_method->setup->test_four->teardown->teardown_method->teardown_class->teardown_module