我是测试设计师,我正在创建.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个值。 但是如果我将Scenario Outline与例子一起使用,那么它将从一开始就为每个' X'我使用的价值,每次都会执行所有Givens。
这将需要很长时间,测试非常简单,并且在运行背景后为每个值运行When + Then组合可能足以用于测试目的。
有没有办法在不使用场景大纲的情况下检查Gherkin中的多个值,是否可以多次运行When和Then组合来检查每个值?
感谢对此事的任何帮助
答案 0 :(得分:0)
您可以使用数据表作为输入,并以解析数据表的方式实现您的步骤。然后,您可以对每个表元素执行断言。 SpecFlow DataTables Documentation
Given I test the following outcomes
| value | field | display_location |
| X | Y1 | Somewhere |
| y | Y2 | Somewhere Els |
通过使用实例变量来保存测试值,您可以在数据集的其他步骤中执行操作和验证。
答案 1 :(得分: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");
}
}
这里的好处是,除了高级步骤之外,您将在输出中看到每个步骤及其参数。