2016-08-21 91 views
2

比方说,我有一个参数化夹具这样的:如何在Pytest中使用夹具的覆盖参数?

@pytest.fixture(params=[1, 2, 800]): 
def resource(request): 
    return Resource(capacity=request.param) 

当我使用夹具作为测试功能参数,Pytest运行与所有三个版本的测试:

def test_resource(resource): # Runs for capacities 1, 2, and 800. 
    assert resource.is_okay() 

然而,一些测试中,我想改变该灯具被内置的参数:

def test_worker(resource, worker): # Please run this for capacities 1 and 5. 
    worker.use(resource) 
    assert worker.is_okay() 

我怎么可以指定只接受SPECI的某些版本fied夹具?

回答

3

如果您要使用不同的参数不同的测试然后pytest.mark.parametrize是有帮助的。

@pytest.mark.parametrize("resource", [1, 2, 800], indirect=True) 
def test_resource(resource): 
    assert resource.is_okay() 

@pytest.mark.parametrize("resource", [1, 5], indirect=True) 
def test_resource_other(resource): 
    assert resource.is_okay() 
+0

'indirect = True'位似乎是pytest中记录不完整的宝石之一!谢谢,这正是我需要的! –

2

我不认为你可以配置它“只接收某些版本的”,但你可以明确地忽略了其中的一些:

def test_worker(resource, worker): 
    if resource.capacity == 800: 
     pytest.skip("reason why that value won't work") 
    worker.use(resource) 
    assert worker.is_okay() 
+0

谢谢。你知道如何为* new *参数请求灯具吗? – danijar

+0

@danijar你是什么意思?如果您认为应将此功能添加到软件包中,请检查其网站,以查看维护人员想要的这些建议。不过,我建议你想出一个更引人注目,更抽象的用例。 – jonrsharpe

+0

在上面的例子中,夹具是为参数1,2和800定义的。但是在某些情况下,我想使用具有其他参数的夹具。我可以使用'pytest.skip()'来忽略参数(我假设在那行后面应该有一个'return'),但是我不能添加新的参数,例如5 – danijar