从鼻子设置包()迁移到pytest

问题描述 投票:1回答:1

现在我正在尝试将一些API测试从Nose转换为Pytest。当我尝试这样做时,我遇到了一个小问题:Pytest不支持“setup_package()”功能。 “setup_package()”位于测试所在的__init__.py文件中。

这是目录结构:

tests/__init__.py
      test_001.py
      test_002.py
      ...

一个简单的解决方案是给setup_package()函数一个fixture,但问题是,我的setup_package()正在访问__init__.py中的全局计数器。这样__ini__.py文件看起来像这样:

counter_id = 0

def setup_package():
    global counter
    counter = some_function()

def teardown_package():
    global counter
    clear_object(counter_id)

我很确定,有一个非常简单的解决方案来迁移这个但是因为我是Pytest的新手我想知道将这个特定的例子迁移到Pytest的“pytestian”方式!我的第一个想法是使用具有params功能的夹具,但我不确定它是否是一种很好的迁移方式。

python testing pytest nose
1个回答
1
投票

正如@hoefling已在评论中暗示:

我刚刚在tests目录中创建了一个新的conftest.py(与In pytest, what is the use of conftest.py files?相关)文件(请参阅文件夹结构的初始问题)。

tests/__init__.py
      conftest.py
      test_001.py
      test_002.py
      ... 

在那个conftest.py文件中,我刚刚使用以下fixture修复了setup_package函数:

@pytest.fixture(scope='session', autouse=True)
def setup_and_teardown_package():
(...) #setup
yield
(...) #teardown

关于counter_id:我们不再需要flags了,因为我们的setupteardown只有一个函数,因此变量不会丢失。 yield告诉函数停止,直到所有测试完成,然后继续该方法。所以基本上:yield之前的所有东西都会像设置一样,而yield之后的所有东西都会像拆机一样 - >不再需要全局变量:)

© www.soinside.com 2019 - 2024. All rights reserved.