简而言之,我需要的是创建一个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 |
似乎没有一个好的方法可以将值留空,但这与我正在寻找的解决方案非常接近
答案 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
。
当然,如果您需要测试多个重复项目,可以同时使用逗号列表中的StepArgumentTransformation
和Examples:
:
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|