pytest的fixture学习十六

自动使用fixtures(xUnit setup on steroids)

有时,我们可能想要自动调用fixtures,而无需显示声明函数或usefixtures装饰器。作为一个实际示例,假设我们有一个具有begin/rollback/commit接受的数据库fixture,并且我们希望通过事务和回滚来自动包围每个测试方法。下面是该想法的一个虚拟独立实现:

示例

class-level事务处理fixture被标记为autouse=True,这意味着该类中所有测试方法都需要使用此fixture,而无需在测试函数签名中或类级usefixtures装饰器中声明。

运行结果:

示例结果

下面是autouse fixtures在其他scope上面的工作方式:

·autouse fixtures遵从scope=关键字参数:如果autouse fixtures的scope=“session”,则无论定义在哪里,都只会运行一次。scope=“class”表示每个类将运行一次,以此类推

· 如果在一个测试模块中定义了一个autouse fixtures,那么该模块下的所有测试功能都会自动使用该fixtures

· 如果在conftest.py文件中定义了一个autouse fixtures,那么其目录下所有测试模块中的所有测试都将调用该fixtures

· 最后,请谨慎使用:如果在一个插件中定义了一个autouse fixtures,那么会在安装该插件的所有项目中的所有测试中都会调用该fixtures。如果fixture仅在某一特定设置下,如ini-file中,起作用,那该方法很有用。这样的一个全局fixture应始终快速确定它是否应该做任何工作,并避免其他额外的导入或计算。

注意:上面示例中的事务处理fixture很可能是希望在项目中有效,但不让它激活。做到这一点的规范方式是将事务处理定义放到conftest.py文件中,而不使用autouse:

示例

然后有一个TestClass来通过声明使用它:

管理示例

该TestClass中所有测试方法都将使用事务处理fixture,而模块中的其他测试类或函数将不使用该fixture,除非他们自己也添加了事务处理。

你可能感兴趣的:(pytest的fixture学习十六)