Pytest class 范围参数化
Pytest class scope parametrization
我有几个装置进行一些相当昂贵的初始化。其中一些固定装置可以采用参数,稍微改变它们的行为。
因为这些太贵了,我想在每个测试中对它们进行一次初始化 class。但是,它不会在下一次参数排列时销毁和重新初始化固定装置。
看这个例子:https://gist.github.com/vhdirk/3d7bd632c8433eaaa481555a149168c2
当为参数 'foo' 和 'bar'.
重新创建 DBStub
时,我希望 StuffStub
会是一个不同的实例
我是不是误会了什么?这是一个错误吗?
这不是错误。 固定装置之间没有关系,所以其中一个不会再次被调用,因为另一个是由于有多个 params
。
在你的例子中,db
被调用了两次,因为它使用的 db_factory
有 2 个 params
。另一方面,stuff
fixture 只被调用一次,因为 stuff_factory
在 params
.
中只有一个项目
如果 stuff
也包含 db_factory
而没有实际使用它的输出(db_factory
不会被调用超过两次),你应该得到你期望的结果:
@pytest.fixture(scope="class")
def stuff(stuff_factory, db_factory):
return stuff_factory()
我有几个装置进行一些相当昂贵的初始化。其中一些固定装置可以采用参数,稍微改变它们的行为。
因为这些太贵了,我想在每个测试中对它们进行一次初始化 class。但是,它不会在下一次参数排列时销毁和重新初始化固定装置。
看这个例子:https://gist.github.com/vhdirk/3d7bd632c8433eaaa481555a149168c2
当为参数 'foo' 和 'bar'.
重新创建DBStub
时,我希望 StuffStub
会是一个不同的实例
我是不是误会了什么?这是一个错误吗?
这不是错误。 固定装置之间没有关系,所以其中一个不会再次被调用,因为另一个是由于有多个 params
。
在你的例子中,db
被调用了两次,因为它使用的 db_factory
有 2 个 params
。另一方面,stuff
fixture 只被调用一次,因为 stuff_factory
在 params
.
如果 stuff
也包含 db_factory
而没有实际使用它的输出(db_factory
不会被调用超过两次),你应该得到你期望的结果:
@pytest.fixture(scope="class")
def stuff(stuff_factory, db_factory):
return stuff_factory()