2016-08-21 4 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() 

Как я могу указать только получать определенные версии Конкретного fied fixture?

ответ

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

бит 'косвенный = истинный', кажется, является одним из плохо документированных драгоценных камней 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

Спасибо. Знаете ли вы, как запросить приспособление для * новых * параметров, хотя? – danijar

+0

@ danijar, что вы имеете в виду? Если вы считаете, что эта функциональность должна быть добавлена ​​в пакет, проверьте его веб-сайт, чтобы узнать, где сопровождающие хотят такого рода предложения. Я бы предложил вам придумать более убедительный и менее абстрактный вариант использования. – jonrsharpe

+0

В приведенном выше примере прибор определен для параметров 1, 2 и 800. Но в некоторых случаях я хочу использовать прибор с другими параметрами. Я могу игнорировать параметры с помощью 'pytest.skip()', как вы показали (я предполагаю, что после этой строки должен быть 'return'), но я не могу добавить новые параметры, например 5. – danijar

Смежные вопросы