pytest:从命令行传递列表作为参数不起作用

时间:2020-08-26 16:54:37

标签: python-3.x pytest

当我使用pytest从命令行运行list作为参数时,我面临以下错误。

pytest -vs test_sample.py --html = results.html --A_list = [A1,A2,A3]

错误:找不到文件:A2,

下面是我的 test_sample.py 代码

import pytest

def test_functionality(A_list):
    print("element in list: {}".format(A_list))

下面是我的 conftest.py 代码

def pytest_addoption(parser):
    parser.addoption("--A_list", action="store", default="default name")

def pytest_generate_tests(metafunc):
    option_value = metafunc.config.option.A_list
    if 'A_list' in metafunc.fixturenames and option_value is not None:
        metafunc.parametrize("A_list", [option_value])

如果我仅传递如下一个元素,这将很好地工作

pytest -vs test_sample.py --html = results.html -A_list = A1

但是如果我运行pytest并使用如下所示的A_list元素列表,就会失败

    pytest -vs test_sample.py --html=results.html --A_list=[A1, A2, A3]

谁能让我知道如何通过命令行将列表作为pytest参数传递...

1 个答案:

答案 0 :(得分:1)

问题是您尝试将Python列表作为命令行参数传递。这行不通-命令行参数只是需要解析的字符串。特别是,如果不使用撇号将选项括起来,则不能在其中留空格。

您可以做的是将列表作为字符串传递,例如通过逗号分隔条目:

pytest -vs test_sample.py --html=results.html --A_list="A1,A2,A3"

请注意,由于您没有空格,因此此处严格不需要撇号,但是您仍然可以使用它们。然后,您可以将字符串解析为列表:

def pytest_generate_tests(metafunc):
    option_value = metafunc.config.option.A_list
    if option_value:
        params = option_value.split(",")
        if 'A_list' in metafunc.fixturenames:
            metafunc.parametrize("A_list", params)