【问题标题】:Using a fixture as several parameters in pytest.mark.parametrize在 pytest.mark.parametrize 中使用夹具作为多个参数
【发布时间】:2022-12-21 12:01:49
【问题描述】:

我想将代表多个参数的夹具传递给 pytest.mark.parametrize,例如:

import pytest

@pytest.fixture(scope="session")
def get_test_data():
    return [("a", 1), ("b", 2), ("c",3)]
    
@pytest.mark.parametrize("letter, number", get_test_data)
def test_output(letter, number): 
    assert True

但我得到的是: TypeError: 'function' 对象不可迭代

我尝试使用 lazyfixture 和 getfixturevalue,但没有任何效果。 帮助将不胜感激。

【问题讨论】:

    标签: python pytest


    【解决方案1】:

    Mark parametrize 需要一个元组列表: https://docs.pytest.org/en/6.2.x/parametrize.html 你给它一个函数(比如回调)。 尝试调用该函数:

    import pytest
    
    @pytest.fixture(scope="session")
    def get_test_data():
        return [("a", 1), ("b", 2), ("c",3)]
        
    @pytest.mark.parametrize("letter, number", get_test_data())
    def test_output(letter, number): 
        assert True
    
    

    【讨论】:

    • 您好,感谢您的回复。当我尝试您的建议时,出现以下错误:直接调用了夹具“get_test_data”。 Fixtures 不是直接调用的,而是在测试函数请求它们作为参数时自动创建的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多