从 noses setup_package() 迁移到 pytest
Migrating form noses setup_package() to pytest
现在我正在尝试将一些 API 测试从 Nose 转换为 Pytest。当我尝试这样做时,我遇到了一个小问题:Pytest 不支持 "setup_package()" 功能。 "setup_package()" 在测试所在的 __init__.py 文件中。
这是目录结构:
tests/__init__.py
test_001.py
test_002.py
...
一个简单的解决方案是给 setup_package() 函数一个固定装置,但这里的问题是,我的 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 的新手,我想知道 "pytestian" 将这个特定示例迁移到 Pytest 的方法!我的第一个想法是使用具有参数功能的夹具,但我不确定这是否是一个很好的迁移方式。
正如@hoefling 已经在评论中暗示的那样:
我刚刚在测试目录中创建了一个新的 conftest.py(与 相关)文件(有关文件夹结构,请参阅初始问题)。
tests/__init__.py
conftest.py
test_001.py
test_002.py
...
在那个 conftest.py 文件中,我刚刚复制了 setup_package 函数,具有以下固定装置:
@pytest.fixture(scope='session', autouse=True)
def setup_and_teardown_package():
(...) #setup
yield
(...) #teardown
关于 counter_id
:我们不再需要 flags
,因为我们的 setup
和 teardown
有一个函数,因此变量不会迷路了。
yield
告诉函数停止,直到完成所有测试,然后继续该方法。所以基本上:所有 BEFORE yield
都会像设置一样,所有 AFTER yield
都会像拆解 - > 不再需要全局变量了:)
现在我正在尝试将一些 API 测试从 Nose 转换为 Pytest。当我尝试这样做时,我遇到了一个小问题:Pytest 不支持 "setup_package()" 功能。 "setup_package()" 在测试所在的 __init__.py 文件中。
这是目录结构:
tests/__init__.py
test_001.py
test_002.py
...
一个简单的解决方案是给 setup_package() 函数一个固定装置,但这里的问题是,我的 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 的新手,我想知道 "pytestian" 将这个特定示例迁移到 Pytest 的方法!我的第一个想法是使用具有参数功能的夹具,但我不确定这是否是一个很好的迁移方式。
正如@hoefling 已经在评论中暗示的那样:
我刚刚在测试目录中创建了一个新的 conftest.py(与
tests/__init__.py
conftest.py
test_001.py
test_002.py
...
在那个 conftest.py 文件中,我刚刚复制了 setup_package 函数,具有以下固定装置:
@pytest.fixture(scope='session', autouse=True)
def setup_and_teardown_package():
(...) #setup
yield
(...) #teardown
关于 counter_id
:我们不再需要 flags
,因为我们的 setup
和 teardown
有一个函数,因此变量不会迷路了。
yield
告诉函数停止,直到完成所有测试,然后继续该方法。所以基本上:所有 BEFORE yield
都会像设置一样,所有 AFTER yield
都会像拆解 - > 不再需要全局变量了:)