gpt4 book ai didi

python - pytest:使用 "session"范围固定装置以及默认范围固定装置

转载 作者:行者123 更新时间:2023-12-04 16:45:52 25 4
gpt4 key购买 nike

我正在构建一个 pytest 测试套件,测试我正在构建的包。测试应该验证有关 pkg 的一些事情,例如次要功能检查、次要健全性检查等。一些检查是在安装前完成的,一些是在安装后完成的(示例代码):


测试文件:

import pytest

class PreInstallTests(object):
def test_foo(self, bar):
assert bar > 2

class PostInstallTests(object):
def test_goo(self, baz):
assert baz < 3

def test_hoo(self, baz):
assert baz > 1

session 文件:

import pytest
@pytest.fixture
def tmp_dir():
os.mkdir('tmp')
yield
shutil.rmtree('tmp')

@pytest.fixture
def bar(tmp_dir):
yield 3

@pytest.fixture
def baz(install, tmp_dir):
yield 2

@pytest.fixture(scope='session')
def install():
# installs the pkg... (takes a lot of time)

从这里可以看出,我有 2 个安装后测试,每个测试都使用名为 baz 的 fixture ,该 fixture 使用 install fixture 。我只想安装一个,或者对所有安装后测试使用相同的安装(不理想,但测试很少,我不想在当前重新安装上浪费太多时间)。

使用“scope” session 参数可以解决我的问题,但这会禁止我使用任何其他装置,例如“tmp_dir”(代表我需要的装置,并且必须保持默认范围...)

我怎样才能为所有测试实现一个安装,并且仍然使用我想保留其默认范围的其他装置?

我想过让install 成为一个自动装置,但实际上我需要在当前默认范围内的一些其他装置之后调用它,并且应该保持这种状态

最佳答案

我能想到的唯一解决方案是设置一个标志来控制您是否已经运行了安装代码,然后将 fixture 保持在默认范围内。


import pytest

installed = False

@pytest.fixture()
def install():
global installed
if not installed:
print('installing')
installed = True

关于python - pytest:使用 "session"范围固定装置以及默认范围固定装置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57939928/

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