如何使用 Cucumber 编写 Feature 级别的验收测试?

How to use Cucumber to write an acceptance test at Feature level?

JBehave 基于 Java,适用于 Java 应用程序。 JBehave 还支持良好的 HTML 报告。然而,JBehave 的问题在于它只支持 Story 级别而不支持 Feature 级别。

这里的任何人都可以帮助我提供一个小的解释或文档,以便我了解 Cucumber 如何支持功能级别吗?

功能是功能的实现(功能可能需要多个功能)。

再看一个"story"的Mike Cohn's description,因为还不错:

User stories are short, simple descriptions of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system. They typically follow a simple template:

As a <type of user>, I want <some goal> so that <some reason>.

一个好的用户故事遵循 INVEST principles,这是我们开始进入场景的地方:

  • Independent,即可以自己发货

一个故事可能有一个或多个上下文,该功能将在其中发挥作用。上下文在本质上独立于其他上下文。

  • 可以协商,所以你可以重写它

在处理一个故事时,您可能会发现需要考虑的其他背景或结果。作为特征核心的能力通常与"when"相关联。例如,如果我希望能够生成报告,则 "when" 将是 "When I generate the report..."

  • 有价值,因此它为利益相关者带来价值

可能会有多个利益相关者产生不同的结果。例如,发送电子邮件告知已预订出租车很重要,但将预订确认发送至 driver 也很重要!通过考虑不同的利益相关者,我们得出了需要考虑的场景的结果。

  • 可估算,所以您可以估算尺寸

如果您无法估计大小,请尝试只让一个场景起作用。这是 Kent Beck 的 "spike" 的功能等价物。顺便说一句,您需要估算的唯一原因通常是确定它是否值得做,考虑到其他可以完成的工作,因此相应地对待它。

  • 小,这意味着你应该对它有一定程度的把握。

我实际上更喜欢人们知道他们对此有一定程度的不确定性,并希望尽快获得反馈。如果你真的确定它(例如:登录)那么它可以更大,因为你需要反馈的频率会降低;你知道 "working" 是什么样子的。

  • 可测试,这意味着相关描述必须包含足够的内容来测试它

作为本分析的一个很好的by-product示例成为测试。

为什么我们首先要写故事?为什么不只提供全部功能?

事实证明,交付某些功能所需的工作量非常大,尤其是当您有很多利益相关者参与时,我们希望将它们切分以便从中获取价值更早一点,或者我们想对它们进行切片以便我们获得反馈。

所以一个故事可能是一个可以实际交付的功能的片段,或者它可能是为了获得反馈而设计的。

场景是实现此目的的绝佳方式!该功能可以缩小到最有价值的上下文,或者需要考虑其结果的不同利益相关者。注意不要排除有交易需求(ATM 上的用户取钱;银行记账)或监管需求(银行进行重大投资;监管机构看到资本储备变化)的利益相关者。

场景并不是获得功能反馈的唯一方式。新 UI? Hard-code 它没有任何行为并展示给人们。新报告?制作模拟副本。从未有人处理过的新提要?做一个尖刺,看看你能不能从中得到你认为你能得到的信息。

否则,请考虑需要考虑其结果的不同背景和利益相关者,并根据他们的背景和结果考虑不同的能力。功能实现不同的要求,其行为由您派生的场景说明。

由于故事是功能的切片,而功能实现了功能,因此这是一个典型的层次结构:

  • 利益相关者
  • 目标
  • 能力
  • 特征
  • 故事
  • 场景

如果您正在尝试找出如何将场景与故事和功能相关联,这不是一个坏方法。如果你看一下 Gojko Adzic's "Impact Mapping" or Matt Wynne's "Example Mapping",你会发现它很熟悉(我想我们都听过 Chris Matts 的演讲)。

要小心,因为实际上这有点模糊;当您开始交付时,您会有所发现,所以不要提前分解所有内容。我发现能力是很好的 planning-level 工件,并且通常很容易与 "Epics" 相关联。他们也有自己的 high-level 测试:"Can our users do what they need to, for the contexts we need to consider, and the stakeholders whose outcomes are also needed?"

故事的诀窍是只考虑需要来传递价值,直到它真正传递...然后剩下的一些将是下一个需要的东西等

如需更多想法,请查看我在 capability-based planning and lightweight analysis, and another one on splitting up stories 上的博客。

对于 Cucumber,先按功能组织,然后(如果需要)按上下文组织,并用 s 标记 check-insory number(大多数 CI 工具、电子板和版本控制系统都支持这个)。一个专题或故事创造更多的场景是可以的。