2014-10-30 17 views
1

是否有可能使用pytest_addoption(解析器)創建pytest.yield_fixture使用的列表?即pytest.yield_fixture使用cmd行選項

def pytest_addoption(parser): 
    parser.addoption("-foo", action="store",defaults="1,2,3") 

@pytest.yield_fixture(params=request.config.getoption('--foo').split(',')) 
def test_bar(request): 
    do_something(request.param) 

說你有6個瀏覽器,和你想運行對1個瀏覽器測試作爲一個快速檢查的能力。我無法弄清如何在測試發現/生成之前到位。幫助

回答

0

這顯然不起作用,因爲您的request變量不存在於全局模塊範圍中,也就是執行裝飾器中的表達式時。解決此問題的方法是使用pytest_generate_tests鉤子:

# conftest.py 
def pytest_addoption(parser): 
    parser.addoption('--foo', action='store', defaults='1,2,3') 

def pytest_configure(config): 
    config.foo = config.getoption('foo').split(',') 

def pytest_generate_tests(metafunc): 
    if 'foo' in metafunc.fixturenames: 
     metafunc.parametrize('foo', metafunc.config.foo) 

# test_bar.py 
def test_bar(foo): 
    do_something(foo)