【问题标题】:initing a pytest fixture with a parameter使用参数初始化 pytest 夹具
【发布时间】:2015-11-23 08:51:18
【问题描述】:

我有一个固定装置,可以创建我在许多测试中使用的对象。
这个对象有一个属性 - priority (1 - 10)

现在,有很多测试需要“知道”对象的优先级(以便测试各种逻辑路径)

所以我可以有 10 种不同的灯具:

@pytest.fixture
def object_priority_1():
    return MyObj(priority=1)
@pytest.fixture
def object_priority_2():
    return MyObj(priority=2)
//....
@pytest.fixture
def object_priority_10():
    return MyObj(priority=10)

但它似乎不对......我确信有一种方法可以每次都将外部参数传递给夹具 - 我只是找不到它

编辑: 澄清一下 - 我本来想要以下方面的东西:

@pytest.fixture
    def my_object(<priority as an external param>):
        return MyObj(priority)

然后测试会是这样的:

def test_foo(my_object(1), my_object(6)):
//...

【问题讨论】:

标签: python pytest


【解决方案1】:

你可以做这样的事情,它会用这些参数返回运行你的夹具:

@pytest.fixture(
    params=[
        "param1",
        "param2",
        "param3",
        "param4",
        "param5",
        "param6",
    ]
)
def fixture_with_params(request):
    return request.param

【讨论】:

    【解决方案2】:

    你可以这样做:

    @pytest.fixture
    def my_object(priority):
        return MyObj(priority)    
    
    def test_foo(my_object):
        obj_1 = my_object(1)
        assert something # 1
        obj_2 = my_object(2)
        assert something # 2
    

    我有这个想法,然后我发现了这个问答:

    py.test: Pass a parameter to a fixture function

    如果您的问题得到解决,我认为您的问题可能会考虑重复。

    【讨论】:

    • 我之前尝试过这种特殊的语法,但效果不佳,它错误地提示找不到夹具priority。您提供的链接中的解决方案确实有效。
    • 对象(函数)是否定义了名为priority的参数?
    • 没有那个特定的变量名。当我使用变量名request 时,我得到了它,但是当我用我真正想要使用的变量(filename)替换变量时它不起作用。如果是用户错误,我会再试一次。你可以看到我指的代码here
    • fixture 'priority' not found available fixtures: tmpdir_factory, pytestconfig, filepath, cache, recwarn, monkeypatch, record_xml_property, capfd, load_file, capsys, tmpdir use 'py.test --fixtures [testpath]' for help on them. 和之前一样的错误
    • 我看了一下代码,我不确定我是否理解你想要做什么...请按原样尝试代码,看看它是否允许它应该做的事情它将参数传递给测试中的对象...例如,您可以使用简单的打印功能模拟 MyObj...我不确定它是解决您的问题的正确位置,因为我觉得我需要更多内部关于你在做什么,我们不应该为此目的使用评论......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多