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_factoryparams.

中只有一个项目

如果 stuff 也包含 db_factory 而没有实际使用它的输出(db_factory 不会被调用超过两次),你应该得到你期望的结果:

@pytest.fixture(scope="class")
def stuff(stuff_factory, db_factory):
    return stuff_factory()