将命令行参数传递给测试模块

时间:2018-10-27 21:50:44

标签: python pytest

运行python脚本时,我们可以使用sys.argv获取命令行参数,并在python代码中的任何位置使用它。

在运行pytest时,我们可以使用pytest_addoption添加命令行参数,但是在我看来,我们只能在测试或固定装置中使用它们,我们可以通过暴露{ {1}}个对象。

但是,就我而言,我希望能够从测试模块主体本身访问命令行选项。

是否可以通过某种方式访问​​pytest的配置而无需任何固定装置?

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式访问​​配置对象:

  1. 通过request灯具对象的request.config属性
  2. 通过pytestconfig固定装置
  3. 通过pytest.configthe config object becomes a module attribute in the pytest_configure hook invocation-在初始阶段应谨慎使用,但在测试中可以完全依靠它)。这大概就是您要寻找的。
  4. 通过_pytest.nodes.Node子类化的任何对象的node.config属性,例如Session对象,测试项目节点等。

用法示例:

# conftest.py
def pytest_addoption(parser):
    parser.addoption('--spam', action='store_true', default=False, help='some flag')
# test_spam.py

import pytest


print('accessing option on module level', pytest.config.getoption('--spam'))

def util():
    print('accessing option from non-test function', pytest.config.getoption('--spam'))


@pytest.fixture
def myfixture(request, pytestconfig):
    print('accessing option in fixture via request', request.config.getoption('--spam'))
    print('accessing option in fixture via session', request.session.config.getoption('--spam'))
    print('accessing option in fixture via pytestconfig', pytestconfig.getoption('--spam'))


def test_spam(request, pytestconfig):
    print('accessing option in fixture via request', request.config.getoption('--spam'))
    print('accessing option in fixture via session', request.session.config.getoption('--spam'))
    print('accessing option in fixture via pytestconfig', pytestconfig.getoption('--spam'))