2012-12-18 27 views
9

İki basit test ayarım var ve bunları bir fikstür 'da gruplandırmaya çalışıyorum ve test fonksiyonunun fikstüre 'params' içinden geçmesini istiyorum.Pytest fikstürüne geçirilen paramitler değişken olarak kabul edilebilir mi?

Sorgumu açıklamak için, burada örnek bir örnek. Aşağıdaki pytest fikstürü var demek: böylece

@pytest.fixture(scope="module", params=['param1','param2']) 
def myFixture(request): 
    if request.param == 'param1': 
     p = 5 
    elif request.param == 'param2': 
     p = 10 
    return p 

# would like to set request.param = ['param1'] for myFixture 
def test_madeup(myFixture): 
    assert myFixture == 5 

# would like to set request.param = ['param2'] for myFixture 
def test_madeup2(myFixture): 
    assert myFixture == 10 

bunu yapabilir miyim yukarıda test_madeup fonksiyona girdi olarak iletilen parametreler? Yani, aşağıdaki gibi bir şey:

@pytest.fixture(scope="module", params=fixtureParams) 
def myFixture(request): 
    if request.param == 'param1': 
     return 5 
    elif request.param == 'param2': 
     return 10 


def test_madeup(myFixture, ['param1']): 
    assert myFixture == 5 

yukarıdaki elbette çalışmıyor. Gerçek durum biraz daha karmaşık, ama ben sadece params=['param1','param2'] işlevini test_madeup işlevinden sabitlemeye geçirip getiremeyeceğimi bilmek istiyorum.

cevap

14

, temelde ile yürütülmesi için parametrized fikstür bir örneğini seçmek istiyor Test ile bazı bilgileri sağlayarak bir test. Bir mekanizmayı düşünmemize rağmen bu mümkün değil.

import pytest 

@pytest.fixture(scope="module") 
def myFixture1(): 
    return 5 

@pytest.fixture(scope="module") 
def myFixture2(): 
    return 2 

@pytest.fixture(scope="module", params=["param1", "param2"]) 
def myFixture(request): 
    if request.param == 'param1': 
     return request.getfuncargvalue("myFixture1") 
    elif request.param == 'param2': 
     return request.getfuncargvalue("myFixture2") 

def test_1(myFixture1): 
    assert myFixture1 == 5 

def test_2(myFixture2): 
    assert myFixture2 == 2 

def test_all(myFixture): 
    assert myFixture in (2,5) 

Bu dört testleri çalıştırır test_all hem armatürleri ile iki kez yürütüldüğünde, çünkü: Aşağıdaki çözüm bütün sorununa eşler, ama burada yukarıda somut olayı çözmek için bir yol olup olmadığından emin değilim.

Armatürlerinizin kurulumu ağır değilse, bir liste üreten ve "yinelenen" parametrized olan bir fikstür de olabilir. Bir test daha sonra bütün listeyi alabilir ve içine dizine ekleyebilir.

3

bu istediğini, ancak örnek vaka gibi uygulanabilir emin değilim: i Sorunuzu doğru anlamak

@pytest.mark.parametrize(('param', 'expected'), [('param1', 5), ('param2', 10)]) 
def test_madeup(param, expected): 
    assert param == expected 
İlgili konular