Я пытаюсь перенести некоторые аргументы командной строки из экземпляра argparse.ArgumentParser
в эквивалентный файл pytest conftest.py
, используя pytest pytest_addoption
Глядя на функцию помощи pytest, я обнаружил, что используется 12 используемых одиночных символовкороткие варианты, а именно k, m, x, c, s, v, q, r, l, h, p, o
MacBook-Pro:~ user$ pytest --help | grep " -[a-z]"
-k EXPRESSION only run tests which match the given substring
-k 'test_method or test_other' matches all test
'test_method' or 'test_other', while -k 'not
-m MARKEXPR only run tests matching given mark expression.
example: -m 'mark1 and not mark2'.
-x, --exitfirst exit instantly on first error or failed test.
-c file load configuration from `file` instead of trying to
-s shortcut for --capture=no.
-v, --verbose increase verbosity.
-q, --quiet decrease verbosity.
-r chars show extra test summary info as specified by chars
-l, --showlocals show locals in tracebacks (disabled by default).
-h, --help show help message and configuration info
-p name early-load given plugin (multi-allowed). To avoid
-o [OVERRIDE_INI [OVERRIDE_INI ...]], --override-ini=[OVERRIDE_INI [OVERRIDE_INI ...]]
И все же, если я попытаюсь определить параметр вне этого набора, я получу следующее исключение
def pytest_addoption(parser):
parser.addoption('-b', '--build_special' )
File "/Library/Python/2.7/site-packages/_pytest/config/argparsing.py", line 72, in addoption
self._anonymous.addoption(*opts, **attrs)
File "/Library/Python/2.7/site-packages/_pytest/config/argparsing.py", line 305, in addoption
self._addoption_instance(option, shortupper=False)
File "/Library/Python/2.7/site-packages/_pytest/config/argparsing.py", line 315, in _addoption_instance
raise ValueError("lowercase shortoptions reserved")
ValueError: lowercase shortoptions reserved
Это, похоже, имеет место независимо от того,персонаж, которого я выбираю, заставляет меня думать, что это просто ограниченный период поведения.
Вопрос: ограничивает ли pytest какое-либо иное использование коротких опций?
Я немного сбит с толку, потому что, когда вы смотрите на соответствующий источник pytest source
def addoption(self, *opts, **attrs):
""" register a command line option.
:opts: option names, can be short or long options.
:attrs: same attributes which the ``add_option()`` function of the
`argparse library
<http://docs.python.org/2/library/argparse.html>`_
accepts.
After command line parsing options are available on the pytest config
object via ``config.option.NAME`` where ``NAME`` is usually set
by passing a ``dest`` attribute, for example
``addoption("--long", dest="NAME", ...)``.
"""
self._anonymous.addoption(*opts, **attrs)
, кажется, что я могу использовать тот же синтаксис, что и в add_option argparse, что достаточно интересно вargparse документация упоминает, что
Заменить все optparse.OptionParser.add_option()
вызовы на ArgumentParser.add_argument()
вызовы.
и add_argument документация еx явно указывает эту единственную опцию флага как разрешенную:
Метод add_argument()
должен знать, является ли необязательный аргумент, такой как -f
или --foo
, или позиционным аргументом, таким как список имен файлов,ожидается.Поэтому первые аргументы, передаваемые в add_argument (), должны быть либо набором флагов, либо простым именем аргумента.Например, необязательный аргумент может быть создан как:
>>> parser.add_argument('-f', '--foo')