如何在cucumber中测试具有多个背景的相同特征

如何在cucumber中测试具有多个背景的相同特征,cucumber,Cucumber,我有一个特性(一个.feature文件),在cucumber中运行良好 该功能中所有场景的背景仅设置一个用户,然后作为管理员登录,例如 Background: Given I am logged in as a supervisor with an existing supervisee ...loads of scenarios 但是,应用程序的设计/目标已更改,无论您是以主管身份还是以用户身份登录,相同的场景都应该有效。对于大多数应用程序的其他部分来说,这是不正确的

我有一个特性(一个.feature文件),在cucumber中运行良好

该功能中所有场景的背景仅设置一个用户,然后作为管理员登录,例如

   Background:
     Given I am logged in as a supervisor with an existing supervisee

   ...loads of scenarios
但是,应用程序的设计/目标已更改,无论您是以主管身份还是以用户身份登录,相同的场景都应该有效。对于大多数应用程序的其他部分来说,这是不正确的,因为这些应用程序的设计对于主管/用户来说是不对称的

是否有任何合理的方法可以避免在不同的背景下复制和粘贴整个要素文件?似乎没有一种方法可以参数化背景(例如,使用非此即彼:或:节),也没有另一种方法可以拉入带有大量场景的外部文件。想法

   Background:
     Given I am logged in as an existing supervisee

   ...same loads of scenarios
下面是一些幻想的小黄瓜语法(不存在)


如果是我的话,我会接受复制品:

另一种方法是在功能上使用一个标记,指示您希望针对两个用户组运行场景。然后使用Around钩子运行场景两次,每种类型的用户运行一次


我们之前已经讨论过背景概述之类的内容,但我们得出的结论是,不值得付出额外的复杂性来实现它。

我不清楚您想要做什么更改。你能展示一下背景,解释一下它目前表现出什么样的行为,并描述一下你希望它表现出什么样的行为吗?@MarkThomas我已经添加了一个现有的背景,复制粘贴版本,以及一些“幻想小黄瓜语法”来说明我的目标at@TimDiggins我知道这是个老问题,但我很好奇你是否找到了用小黄瓜描述“背景轮廓”的方法。。。也许有人想出了一个分机?@muhqu,没有,我只是把复制品放在里面了。我可以看出,太多的复杂性可能与黄瓜的特性背道而驰。我有点不喜欢cucumber(作为一名开发人员,这是Spinach项目的核心原因),现在我倾向于用rspec编写特性/验收测试。我仍然经常写小黄瓜(Given/When/Then)描述作为一种交流方式,但只是不让它们成为可执行的。我不想要复制,不是因为我是一个干巴巴的狂热者,而是因为它实际上只是一个功能,而且把它放在一个地方更具表现力。但是标记和使用环绕钩子是非常有表现力的。太好了,谢谢!真的有用吗?似乎不可能多次执行一个块。请参阅答案。@rsenna(对迟来的回复表示歉意)-我实际上没有尝试,但将副本留在了中。我喜欢环绕钩子的想法,但这太费劲了(而且看起来它最终不会奏效)。我认为缺少背景轮廓使cucumber非常笨重,以至于除了最简单的情况外,几乎对所有情况都没有用处。在IMHO中实现它是不需要动脑筋的。我同意,这是一个绝对应该实现的特性。有人知道有没有进一步的讨论?
   Background Outline:
     Given I am logged in as a <user>

   Backgrounds:
     | user                                   |
     | supervisor with an existing supervisee |
     | an existing supervisee                 |

   ...loads of scenarios
   Background:
     Given I am logged in as an existing supervisee

   Include Scenarios:
     supervisor.features