如何在Pytest中将config作为命令行参数传递,而不用作测试输入

时间:2017-06-19 22:48:34

标签: command arguments line pytest

想知道我如何读取“Pytest”的命令行参数来获取输入并使用变量而不是作为带有fixture的测试输入,而是使用参数来执行其他操作。 这是我想要实现的目标:

pytest --folder=< label > test_my_logic.py

其中label可以是a,b和c。并且根据标签值,我将获得具有预期数据的实际“文件夹”路径。例如

  • label = a,folder = common / test_data / a
  • label = b,folder = common / test_data / b

我已经添加了conftest.py,如下所示:

import pytest

def pytest_addoption(parser):
    parser.addoption("--folder", action="store", default="All",
        help="Please enter the folder which needs to be executed")

@pytest.fixture
def folder(request):
    return request.config.getoption("--folder")

我有一个json和util方法,我可以使用它来读取json以获取a,b等实际文件夹值的值。我正在寻求帮助以便在我的脚本中知道如何获取参数--folder和使用它来做其他操作,而不是将其传递给我的脚本中带夹具的测试方法?在我正在阅读各种全局变量的测试脚本中,我有:

test_my_logic.py

import pytest
import json
import sys


sys.path.append(os.path.realpath("%s/../../../../../common/utils" % os.path.dirname(os.path.abspath(__file__))))
import utils


print folder
TEST_ATTRIB = utils.getTestAttributes()['LOL']
PLACE_REQUEST_URL  = utils.getURLs()['IMO']
...
...

在命令行中:

py.test --folder=a tests/test_my_logic.py

返回错误:

tests/test_my_logic.py:16: in <module>
    print folder
E   NameError: name 'folder' is not defined

提前致谢!

1 个答案:

答案 0 :(得分:1)

folder是一个夹具,它应该用作测试的参数:

def test_a(folder):
    print folder