gpt4 book ai didi

python - 在参数化中传递 pytest fixture

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

我在@pytest.mark.parametrize 中传递在 conftest.py 中定义的 fixture 时出现以下错误:

pytest --alist="0220,0221" test_1.py -v -s
NameError: name 'alist' is not defined

conftest.py:

def pytest_addoption(parser):
parser.addoption("--alist", action="store")

@pytest.fixture
def alist(request):
return request.config.getoption("--alist").split(",")

test_1.py:

@pytest.mark.parametrize("channel", alist, scope="class")
class TestRaIntegrationReplay:

def test_ra_start_time(self, channel):
print(channel)

如果我将列表作为 fixture 传递给测试,例如:

    def test_ra_start_time(self, alist):
for channel in alist:
print(channel)

它运行良好,但它不适用于传递给@pytest.mark.parametrize

最佳答案

如评论中所述,您不能直接将 fixture 传递给 mark.parametrize 装饰器,因为装饰器是在加载时评估的。
您可以通过实现 pytest_generate_tests 在运行时进行参数化:

import pytest

@pytest.hookimpl
def pytest_generate_tests(metafunc):
if "alist" in metafunc.fixturenames:
values = metafunc.config.option.alist
if value is not None:
metafunc.parametrize("alist", value.split(","))

def test_ra_start_time(alist):
for channel in alist:
print(channel)

def test_something_else():
# will not be parametrized
pass

参数化是根据测试函数中 alist 参数的存在来完成的。为了参数化工作,需要这个参数(否则你会因为缺少参数而得到一个错误)。

关于python - 在参数化中传递 pytest fixture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65291527/

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