Как мога да повторя стъпки в схема на сценарий на Specflow

Накратко, това, от което се нуждая, е да създам схема на сценарий със стъпка, която може да се повтаря, без да се налага да я въвеждам с помощта на множество И, както правя в момента по-долу:

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 със списък, разделен със запетая, или нещо подобно.

Окончателният отговор, с който отидох, е нещо повече от това:

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     |

Изглежда обаче, че няма добър начин да оставите стойност празна, но това е доста близо до решението, което търсех


person Justin Pihony    schedule 30.09.2011    source източник


Отговори (3)


Ключовата дума 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     |
person Adam Houldsworth    schedule 27.10.2011
comment
Ще пробвам да храня на маса по-късно. Това изглежда най-близо до това, което търсех. Благодаря! - person Justin Pihony; 30.12.2011
comment
Всъщност това беше само отчасти правилно. Редактирах оригиналната си публикация, за да отразя какво направих за всеки, който търси този отговор в бъдеще - person Justin Pihony; 27.01.2012

Може да успеете да използвате подход, предложен от patrikmcgraw в отговор на моя въпрос:

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...
    }
}
person MattStacey    schedule 07.10.2011

Това работи за мен и също изглежда малко по-четливо:

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|
person Ashok M A    schedule 04.11.2016