2017-06-13 26 views
0

我是一名测试设计师,我正在创建.feature文件。 我们使用Visual Studio + Specflow,代码是用C#编写的。有没有一种方法可以在不重新启动场景的情况下为多个值执行而创建类似于小黄金场景大纲的场景?

我有下面的测试案例:

Background: 
    Given something 
    And something 
    And something 

Scenario: Scenario name 
    When I set the 'X' value' in the Y field 
    Then The 'X' value is displayed in 'Somewhere' 

我的问题是: 我需要检查20个值。 但是如果我使用带有范例的场景纲要,那么它将从我使用的每个“X”值的开始运行,所有的Givens将会每次执行。

这将花费很长时间,但测试非常简单,运行后台运行后为每个值运行When + Then组合可能足以满足测试目的。

有没有办法在不使用场景轮廓的情况下检查小黄瓜中的多个值,有可能只是运行一次When和Then组合多次检查每个值?

感谢所有帮助这件事

回答

0

你可以使用一个数据表作为输入,并且它解析数据表这样的方式实现你的一步。然后你可以在每个表格元素上执行断言。 SpecFlow DataTables Documentation

Given I test the following outcomes 
| value | field | display_location | 
| X  | Y1 | Somewhere  | 
| y  | Y2 | Somewhere Els | 

由具有实例变量来保存测试值,你可以在数据集中的其他步骤执行操作和验证。

0

你有两个步骤 - 一个设置一些价值的领域,另外检查是否一些领域已经给定值:

[When(@"I set the '(.*)' value in the (.*) field")] 
public void WhenISetTheValueInTheField(string value, string field) 
{ 
    // ... 
} 

[Then(@"The '(.*)' value is displayed in (.*) field")] 
public void ThenTheValueIsDisplayedInField(string value, string field) 
{ 
    // ... 
} 

随着Specflow可以调用步骤从Step Definitions。所以基本上你需要一个高级的步骤来解释你的高级意图 - 验证所有给定的输入值是否正确显示。要通过值和验证数据,你可以使用一个表:

Then all input values are displayed correctly: 
| InputValue | InputField | DisplayedValue | DisplayField | 
| X   | Y   | X    | Somewhere  | 
| Z   | Y   | Z    | SomewhereElse | 

这一步里,你可以调用的步骤,你已经为每一组数据:

[Then(@"all input values are displayed correctly:")] 
public void ThenAllInputValuesAreDisplayedCorrectly(Table table) 
{ 
    foreach (var row in table.Rows) 
    { 
     var inputValue = row["InputValue"]; 
     var inputField = row["InputField"]; 
     When($"I set the '{inputValue}' value in the {inputField} field"); 

     var displayedValue = row["DisplayedValue"]; 
     var displayField = row["DisplayField"]; 
     Then($"The '{displayedValue}' value is displayed in {displayField} field"); 
    } 
} 

的好处在这里除了高级步骤之外,您将在输出中看到每个步骤的参数。

相关问题