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

Cucumber SpecFlow-是否可以在功能文件中重用测试数据?,cucumber,specflow,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

有没有办法重用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
文件中。但是,我不能这样做,因为功能文件将由非技术人员使用。

是的,您使用背景,即来自


如果您不确定我是否找到了一个很好的资源,那么在数据变得太大并且您的“背景”部分最终跨越了几页之前,背景就是这样的常见数据的位置。听起来你可能就是这样

您提到的表每个都有20多行,并且有几个类似这样的数据表。这将是读者在进入场景之前要涉猎的很多背景知识。有没有其他方法可以描述这些数据?过去,当我有这样的数据表时,我将细节放在自动化代码中的fixtures类中,然后在功能文件中描述重要的方面

举个例子,假设“Tom”是一个潜在的汽车买家,并且您正在经营某种汽车展示厅,那么他的数据表可能包括:

| 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的详细信息表保存在特征文件中,而是引用了重要的部分。当
给定的
步骤运行时,自动化可以从我们的夹具中查找“Tom”。该步骤参考了Tom的年龄,以便a)特征文件的读者清楚Tom是谁,b)确保夹具数据仍然有效

阅读该场景的读者将立即理解Tom(他16岁)的重要之处,他们不必不断地在场景和背景之间引用。其他场景也可以使用Tom,如果他们对Tom信息的其他方面(例如地址)感兴趣,则可以指定相关信息
,前提是有一位住在唐宁街10号的客户“Tom”

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

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