Cucumber 如何处理太长的小黄瓜场景线?

Cucumber 如何处理太长的小黄瓜场景线?,cucumber,gherkin,Cucumber,Gherkin,我有一些场景的参数太多,大多数参数都会导致场景的变化。因此,我需要在场景名称中包含参数详细信息,以便深入了解场景。但是,这会导致场景行过长 例如: Scenario: Create list for Today's unique stuff of 'X' item with multiple string attribute values and 'distinct count' aggregation Given I create a 'Create List' request and

我有一些场景的参数太多,大多数参数都会导致场景的变化。因此,我需要在场景名称中包含参数详细信息,以便深入了解场景。但是,这会导致场景行过长

例如:

Scenario: Create list for Today's unique stuff of 'X' item with multiple string attribute values and 'distinct count' aggregation
    Given I create a 'Create List' request and name as 'New List'
    When I add 'X' item to 'Create List' request
    And I add item attribute to current list query on list preview request
      | attribute | operator | values  |
      | id        | EXMATCH  | id1,id2 |
    And I add list aggregation to current list query on 'Create List' request
      | aggField | aggType        |
      | stuff     | DISTINCT_COUNT |
    And I send request to 'Create List' request date as 'TODAY'
    Then 'success' parameter in response should be true
    And received list name should be equal to created list name
    And received list queries in 'Create List' response should be equal to created list queries
另一种情况:

Scenario: Create list for Today's unique stuff of 'X' item with multiple integer attribute values and 'sum' aggregation
或:

Scenario:为今天独特的“X”项创建列表,其中包含多个整型属性值、“sum”聚合和
根据影响场景的不同参数的数量,这可以持续下去。 我有一种感觉,必须有最佳实践来编写更清晰、更短的场景名称。有吗?
我应该如何处理这些长场景名称?或者,我可以找到更简单/更短的方式来表达场景的内容吗?

Cucumber允许您使用自然语言(而不是编程语言)来编写场景。您可以使用自然语言的所有工具来简化场景

两个最强大的简化工具是

  • 抽象
  • 命名
这些工具齐头并进。通过抽象,你可以把一些有很多细节的东西抽象成更简单的东西,去掉细节。您可以使用命名来为这个新事物命名。如果你的名字是好的,你可以用你新的简单术语谈论你复杂的事情,而不再需要谈论细节

为了使场景更简单,您需要抽象、删除细节并给事物起个好名字。这样做的方法是阅读你的场景,区分你正在做什么和你是如何做的。然后让你的场景只关注他们在做什么,而不关注他们是如何做的

当思考某件事正在做什么时,另一个工具是思考某人为什么要做这件事。因此,让我们看看您的场景,并制定一些问题

在计算机领域,我们一直在这样做。每次编写方法/函数时,我们都在进行抽象和命名。我们在现实生活中更经常这样做。当你点咖啡时,你不会说

“我想要一个装在热杯子里的双份速递咖啡,杯里要加3盎司湿牛奶 在60℃下发泡,以天鹅图案浇注”

你说

“我想要一个纯白的”

当然,双表达式只是一组指令的另一个抽象,这些指令涉及水温、咖啡克数、研磨设置(超细)、水压等

通过使用抽象和命名,我们可以雄辩地谈论咖啡的复杂性,而不提及任何细节

那么,对于您的场景,“纯白”或“双快车”是什么呢

您的场景似乎是关于创建某种列表

  • 这是什么样的清单
  • 你为什么要创造它
  • 人们会用这个列表做什么
  • 为什么人们会觉得这个列表有用
一旦你提出并回答了这些问题,你就可以开始思考如何简化。回答这些问题时,请使用以下答案:

  • 命名您的功能
  • 描述你的特征
  • 为您的功能编写序言(功能和第一个场景之间的部分)
  • 给你写剧本标题
你不应该开始写一个场景,直到你完成了所有这些,并且有一个功能告诉你你的场景将是什么,以及为什么对你来说做这些事情很重要

您还将讨论正在添加的导致场景变化的参数。因此,对于要添加的每个参数,您应该询问

  • 这个参数会导致什么样的变化
  • 为什么这种变化很重要?有自己的场景是否足够重要
再想一想创建命名的东西的参数集,比如摩卡咖啡、科尔塔多咖啡或拿铁咖啡

回答完这些问题后,可以从场景中删除参数。创建变体的每一组参数。对于每个变体,您可以通过提取变体并为其命名来删除参数

如果您应用这种方法并回答这些问题,那么您就可以将场景转换为更简单的内容

Scenario: Create list for Today's unique stuff of 'X' item with multiple integer attribute values, 'sum' aggregation and <some other parameter related conditions which causes too long scenario name>