python-3.x - pytest:从命令行传递列表作为参数不起作用
问题描述
当我使用 list 作为命令行参数运行 pytest 时,我面临以下错误。
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
但是,如果我使用 A_list 的元素列表运行 pytest,它会失败,如下所示
pytest -vs test_sample.py --html=results.html --A_list=[A1, A2, A3]
谁能让我知道如何从命令行将列表作为 pytest 参数传递...
解决方案
问题是您尝试将 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)
推荐阅读
- delphi - 如何使 Delphi 表单上的所有控件不可编辑/可更改但仍允许用户复制内容
- azure - 如何使用 Graph Api 使用正则表达式在 Azure AD B2C 中查找用户?
- reactjs - 无法使用 express 访问 nginx 上的路由
- javascript - 如何将 evt.target.value 传递给单独的 js 文件?
- scala - 为什么我们使用扁平化?它与平面地图有什么不同?
- php - 乘法表php意外'for'
- android - 如何在android中绘制带有马蹄形的progressBar?
- python - 节点 sql server 将数据插入表格
- c# - 包括 "{" -sign in string.Format
- ssas - SSAS DSV 的变化是否会影响多维数据集中的旧数据浏览?