pytest 2.3中的封装范围固定装置

ben*_*lme 7 python pytest

在pytest的最新版本中,很容易创建像这样的函数,类,模块或会话范围的灯具:

@pytest.fixture(scope="module") 
def db():
     return DB()
Run Code Online (Sandbox Code Playgroud)

这创建了一个仅为每个使用它的python模块调用一次的fixture.

但是每个python包需要调用一次的灯具呢?(使用鼻子,可以使用包中的setUp/tearDown方法完成__init__.py)

hpk*_*k42 5

对于包或目录级别的灯具,您可以conftest.py使用在您需要的目录中的文件中声明灯具scope='session'.一旦包/目录中的第一个测试使用它,就会实例化fixture.下面是一个示例但是,如果fixture函数注册了终结器,您可能会看到它在该目录中的最后一次测试之后没有直接执行.我认为pytest可以用来支持更急切的拆解或者在需要时引入"目录"范围.通常这不是一个大问题,如果拆解执行稍晚只要它不执行得太早:)请注意,显然Jason 打算放弃包级别设置/拆卸支持鼻子

无论如何,如果您需要更加急切/准确的pytest拆解,请随时打开一个问题.

  • 现在在2018年,我注意到受支持的软件包范围已添加到夹具中。但是正如您提到的,如果fixture函数注册了终结器,则不会在该目录中的最后一个测试之后立即执行它。这不是软件包级别拆卸的预期行为。我认为Robotframework以更易于理解的方式实现了安装拆卸。 (2认同)