是否有方法使用与argparse模块相同的语法向pytest添加自定义CLI参数?

2024-04-16 15:45:59 发布

您现在位置:Python中文网/ 问答频道 /正文

TLDR:

我想扩展pytest的cli,我知道如何使用他们自己的API来实现这一点,但我只是想知道是否有一种方法可以直接使用argparse模块(或至少使用其语法)来实现,因为我已经拥有了我想要添加的所有cli参数,这些参数都是用标准argparse模块的语法编写的,用于我程序的另一部分

完整问题:

我有大约20个CLI(命令行界面)参数/标志/选项,我希望在标准python模块中以及通过调用pytest运行测试时能够接受这些参数/标志/选项

我已经有了标准的python模块设置,可以接受使用argparse模块所需的所有CLI参数,使用的语法如argparse documentation example中所示:

# standard_python_module.py

import argparse

# Initialize argument
parser = argparse.ArgumentParser(description='Program Description.')
parser.add_argument('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

# Parse/get value
args = parser.parse_args()
my_int = args.myint

我还知道,您可以在conftest.py中使用here中描述的语法创建自定义附加CLI参数,以便与pytest一起使用:

# conftest.py

import pytest

# Initialize argument
def pytest_addoption(parser):
    parser.addoption('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

# Parse/get value
def setup(pytestconfig):
    my_int = pytestconfig.getoption("my_int")

对于使用argparse和pytest初始化/创建自定义CLI参数,我只知道一个细微的区别。 Argparse:

parser.add_argument('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

Pytest:

parser.addoption('--my_int', metavar='INT', type=int, nargs='?', help='an integer', default=0)

对于以后解析/访问参数及其各自的值,还有一点不同。我讨厌再次重复几乎完全相同的代码来为pytest设置所有20个自定义CLI参数,我相信pytest现在在幕后使用argparse,因此,我想知道是否有一种好方法可以重用我编写的代码,使用argparse模块设置pytest的自定义CLI参数来设置CLI参数。如果还有一种方法可以重用解析/访问代码,那就太棒了

我尝试直接在conftest.py中使用argparse模块,并以与标准python模块相同的方式执行所有操作,但pytest无法正常工作。我还使用了allure reports模块,它将自己的自定义CLI参数添加到pytest中,当我使用上述方法时,它不再识别allure自定义CLI参数,可能是因为我重新定义/覆盖了现有的argparse CLI参数集

也许有一种方法可以访问pytest使用的底层argparse.ArgumentParser实例

我还考虑创建一个包装器类来包装pytest解析器,并添加一个与标准argparse函数同名的附加函数,该函数只调用底层重命名函数,但我不确定如何实现,这也不能解决以后解析参数的问题

可能的相关链接: pytest Config class documentationpytest Parser class documentation


Tags: 模块方法pyparser参数标准clipytest