使用标记和文本夹具选项时,无法从命令行运行py.test

时间:2013-04-03 17:26:54

标签: python pytest

我设置了这样的夹具:

def pytest_addoption(parser):
    parser.addoption('--env', action='store', default='qa', 
                     help='Specify environment: "qa", "aws", "prod".')

@pytest.fixture(scope='module')
def testenv(request):
    return request.config.getoption('--env')

当我针对文件名调用py.test时,这是有效的,例如:

  • py.test -v --env prod functionaltests / test_health_apps.py

但是当我使用标记调用py.test时它不起作用,如下面的变体:

  • py.test -m selenium --env prod
  • py.test -m'selenium' - env prod
  • py.test --env prod -m selenium
  • py.test --env prod -m'selenium'

这些回报:

用法:py.test [options] [file_or_dir] [file_or_dir] [...]

py.test:错误:没有这样的选项: - env

标记和命令行选项是否不兼容?

1 个答案:

答案 0 :(得分:2)

它们是兼容的。我的猜测是您的配置文件(conftest.py)与您启动测试的目录不在同一目录中。 (我可能在这里错了)

我的建议是为配置创建单独的文件:

#configs.py
def pytest_addoption(parser):
    parser.addoption('--env', 
    dest='testenv',
    choices=["qa","aws","prod"],
    default='qa', 
    help='Specify environment: "qa", "aws", "prod".')

@pytest.fixture(scope='session')
def testenv(request):
    return request.config.option.testenv

并创建您将用作runner.py命令的py.test

#runner.py
import pytest
import sys
import configs

def main():    
    plgns = [configs]
    pytest.main(sys.argv[1:], plugins=plgns)

if __name__=="__main__":
    main()

然后你就可以python runner.py --env prod -m selenium开始了 这对我很有用。