如何重复Specflow Scenario Outline中的步骤

时间:2011-09-30 18:31:01

标签: specflow

简而言之,我需要的是创建一个Scenario Outline,其中包含一个可重复的步骤,而不必使用多个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次。

我找到的最接近这个问题的是How do I re-run a cucumber scenario outline with different parameters?,但我想在放弃并使用带有逗号分隔列表或类似内容的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     |

似乎没有一个好的方法可以将值留空,但这与我正在寻找的解决方案非常接近

3 个答案:

答案 0 :(得分:6)

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中使用表:

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

然后简单地迭代表中的所有行以获取您的参数。这避免了需要使用临时方法进行转换。

备选方案包括使用更多步骤或参数解析,正如您所说,使用StepArgumentTransformation

当然,如果您需要测试多个重复项目,可以同时使用逗号列表中的StepArgumentTransformationExamples:

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

答案 1 :(得分:1)

您或许可以利用patrickmcgraw建议的方法回答我的问题:

SpecFlow/Cucumber/Gherkin - Using tables in a scenario outline

所以基本上你可以将输入x作为普通输入字符串,在这种情况下将它分割为分隔符','然后迭代它执行你的动作,如下所示(我没有测试过这段代码)。 / p>

[When(@"I enter (.*) as an amount")]
public void IEnterAsAnAmount(string x)
{
   var amounts = x.Split(',');
    foreach (var amount in amounts)
    {
        // etc...
    }
}

答案 2 :(得分:0)

这对我有用,看起来也更具可读性:

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|