SpecFlow - 是否可以在功能文件中重用测试数据?

时间:2014-02-04 13:56:08

标签: cucumber specflow

有没有办法在SpecFlow功能文件中重用数据? 例如。我有两个场景,它们都使用相同的数据表:

Scenario: Some scenario 1
  Given I have a data table
     | Field Name | Value |
     | Name       | "Tom" |
     | Age        |  16   |
  When ...

Scenario: Some scenario 2
  Given I have a data table
     | Field Name | Value |
     | Name       | "Tom" |
     | Age        |  16   |
  And I have another data table
     | Field Name | Value     |
     | Brand      | "Volvo"   |
     | City       |  "London" |
  When ...

在这些简单的例子中,表格很小而且没有大问题,但在我的情况下,表格有20多行,每个表格至少会用5次。

我想象这样的事情:

Having data table "Employee"
     | Field Name | Value |
     | Name       | "Tom" |
     | Age        |  16   |

Scenario: Some scenario 1
  Given I have a data table "Employee"
  When ...

Scenario: Some scenario 2
  Given I have a data table "Employee"
  And I have another data table
     | Field Name | Value     |
     | Brand      | "Volvo"   |
     | City       |  "London" |
  When ...

我在SpecFlow文档中找不到这样的内容。共享数据的唯一建议是将其放入*.cs个文件中。但是,我不能这样做,因为功能文件将由非技术人员使用。

2 个答案:

答案 0 :(得分:5)

背景是这样的常见数据的位置,直到数据太大而背景部分最终跨越多个页面。听起来可能就是这种情况。

你提到的表每个都有20多行,并且有几个像这样的数据表。对于读者来说,在进入场景之前,这将是很多背景知识。还有其他方法可以描述数据吗?当我在过去使用这样的数据表时,我将细节放入自动化代码中的fixtures类中,然后仅描述Feature文件中的重要方面。

假设为了一个例子,“汤姆”是一个潜在的汽车买家,而你正在运行某种汽车陈列室,那么他的数据表可能包括:

| Field         | Value |
| Name          | Tom   |
| Age           | 16    |
| Address       | ....  |
| Phone Number  | ....  |
| Fav Colour    | Red   |
| Country       | UK    |

您的情景2可能是“18岁以下的人不应该买车”(至少在英国)。鉴于这种情况,我们不关心汤姆的地址电话号码,只关心他的年龄。我们可以将该场景写成:

Scenario: Under 18s shouldnt be able to buy a car
    Given there is a customer "Tom" who is under 16
    When he tries to buy a car
    Then I should politely refuse

我们只是引用重要部分,而不是将Tom的详细信息表保存在Feature文件中。当Given步骤运行时,自动化可以从我们的灯具中查找“Tom”。该步骤参考了他的年龄,以便a)特征文件的读者清楚Tom是谁,以及b)确保夹具数据仍然有效。

该场景的读者将立即了解汤姆(他16岁)的重要性,他们不必在场景和背景之间不断引用。其他方案也可以使用Tom,如果他们对其信息的其他方面感兴趣(例如地址),那么他们可以指定相关信息Given there is a customer "Tom" who lives at 10 Downing Street

哪种方法最好取决于您获得的数据量。如果它是几个表中的少量字段然后将它放在后台,但一旦它变成10个以上的字段或大量的表(可能我们有很多潜在的客户),那么我建议将它移到功能文件,仅描述每个场景中的相关信息。

答案 1 :(得分:3)

是的,您使用背景,即来自https://github.com/cucumber/cucumber/wiki/Background

Background:
  Given I have a data table "Employee"
  | Field Name | Value |
  | Name       | "Tom" |
  | Age        |  16   |

Scenario: Some scenario 1
  When ...

Scenario: Some scenario 2
  Given I have another data table
  | Field Name | Value     |
  | Brand      | "Volvo"   |
  | City       |  "London" |

如果你不确定我发现http://www.specflow.org/documentation/Using-Gherkin-Language-in-SpecFlow/是一个很好的资源