Python 是否可以使用夹具将测试参数化?

Python 是否可以使用夹具将测试参数化?,python,pytest,factory-boy,Python,Pytest,Factory Boy,我想通过@pytest.mark.parametrize不是特定的值而是装置。像这样 与以下人员进行了一次谈话: @pytest.fixture def name1(): return 'foo' @pytest.fixture def name2(): return 'bar' 在我的测试范围内.py 这当然有效: @pytest.mark.parametrize('name', ['foo', 'bar', 'baz']) def test_name(name):

我想通过
@pytest.mark.parametrize
不是特定的值而是装置。像这样

与以下人员进行了一次谈话:

@pytest.fixture
def name1():
    return 'foo'

@pytest.fixture
def name2():
    return 'bar'
在我的测试范围内.py 这当然有效:

@pytest.mark.parametrize('name', ['foo', 'bar', 'baz'])
def test_name(name):
    print(name)
这并不是:

 @pytest.mark.parametrize('name', [name1, name2])
 def test_name(name):
     print(name)
我知道,在这个简单的例子中,我可以只创建一个名称fixture并将fixture参数化,但是在有些情况下,这是不可解的

我发现的一种解决方法是使用
pytest\u factoryboy
LazyFixture
。 但是,我经常无法在测试中访问lazyfixtures属性。

我会坚持

在您的示例中,这相当于:

@pytest.fixture(params=['foo', 'bar'])
def name(request):
    return request.param

def test_name(name):
    print(name)
另一种选择:

@pytest.fixture(params=[1,2])
def name(name1, name2, request):
    if request.param == 1:
        return name1()
    elif request.param == 2:
        return name2()

def test_name(name):
    print(name)

哪种方法最适合您将取决于您测试的具体情况,可能还取决于您可能试图利用哪些预先存在的装置。

我真的不认为仅对装置进行参数化是不够的。然而,我想到的是这样的:
@pytest.mark.parametrize('name',[name1(),name2()])def test\u name(name):print(name)
。当然,这并不是你想要的,因为在本例中,fixture是标准函数,而不是fixture。pytest tracker对此有很长的历史,但到目前为止,还没有人对其进行过研究。