为什么 pytest 在尝试创建自定义命令行选项时出现"unrecognized option"错误?



我使用的是Python 3.8和pytest 6.0.1。如何为pytest创建自定义命令行选项?我以为把它添加到conftest.py中很简单…

def pytest_addoption(parser):
    parser.addoption('--option1', action='store_const', const=True)

但是当我进行pytest时,我得到了一个无法识别的选项错误

# pytest --option1=Y -c tests/my_test.py 
ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --option1=Y

添加自定义选项的正确方法是什么?

编辑:我尝试了给出的答案。我在tests/conftest.py文件中包含了一些其他内容,以防这些内容是答案不起作用的原因。文件包含

def pytest_generate_tests(metafunc):
option1value = metafunc.config.getoption("--option1")
print(f'Option1 Value = {option1value}')
def pytest_configure(config):
use_docker = False
try:
use_docker = config.getoption("--docker-compose-remove-volumes")
except:
pass
plugin_name = 'wait_for_docker' if use_docker else 'wait_for_server'
if not config.pluginmanager.has_plugin(plugin_name):
config.pluginmanager.import_plugin("tests.plugins.{}".format(plugin_name))

但运行时输出为

$ pytest -s --option1 tests/shared/model/test_crud_functions.py
ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --option1
inifile: /Users/davea/Documents/workspace/my_project/pytest.ini
rootdir: /Users/davea/Documents/workspace/my_project

如注释中所述,action='store_const'使您的选项成为一个标志。如果在cli上指定了选项值,则在读取选项值时收到的值是由const指定的值,即True

试试这个:将下面的函数添加到conftest.py

def pytest_generate_tests(metafunc):
option1value = metafunc.config.getoption("--option1")
print(f'Option1 Value = {option1value}')
  1. 使用选项pytest -s --option1调用pytest

    输出将具有:选项1值=真

  2. 在没有选项pytest -s的情况下调用pytest

    输出将具有:选项1值=无

action=store可能会为您提供所需的行为。

解决方案

# Change the action associated with your option to action='store'
def pytest_addoption(parser):
parser.addoption('--option1', action='store')

def pytest_configure(config):
x = config.getoption('option1')
print(x)  # Any logic that uses option value

输出:

pytest -s --option1=Y -c=test.py
Y
============================================================================= test session starts ==============================================================================
platform darwin -- Python 3.8.5, pytest-6.0.1, py-1.9.0, pluggy-0.13.1

您可以在此处找到可用操作的详细信息和更多信息:https://docs.python.org/3/library/argparse.html#action

将pytest版本降级到pytest7.1.0,它为我解决了这个问题。

我认为在这种情况下顺序很重要。

尝试pytest -c tests/my_test.py --option1=Y

相关内容

  • 没有找到相关文章

最新更新