pytest.yield fixture使用命令行选项

时间:2014-10-30 20:07:08

标签: python selenium-webdriver pytest

是否可以使用pytest_addoption(parser)创建pytest.yield_fixture使用的列表?即。

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个浏览器运行测试作为快速检查。我无法弄清楚如何在测试发现/生成之前就位。帮助

1 个答案:

答案 0 :(得分: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)