Cucumber Regex: Как мне сопоставить повторяющуюся последовательность пар значений, разделенных запятыми? - PullRequest
2 голосов
/ 21 апреля 2011

У меня есть следующие строки:

I submit the following values: username 'foo', password 'bar'
I submit the following values: username 'foo', password 'bar','foo', profile 'bar', extra 'something'

Я пытаюсь сопоставить пары значений, но я не уверен, как можно повторить шаблон.

Итак, я хочу получить результат:

 username 'foo'
 password 'bar'
 ...

Мое регулярное выражение:

 I submit the following values: (\w+\s[^,]+),

Мне нужно найти способ повторить шаблон, и мне также нужно позаботиться о пропущенной запятой в конце.Я использую результат в среде тестирования, подобной Cucumber для Python (свежо).

Конечный результат будет выглядеть примерно так:

@When(r'I submit the following values: (\w+\s[^,]+), ...')
def post_values_to_url(*args):
    post_dict = {}
    for pairs in args:
         #add values to dict

    response = client.get('this/is/a/url', post_dict)

Ответы [ 3 ]

2 голосов
/ 25 апреля 2011

Если вам нужно разобрать произвольное количество пар, то я бы предложил использовать таблицу, например ::100100

When I submit the following values:
  | username | foo |
  | password | bar |

В Cucumber :: Ast :: Table есть метод row_hash, который даст вам то, что вам нужно.

Тем не менее, я подозреваю, что использование подобного определения шага «один размер подходит всем» делает ваши сценарии трудными для чтения. Вместо этого, как насчет того, чтобы сделать что-то вроде этого:

Given a user exists with username "foo"
And that user has the profile "bar"
When I login as "foo" with password "bar"
...

Редактировать: Просто заметил, что вы на самом деле не огурец. Но я подозреваю, что Freshen также поддержит таблицы.

0 голосов
/ 21 апреля 2011

Закончилось разделением на два регулярных выражения:

@When(r'I submit the following values: (.+)')
def post_values_to_url(pairs):
    regex = r'(\w+)\s\'(\w+)\',?'
    results = re.findall(regex, pairs)
    post_dict = {}

    for result in results:
        post_dict[result[0]] = result[1]
0 голосов
/ 21 апреля 2011

Окружить весь шаблон: (?:(\w+\s[^,]+),)+

...