Ограничивает ли pytest ВСЕ строчные параметры из пользовательских аргументов командной строки? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь перенести некоторые аргументы командной строки из экземпляра 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')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...