咨询:Pytest参数化测试中如何让Fixture仅初始化销毁一次
问题解答
你的理解是对的:当前function作用域的fixture会在每个参数化测试用例执行时,分别执行generate_some_data()初始化和teardown()销毁。
要实现所有参数化用例共享一次fixture的初始化与销毁,有两种常用方案:
方案1:提升fixture作用域到模块级
把fixture的scope参数改为"module",这样整个Python模块内的所有测试(包括该参数化函数的所有用例)只会触发一次fixture的初始化和销毁:
@pytest.fixture(scope="module") def data(): data = generate_some_data() yield data # 注意修正拼写错误:原代码的yeild应为yield teardown()
方案2:用类级作用域绑定特定测试组
如果只想让该参数化测试的所有用例共享fixture,不影响模块内其他测试,可以把测试函数放到测试类中,同时将fixture作用域设为"class":
@pytest.fixture(scope="class") def data(): data = generate_some_data() yield data teardown() class TestRuns: @pytest.mark.parametrize("runs", ["one", "two"]) def test_run_cases(self, data, runs): run_some_tests(runs)
这样该测试类下的所有用例(包括两个参数化实例)会共用同一个fixture实例,仅执行一次初始化和销毁。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

