当我使用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参数传递...
答案 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)