3

我这样设置夹具:

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 功能测试/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 '硒'

这些返回:

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

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

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

4

1 回答 1

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
这对我很有效。

于 2013-04-04T02:51:15.437 回答