是否可以使用灯具参数化测试?

时间:2015-11-09 14:27:33

标签: python pytest factory-boy

我想传递@pytest.mark.parametrize不是特定值而是固定装置。像这样。

给出了一个混淆:

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

@pytest.fixture
def name2():
    return 'bar'

在我的test.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)

我知道在这个简单的情况下我可以创建一个名称夹具并改为对夹具进行参数化,但有些情况下这是不可取的。

我找到的一种解决方法是使用pytest_factoryboy的{​​{1}}。 但是,我经常无法在我的测试中访问lazyfixtures属性。

1 个答案:

答案 0 :(得分:3)

我会坚持parametrizing the fixture

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

@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)

哪种方法最适合您将取决于测试的具体情况,也可能取决于您可能尝试使用的预先存在的灯具。