PyTest技术咨询:如何在测试末期执行指令及优先启动指定Fixture
测试结束后(所有Fixture销毁完成)执行指令
可以使用pytest内置的pytest_runtest_finished钩子函数,这个钩子会在测试的全生命周期结束后触发——包括该测试关联的所有Fixture销毁操作都已完成。
在项目的conftest.py中添加以下代码:
def pytest_runtest_finished(item): # 在这里编写你需要执行的收尾指令 print("所有Fixture销毁完成,执行自定义收尾逻辑")
你可以通过item参数获取当前测试的元信息(如测试名称、标记),实现针对性的收尾逻辑。
测试启动时优先执行逻辑(无需依赖其他Fixture)
方案1:使用钩子函数(推荐)
直接利用pytest_runtest_setup钩子,它会在所有Fixture的初始化操作之前触发,完全不需要依赖任何其他Fixture:
def pytest_runtest_setup(item): # 在这里编写需要优先执行的启动逻辑 print("优先于所有Fixture执行的初始化操作")
方案2:使用autouse Fixture
如果需要将逻辑封装为Fixture(比如需要复用状态),可以定义一个无依赖的autouse=True function级Fixture。pytest默认会让无依赖的autouse Fixture优先于其他有依赖或非-autouse的Fixture执行:
import pytest @pytest.fixture(autouse=True, scope="function") def pre_initialize(): # 此部分代码会优先于其他Fixture的初始化逻辑执行 print("优先启动的autouse Fixture") yield # 注:Fixture的销毁顺序与初始化顺序相反,若要确保销毁在最后,建议用钩子函数实现收尾
如果存在多个autouse Fixture,想要严格保证顺序,可将该Fixture放在conftest.py中(conftest中的Fixture会比测试文件内的更早加载执行),或安装pytest-ordering插件后给Fixture添加@pytest.mark.order(1)标记。
内容的提问来源于stack exchange,提问作者MG9901
相关产品推荐
相关产品推荐

