gpt4 book ai didi

python - 从 noses setup package() 迁移到 pytest

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:23 40 4
gpt4 key购买 nike

现在我正在尝试将一些 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 的新手,我想知道将这个特定示例迁移到 Pytest 的“pytestian”方式!我的第一个想法是使用具有参数功能的 fixture ,但我不确定这是否是一种很好的迁移方式。

最佳答案

正如@hoefling 已经在评论中暗示的那样:

我刚刚在测试目录中创建了一个新的 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 文件中,我只是复制了其中的 setup_package 函数,具有以下固定装置:

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

关于 counter_id:我们不再需要 flags,因为我们只有一个函数用于我们的setupteardown ,这样变量就不会丢失。yield 告诉函数停止,直到完成所有测试,然后继续该方法。所以基本上:BEFORE yield 的一切都将表现得像设置,而 AFTER yield 的一切都将表现得像拆解 -> 不再需要全局变量了:)

关于python - 从 noses setup package() 迁移到 pytest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52365106/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com