Как я могу повторить шаги в наборе сценариев Specflow - PullRequest
6 голосов
/ 30 сентября 2011

Короче говоря, мне нужно создать схему сценария с шагом, который можно повторять, без необходимости вводить его, используя несколько AND, как я сейчас делаю ниже:

Scenario Outline: outline
    Given I am a user
    When I enter <x> as an amount
       And I enter <x2> as an amount
    Then the result should be <result>
Scenarios:
    |x|x2|result|
    |1|2 |3     |
    |1|0 |1     |

Однако яЯ хотел бы сделать что-то вроде следующего:

Scenario Outline: outline 
    Given I am a user
    When I enter <Repeat: x> as an amount
    Then the result should be <result>

Scenarios:
    |x    |result|
    |1,2,3|6     |
    |1,2  |3     |

По сути, я хочу, чтобы «Я ввел как сумма» для запуска 3 и 2 раза соответственно.

Ближайший я нашел кэтот вопрос Как мне повторно запустить схему сценария с огурцом с другими параметрами? , но я хотел проверить еще раз, прежде чем отказаться от использования StepArgumentTransformation со списком через запятую или чем-то подобным.1012 * Окончательный ответ, с которым я согласился, выглядит примерно так:

Scenario Outline: outline 
    Given I am a user
    When I enter the following amounts
        | Amount1 | Amount 2| Amount3|
        | <Amt1>  | <Amt2>  | <Amt3> | 
    Then the result should be <result>

Scenarios:
    |Amt1 |Amt2 |Amt3 |result|
    |1    |2    |3    |6     |

Кажется, что нет хорошего способа оставить значение пустым, но это довольно близко к решению, которым я былищу

Ответы [ 3 ]

6 голосов
/ 27 октября 2011

Ключевое слово Examples:

Scenario Outline: outline
    Given I am a user
    When I enter <x> as an amount
    Then the result should be <result>
    Examples:
        |x|result|
        |1|3     |
        |1|1     |

Используется, когда весь тест принимает разные параметры.Звучит так, как будто вы хотите передать повторяющиеся параметры на шаге When.

Более простой подход, который не требует реализации StepArgumentTransformation, заключается в простом использовании таблицы в случае когда:

When I enter the following amounts
|Amount|
|2     |
|3     |
|4     |

Затем просто итерируйте все строки в таблице, чтобы получитьаргументы.Это избавляет от необходимости иметь промежуточный метод для преобразования.

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

Конечно, если вынеобходимо протестировать несколько повторяющихся элементов, вы можете использовать как StepArgumentTransformation, так и Examples: подачу в запятом-списке чисел:

Examples:
|x    |result|
|1    |1     |
|1,2,3|6     |
1 голос
/ 08 октября 2011

Возможно, вам удастся использовать подход, предложенный patrickmcgraw для ответа на мой вопрос:

SpecFlow / Cucumber / Gherkin - Использование таблиц в схеме сценария

Таким образом, вы можете взять ввод x как обычную строку ввода, разделить его на разделитель в этом случае ',' и затем выполнить итерацию по нему, выполняя ваши действия, например, как показано ниже (я не тестировал этот код).

[When(@"I enter (.*) as an amount")]
public void IEnterAsAnAmount(string x)
{
   var amounts = x.Split(',');
    foreach (var amount in amounts)
    {
        // etc...
    }
}
0 голосов
/ 04 ноября 2016

Это работает для меня и выглядит немного более читабельным:

Scenario: common scenarios goes here one time followed by scenario outline.
   Given I am a user

Scenario Outline: To repeat a set of actions in the same page without logining in everytime.
   When I enter <x> as an amount
   Then the result should be <result>

Examples:
|x|result|
|1|2|
|2|4|
|4|8|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...